Java面试题总结

1.Java基础

1.1 final,finally,finalize 三者区别

Final是一个修饰符:
当final修饰一个变量的时候,变量变成一个常量,它不能被二次赋值
当final修饰的变量为静态变量(即由static修饰)时,必须在声明这个变  量的时候给它赋值
当final修饰方法时,该方法不能被重写 
当final修饰类时,该类不能被继承
Final不能修饰抽象类,因为抽象类中会有需要子类实现的抽   象方法,(抽  象类中可以有抽象方法,也可以有普通方法,当一个抽象类中没有抽象方    法时,这个抽象类也就没有了它存在的必要)
Final不能修饰接口,因为接口中有需要其实现类来实现的方法
​
Finally:
Finally只能与try/catch语句结合使用,finally语句块中的语句一定会执行,  并且会在return,continue,break关键字之前执行
​
finalize:
Finalize是一个方法,属于java.lang.Object类,finalize()方法是GC   (garbage    collector垃圾回收)运行机制的一部分,finalize()方法是在   GC清理它所从 属的对象时被调用的
​

1.2 "=="和equals方法究竟有什么区别

区别主要存在在引用数据类型上
==为比较两侧的对象是否同一对象,是用内存地址来比较的
​
equals是对象的方法,默认是用内存地址比较,重写后,主要是用来比较两侧的对象的值是否相同,和equals方法中的实现有关
==是运算符,可以两侧都为null,但equals左侧的引用指向的对象不能空,不然有NullPointerException
​
除非需要比较两个引用指向的对象是同一对象,一般都使用equals方法进行比较。尤其是String之类的值对象,另外,常量尽量放在比较的左侧
​

1.3 静态变量和实例变量的区别

在语法定义上的区别:静态变量前要加static关键字,而实例变量前则不加。
在程序运行时的区别:实例变量属于某个对象的属性,必须创建了实例对象,其中的实例变量才会被分配空间,才能使用这个实例变量。静态变量不属于某个实例对象,而是属于类,所以也称为类变量,只要程序加载了类的字节码,不用创建任何实例对象,静态变量就会被分配空间,静态变量就可以被使用了。
总之,实例变量必须创建对象后才可以通过这个对象来使用,静态变量则可以直接使用类名来引用。

1.4 Integer与int的区别

int是java提供的8种原始数据类型之一,占用4个字节,直接存值;
Integer是引用数据类型,是int的封装类。
1. 默认值:int的默认值为0,Integer的默认值为null。例如考试成绩为0,表示参加了考试,但成绩为0分,但null意味未参加考试。
2. JSP开发中,Integer的默认值为null, 在EL表达式时,文本框显示的值为空白;如果使用int默认值为0,文本框显示的值是0。int不适合在展示层使用。
3. 在Hibernate中,如果将自增ID字段设置成Integer类型,如果值为null,则表示临时对象,保存时,会自动升成ID值。而使用int类型,则需要在hbm映射文件中,设置unsaved-value属性的值为0。
4. Integer提供了许多跟整数运算相关的操作方法,例如与字符串的转换,还定了一些整数的最大值和最小值的转换。
​

1.5 Overload和Override的区别

Overload是重载的意思,Override是覆盖的意思,也就是重写。Overload和Override有共同之处,两个方法的方法名都必须相同。
1.  Override必须发生在父子类之间,Overload可以不在父子类之间
2.  Override的特点:
a)  参数列表完全相同:个数相同、类型相同、顺序相同
b)  子类的返回值不能比父类的返回值范围大
c)  子类方法抛出的异常不能比父类方法抛出的异常范围大
d)  修饰符只能为public、protected、friendly,不能为private
e)  父子类方法不能使用static修饰
3.  重载发生在同一个类或父子类之间,重载中参数列表至少满足个数不同、类型不同、顺序不同中的一个条件,不包含父子类之间的static方法
​

1.6 abstract class和interface有什么区别

使用abstract修饰符的class为抽象类,abstract类不能创建的实例对象。
接口(interface)是一种特殊的类,使用interface关键字进行修饰。
下面比较一下两者的语法区别:
1. 抽象类可以有构造方法,接口中不能有构造方法;
2. 抽象类中可以有普通成员属性,接口中没有普通成员属性;
3. 抽象类中可以包含非抽象的普通方法,接口中的所有方法必须都是抽象的,不能有非抽象的普通方法;
4. 抽象类中的抽象方法的访问类型可以是public,protected和默认类型,但接口中的抽象方法只能是public类型的
5. 抽象类中可以包含静态方法,接口中不能包含静态方法;
6. 抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问类型可以任意,但接口中定义的变量只能是public static final类型,并且默认即为public static final类型;
7. 一个类可以实现多个接口,但只能继承一个抽象类;
8. 在应用上也有区别,接口更多的是在系统架构设计方法发挥作用,主要用于定义模块之间的通信契约;而抽象类在代码实现方面发挥作用,可以实现代码的重用。

1.7 StringBuffer和StringBuilder的区别

相同之处,这两类都是可变长的字符串存储类,都实现了CharSequence接口
1. 类型不同,因为不是一个类,也没有继承关系,做参数时不能共用
2. StringBuffer为线程安全类,StringBuilder为线程非安全类
3. StringBuffer性能低,StringBuilder性能高,如果在局部优先使用StringBuilder
4. JDK在1.5之前,字符串相加使用StringBuffer对象,在1.5之后使用StringBuilder对象
​

1.8 error和exception有什么区别

error 表示恢复不是不可能但很困难的情况下的一种严重问题。比如说内存溢出,不可能指望程序能处理这样的情况。exception表示一种设计或实现问题,也就是说,它表示如果程序运行正常,正常情况下从不会发生的情况。

1.9 多线程中的sleep()和 wait()有什么区别

1. sleep是在Thread类定义的,wait是在Object类定义的
2. sleep有两个重载方法,wait有三个重载方法
3. sleep能自动唤醒,wait有参数的方法能自动唤醒,但无参数的重载方法不能自动唤醒,需要使用notify/notifyAll进行手动唤醒
4. sleep挂起时,不释放锁资源,wait挂起时,会释放锁资源
5. sleep调用时,不需要放在synchronized内,wait需要放在synchronized内
6. sleep一般不会产生死锁,但是wait可能会产生死锁
​

1.10 同步和异步有何异同

同步是
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

凵忆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值