1、问:面向对象编程的特性
答:面向对象编程的四大特性分别是:抽象、继承、封装、多态。
抽象:对现实世界中的事物进行概括,抽象为在计算机虚拟世界中有意义的实体。
继承:子类继承父类,不仅可以有父类原有的方法和属性,也可以增加自己的或者重写父类的方法和属性。
封装:将某事物的属性和行为包装到对象中,构成一个不可分割的独立实体,数据被保护在抽象数据类型的内部,并且尽可能的隐藏内部的细节,只保留一些对外接口使之与外部发生联系。
多态:允许不同类的对象对同一消息做出各自的响应。
多态存在的条件:
1.要有继承
2.要有复写
3.父类引用指向子类对象
多态的实现方式:
接口实现,继承父类进行方法重写,同一个类中的方法重载
2、问:String、StringBuffer和StringBuilder的区别
答:String是字符串常量,StringBuffer和StringBuilder是字符串变量,即String对象一创建后不可更改,而后两者的对象是可更改的。StringBuffer是线程安全的,而StringBuilder非线程安全,这是由于StringBuffer加了同步锁。String适用于少量的字符串操作的情况,StringBuffer适用于多线程下在字符缓存区进行大量操作的情况,StringBuilder适用于单线程下字符缓存区进行大量操作的情况。
3、问:String a = " " 和 String a = new String(" ")的区别
答:通过String a = " “直接赋值的方式得到的是一个字符串常量,存储于常量池,需要注意的是相同内容的字符串在常量池中只有一个;通过new String(” ")方式创建的字符串不是常量而是实例对象,会在堆内存中开辟空间存放数据,且每个实例对象都有自己的地址空间。
4、问:equals和==的区别
答:"=="对于基本数据类型来说比较的是两个变量值是否相等,对于引用类型来说,比较的是两个对象的内存地址是否相等;equals的情况比较复杂,它是Object的公有方法,因为java中所有类都默认继承于Object,所以所有的类都有这个方法,equals具体含义取决于如何重写,比如String的equals比较的是两个字符串内容是否相等。
5、问:equals和hashcode的关系
答:默认情况下,equals相等hashcode必相等,而hashcode相等equals不一定相等,hashcode是基于内存地址计算得出。
6、问:装箱和拆箱的含义
答:装箱就是自动将基本数据类型转换为包装器类型,拆箱就是自动将包装器类型转换为基本数据类型。
7、问:int和Integer的区别
答:Integer是int的包装类,int是java的基本数据类型;Integer变量必须实例化后才能使用,而int变量不需要;Integer实际是对象的引用,当new一个Integer时,实际是生成一个指针指向此对象,而int是直接存储数据值;Integer默认值是null,int默认值是0。
8、问:java异常机制
答:
Throwable的继承层次结构:
(1)Error:指程序无法恢复的异常情况,表示运行应用程序中较严重的问题。多发生于虚拟机自身、或者在虚拟机试图执行应用时,如VirtulMachineError(java虚拟机运行错误),属于不可查异常,即不强制程序员必须处理,即使不处理也不会出现语法错误。
(2)Exception:指程序有可能恢复的异常情况,表示程序本身可以处理的异常。其又分为两大类:
异常的处理机制:
(1)捕捉异常:由系统自动抛出异常。
try {
// 可能会发生异常的程序代码
} catch (异常类1 异常变量) {
// 捕获并处理try抛出的异常类型Type1
} catch (异常类2 异常变量) {
// 捕获并处理try抛出的异常类型Type2
} finally {
// 无论是否发生异常,都将执行的语句块
}
(2)抛出异常:在方法中将异常对象显性地抛出,之后异常会沿着调用层次向上抛出,交由调用它的方法来处理。配合throws声明抛出的异常和throw抛出异常。
(3)自定义异常:继承Exception或其子类。
9、问:什么是内部类?静态内部类和非静态内部类的区别
答:内部类就是定义在另外一个类里面的类,它隐藏在外部类中,封装性更强,不允许除外部类以外的类访问它,但它可以直接访问外部类的成员,其中静态内部类和非静态内部类的区别:
10、问:为什么匿名内部类中使用局部变量要用final修饰
答:一方面,由于方法中的局部变量生命周期很短,一旦方法结束变量就会被销毁,为了保证在内部类中找到外部局部变量,通过final关键字可以得到一个外部变量的引用;另一方面,通过final关键字也不会在内部类中修改该变量的值,保护了数据的一致性。
11、问:final、finally和finalize()的区别
答:
(1)final:关键字表示不可修改,具体表现在:
(2)finally:和try、catch一起使用进行异常处理。无论是否捕获或处理异常,finally都会被执行,只有以下四种特殊情况,finally才不会执行:
(3)finalize():是Object的方法,当垃圾回收器将回收的对象从内存中清除出去之前会调用finalize()方法,但此时并不代表该回收对象一定会被清除,还有机会"逃脱"。
12、问:重载和重写
答:重写代表子类重写父类的方法;重载表示有多个同名函数同时存在,区别在于不同的参数个数和参数类型。
13、问:抽象类和接口的区别
答:在使用上,一个类只能继承一个抽象类却可以实现多个接口;在设计上,接口是对行为的抽象,无需有子类的前提,是自上而下的设计理念,抽象类是对类的抽象,是建立在相似子类之上,是自下而上的设计理念。