您的位置:首页 > 编程语言 > Java开发

Java常见知识点整理

2016-10-10 15:02 211 查看
1.面向对象的特性:

  1)抽象。将一类对象的共同特征总结出来的过程,包括数据抽象和行为抽象两方面。抽象值关注对象有哪些属性和行为,并不关注这些行为的具体细节

  2)继承。

  3)封装。把数据和操作数据的方法绑定起来,对数据的访问只能通过已定义的接口。

  4)多态性。指允许不同子类型的对象对同一消息作出不同的响应。分为编译时多态运行时的多态。方法重载实现的是编译时的多态性(前绑定),而方法重写实现的是运行时的多态

2. 基本数据类型和包装类型

   1)Java中的基本数据类型只有8个:byte、short、int、long、float、double、char、boolean;除了基本类型(primitive type)和枚举类型(enumeration
type),剩下的都是引用类型(reference type);

   2)Java中为了能够将基本数据类型当成对象操作,Java为每一个基本数据类型都引入了对应的包装类型(wrapper class);

   几个经典考题:

<span style="font-size:18px;">class AutoUnboxingTest {
public static void main(String[] args) {
Integer a = new Integer(3);
Integer b = 3;                  // 将3自动装箱成Integer类型
int c = 3;
System.out.println(a == b);     // false 两个引用没有引用同一对象
System.out.println(a == c);     // true a自动拆箱成int类型再和c比较
}
}</span>
其中封装类型和基本数据类型之间的比较,封装类型会自动拆箱

3. 构造器是否可以重写

首先构造器是不能够被继承的,所以就不能被重写,但可以被重载

4.Java中的equal和hasCode之间的关系

 1).如果两个对象相同(equals方法返回true),那么它们的hashCode值一定要相同;如果两个对象的hashCode相同,它们并不一定相同。

 2).hasCode是根据对象的地址进行映射的,所以在重写equal方法时,必须重写hasCode方法

 3).总的来说,hasCode是为了方便在集合中进行元素的查找

5.Java虚拟机

  1). 为什么使用java虚拟机?

      Java语言一个重要的特点就是平台的无关性,java虚拟就就是实现这一特点的关键。一般的高级程序语言如果要在不同平台上运行,至少需要编译成不同的目标代码,而引入了JVM,java屏蔽了具体平台相关的信息,使得java语言编译程序只需生成在java虚拟机上运行的目标代码。JVM在执行字节码时,把字节码解释成具体平台上的机器码(.class--->机器码)

  2).加载.class文件的原理机制

   由于JVM得到是多个类文件,java需要在使用这些类的时候,JVM需要确保这个类已经被加载、链接和初始化。类的加载指把类文件读入到内存中,通常是创建一个字节数组读入.class文件,然后产生与所加载类对应的Class对象。加载完成后,Class对象还不完整,所以此时的类还不可用。当类被加载后就进入连接阶段,这一阶段包括验证、准备(为静态变量分配内存并设置默认的初始值)和解析(将符号引用替换为直接引用)三个步骤。最后JVM对类进行初始化,包括:1)如果类存在直接的父类并且这个类还没有被初始化,那么就先初始化父类;2)如果类中存在初始化语句,就依次执行这些初始化语句。 

6. 运行时异常和受检异常

  1).常见的运行时异常:ArithmeticException/ClassCasteException/NullPointerException/IndexOutOfBoundsException

   RuntimeException是不一定需要捕捉的

   2). 对于父类异常和子类异常,记住子类异常要catch在前面,父类异常catch在后面(有一种先具体后抽象的概念),一旦异常被捕获之后,就不会再继续存在

7. 线程的sleep()/yield()/wait()方法之间的区别

   1). sleep()方法(休眠)是线程类(Thread)的静态方法,调用此方法会让当前线程暂停执行指定的时间,将执行机会(CPU)让给其他线程,但是对象的锁依然保持,因此休眠时
4000
间结束后会自动恢复;

   2). wait()是Object类的方法,调用对象的wait()方法导致当前线程放弃对象的锁(线程暂停执行),进入对象的等待池(wait
pool),只有调用对象的notify()方法(或notifyAll()方法)时才能唤醒等待池中的线程进入等锁池(lock pool),如果线程重新获得对象的锁就可以进入就绪状态。

 
 3). sleep()方法给其他线程运行机会时不考虑线程的优先级,因此会给低优先级的线程以运行的机会;yield()方法只会给相同优先级或更高优先级的线程以运行的机会; 

 
 4). 线程执行sleep()方法后转入阻塞(blocked)状态,而执行yield()方法后转入就绪(ready)状态; 

 
 5).sleep()方法声明抛出InterruptedException,而yield()方法没有声明任何异常;

8.
事务的问题

 
1). 读脏:A事务读取了B事务没有提交的事务,而B事务又回滚了,A事务读取的就是脏数据

 
2). 不可重复读:A事务重复读取前面读取过的数据,发现该数据已经被另一个已提交的事务修改过了

 
3). 幻读:事务A重新执行一个查询,返回一系列符合查询条件的行,发现其中插入了被事务B提交的行

事务的隔离级别:READ UNCOMMIT、READ COMMIT、REPEATABLE、SERIALIZABLE

JDBC如何操作事务:

Connection提供事务处理的方法,通过调用setAutoCommit(false)可以设置手动提交事务;当事务完成后用commit()显示提交事务,如果在事务处理过程中发生异常则通过rollback()进行事务的回滚,还引入了savepoint让事务回滚到指定的保存点

9. 设计模式

-工厂模式:工厂类可以根据条件生成不同的子类实例,但这些子类有一个公共的抽象父类并且实现了相同的方法,但是这些方法针对不同的数据进行了不同的操作,可以不考虑到底返回了哪个子类直接调用父类

-代理模式:给一个对象提供一个代理对象,并由代理对象控制原对象的引用。

-适配器模式:当一个类想实现一个接口中的多个方法是=时,又不想实现所有的方法时,可以找一个中间的抽象类,实现其中需要的方法
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: