1.java基本数据类型及大小
基本数据类型 | 大小(字节) |
boolean | 1(位) |
byte | 1 |
char | 2 |
short | 2 |
int | 4 |
float | 4 |
double | 8 |
long | 8 |
2.java面向对象的基本特征
特征 | 作用 |
继承 | 1.减少冗余 2.清晰层次关系 |
封装 | 1.隐藏实现细节 2.安全性 3.复用性 4.模块化 |
多态 | 1.易扩展 |
3.四种访问修饰符及作用范围
修饰符 | 作用范围 |
private | 本类 |
缺省 | 包类 |
protected | 子类,包类 |
public | 全部 |
4.拆箱和封箱
拆箱 | 封装类型转为基本数据类型 |
封箱 | 基本数据类型转为封装类型 |
5.String,StringBuffer,StringBuilder 区别
类型 | 特征 | 初始容量 |
String | 不可变字符串,每次使用都会产生新的对象 | 无 |
StringBuffer | 可变字符串,线程安全,效率低 | 16字节 |
StringBuilder | 可变字符串,线程不安全,效率高 | 16字节 |
6.== 和 equals 区别
类型 | 作用 |
== | 比较的是两个值是否相等 |
equals | 比较的是对象存放在堆中的地址是否一样 |
7.equals 和 hashcode区别
类型 | 说明 |
equals | equals()相等的两个对象hashcode一定相等 |
hashcode | 两个不同的对象可能产生相同的hashcode值 |
是否可以直接根据hashcode值判断两个对象是否相等?答: 不可以的,因为不同的对象可能会生成相同的hashcode值。虽然不能根据hashcode值判断两个对象是否相等,但是可以直接根据hashcode 值判断两个对象不等,如果两个对象的hashcode值不等,则必定是两个不同的对象。如果要判断两个对象是否真正相等,必须通过equals方法。 |
8.重载和重写区别
类型 | 区别 | 规则 |
重载 | 子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变 | 1.被重载的方法必须改变参数列表(参数个数或类型或顺序不一样); 2.被重载的方法可以改变返回类型; 3.被重载的方法可以改变访问修饰符; 4.被重载的方法可以声明新的或更广的检查异常; 5.无法以返回值类型作为重载函数的区分标准 |
重写 | 是在一个类里面,方法名字相同,而参数不同。返回类型可以相同也可以不同。 | 1.参数类型,返回类型与被重写的方法一致 2.访问修饰符不能比被重写的方法低 3.Final,static 修饰的方法不能被重写 4.被重写的方法抛出的异常不能不能大于重写方法的异常 5.构造方法不能被重写 |
方法的重写和重是java多态性的不同表现,重写是父类与子类之间多态性的一种表现,重载是一类中多态性的一种表现。 |
9.抽象类和接口的区别
类型 | 说明 |
抽象类 | 1.可以有默认方法 2.使用extends继承抽象类 3.可以有构造方法 4.可以使用其他修饰符 5.一个类可以继承一个抽象类 |
接口 | 1.全部是抽象方法 2.使用interface实现接口 3.不能有构造方法 4.都是public修饰符 5.一个类可以实现多个接口 |
10.java关键字及其意义
关键字 | 意义 |
static | 1.可以修饰类,方法,和变量. 2.static修饰的属性和方法只属于该类,不属于任何对象。 3.static不能修饰外部类,不能修饰局部变量 |
final | 1.可以修饰类,方法和变量 2.Final修饰的变量不能被修改 3.Final修饰的类不能被继承如String |
transient | 只能修饰字段,表示该关键字修饰的字段不参与序列化 |
volatile | 只能用来修饰变量。volatile修饰的成员变量在每次被线程访问时,都强迫从共享内存中重读该成员变量的值。而且,当成员变量发生变化时,强迫线程将变化值回写到共享内存 |
Synchronized | 1.确保线程互斥的访问同步代码 2.保证共享变量的修改能够及时可见 3.有效解决重排序问题。 |
11.error 和 exception 区别
名称 | 说明 |
error | 预先不可知,不能捕获 |
exception | 预先可知,能捕获异常,并进行处理(try catch finally) |
12.throws 和 throw区别
名称 | 说明 |
throws | 在方法外部抛出异常,抛出可能出现的异常 |
throw | 在方法内部抛出异常,抛出的异常是确定异常 |
13.finalize,finally,final三个关键字的区别
名称 | 说明 |
finalize | finalize()方法是Object类中定义的方法,当垃圾回收器将无用对象从内存中清除时,该对象的finalize()方法被调用 |
finally | 用在异常处理中定义总是执行代码,无论try块中的代码是否引发异常,catch是否匹配成功,finally块中的代码总是被执行 |
final | 以作为修饰符修饰变量、方法和类,被final修饰的变量只能一次赋值;被final修饰的方法不能够在子类中被重写;被final修饰的类不能够被继承。 |
14.ArryaList,LinkedList,Vector区别
名称 | 说明 |
ArrayList | 1.底层基于数组,初始大小为10 2.查询快,增加删除慢.原因(ArrayList基于数组,此数组元素数大于实际存储的数据以便增加插入元素,都允许直接序号索引元素,但是插入数据要涉及到数组元素移动等内存操作,所以插入数据慢,查找有下标,所以查询数据快) 3.占用内存比LinkedList少 4.线程不安全 |
LinkedList | 1.底层基于链表 2.增加删除快,查询慢。原因(LinkedList使用双向链表实现存储,按序号索引数据需要进行向前或向后遍历,但是插入数据时只需要记录本项前后项即可,插入数据较快) 3.占用内存比ArrayList大,因为存储了前一个值和后一个值的引用 4.线程不安全 |
Vector | 与ArrayList类似,但是Vector是线程安全的 |
共同点:都实现了List接口 |
15.HashMap 和 HashTable区别
名称 | 区别 |
HashMap | 线程不安全,允许空的键值 |
HashTable | 线程安全,不允许空键值 |
16.HashMap 和 TreeMap区别
名称 | 区别 |
HashMap | 线程不安全,允许空的键值 |
TreeMap | 线程安全,不允许空键值 |
17.IO流类型
类型 | 具体类型 | 说明 |
字节流 | InputStream OutputStream | 1.字节流操作的基本单元为字节 2.字节流默认不使用缓冲区 3.字节流通常用于处理二进制数据,实际上它可以处理任意类型的数据,但它不支持直接写入或读取Unicode码元
|
字符流 | Reader Write | 1.字符流操作的基本单元为Unicode码元 2.字符流使用缓冲区 3.字符流通常处理文本数据,它支持写入及读取Unicode码元
|
18.sleep(),wait() ,yield(),join(),notify(),notifyAll()方法区别
类型 | 说明 |
sleep | sleep()方法需要指定等待的时间,它可以让当前正在执行的线程在指定的时间内暂停执行,进入阻塞状态,该方法既可以让其他同优先级或者高优先级的线程得到执行的机会,也可以让低优先级的线程得到执行机会。但是sleep()方法不会释放“锁标志”,也就是说如果有synchronized同步块,其他线程仍然不能访问共享数据。 |
wait | wait()方法会释放对象的“锁标志”。当调用某一对象的wait()方法后,会使当前线程暂停执行,并将当前线程放入对象等待池中,直到调用了notify()方法后,将从对象等待池中移出任意一个线程并放入锁标志等待池中,只有锁标志等待池中的线程可以获取锁标志,它们随时准备争夺锁的拥有权 |
yield | yield()方法和sleep()方法类似,也不会释放“锁标志”,区别在于,它没有参数,即yield()方法只是使当前线程重新回到可执行状态,所以执行yield()的线程有可能在进入到可执行状态后马上又被执行,另外yield()方法只能使同优先级或者高优先级的线程得到执行机会,这也和sleep()方法不同 |
join | join()方法会使当前线程等待调用join()方法的线程结束后才能继续执行 |
notify | notify方法只唤醒一个等待线程并使该线程开始执行。所以如果有多个线程等待一个对象,这个方法只会唤醒其中一个线程,选择哪个线程取决于操作系统对多线程管理的实现 |
notifyAll | 会唤醒所有等待(对象的)线程 |
19.Thread的生命周期状态
状态 | 说明 |
新建状态 | 当线程对象对创建后,即进入了新建状态,如:Thread t = new MyThread(); |
就绪状态 | 当调用线程对象的start()方法(t.start();),线程即进入就绪状态。处于就绪状态的线程,只是说明此线程已经做好了准备,随时等待CPU调度执行,并不是说执行了t.start()此线程立即就会执行; |
运行状态 | 当CPU开始调度处于就绪状态的线程时,此时线程才得以真正执行,即进入到运行状态。 |
阻塞状态 | 处于运行状态中的线程由于某种原因,暂时放弃对CPU的使用权,停止执行,此时进入阻塞状态,直到其进入到就绪状态,才 有机会再次被CPU调用以进入到运行状态 |
死亡状态 | 线程执行完了或者因异常退出了run()方法,该线程结束生命周期。 |
20.异常分类
异常类型 | 具体异常 |
运行时异常 | NullPointException NumberFormatException |
检查异常 | IOException FileNotFoundException |