1、装箱与拆箱
装箱:将值类型转变为引用类型。
拆箱:将引用类型转变为值类型。
2、== 与 equals 区别
== 是比较两个对象的地址是不是相等,即判断是不是同一个对象,(基本数据类型判断的是值,引用类型比较的是内存地址)
equals 在使用的时候有两种情况
类没有覆盖 equals() 方法,此时比较两个对象等价于 ==
类覆盖了 equals()方法,比较两个对象内容是否相等,即比较的是两个对象的值。
3、面向对象 与 面向过程的区别
面向对象:由于有封装、继承、多态的特性,所以易维护、易复用、易扩展,类实例化的时候需要占用资源,所以性能没有面向过程好
面向过程:性能好,但是不易扩展、维护、复用。多用于嵌入式开发
考虑性能时选择面向过程、考虑代码维护、复用、扩展时使用面向对象。
4、面向对象编程的三大特点
封装、继承、多态
5、重载和重写的区别
重载:方法名相同、参数的类型、个数、顺序、方法是否有返回值,返回值类型不一定相同
重写:方法返回值类型,方法名称、参数个数、顺序必须相同,而方法内部实现逻辑不同
6、构造器Constructor 是否可以被 orverride
不可以,可以被重载但不可以被重写,因为父类的私有属性和构造方法不能被继承,所以Constructo不能够被重写,但是一个类中可以有参数不同的构造方法,所以可以被重载。
7、字符型常量和字符串常量有什么区别
字符型常量是由单引号包括的单个字符,字符串常量是由双引号包括的若干个字符,字符型常量占两个字节,字符串常量占多个字节
8、接口和抽象类的区别
接口的方法修饰符默认是public,接口的方法不可以实现,而抽象类可以有非抽象的方法。
一个类可以实现多个接口,但只能实现一个抽象类,接口可以通过extends 进行扩展。
抽象类方法不能用private进行修饰,因为要重写。
抽象是对类的抽象,接口是对行为的规范。
在JDK8中,接口中也可以定义静态方法,并且使用接口名称直接进行调用。而实现类和方法中在不可以进行调用,如果同时实现两个接口,两个接口中定义了相同的方法,则必须进行重写,否则会报错。
9、为什么在静态方法中访问其它非静态成员是非法的。
静态方法和变量不可以由对象进行调用访问,因此在静态方法中不可以访问其它非静态成员。
10、String、StringBuffer、StringBuilder 的区别是什么
String类中使用final修饰字符数组保存字符串,所以String对象是不可变的,而StringBuilder和StringBuffer继承自父类AbstractStringBuilder类,AbstractStringBuilder类也是使用字符数组来保存字符串,
但是没有使用final进行修饰,所以StringBuffer类对象和StringBuilder对象是可变的。
String 对象不可变,所以线程安全
StringBuffer 对方法或者调用的方法加了同步锁,所以也是线程安全的。
StringBuilder 没有对方法加同步锁,所以是非线程安全的。
操作少量的数据 适用String,单线程操作大量字符串缓冲区 操作数据 适用 StringBuilder ,多线程字符串缓冲区操作大量数据适用StringBuffer。
11、在java类中定义一个无参数且不做事的构造函数的作用
java程序在执行子类的构造方法之前,如果没有用super来调用父类的特定的方法,则程序会调用父类中没有参数的构造方法,如果父类中只定义了有参数的构造方法,则在编译时会报错。所以解决办法是在父类中
定义一个无参数的构造方法。
12、什么是方法的返回值,返回值的作用是什么。
方法的返回值是指我们在执行某个方法后得到的结果。得到的结果可用于其它的操作。
13、构造方法有哪些特性
方法名称和类名相同
无返回值,但不用void关键字进行修饰
无需调用,在类对象创建时自动执行。
14、静态方法和实例方法有什么不同
静态方法只能访问静态成员变量和静态方法,可以以类名 + 方法名 形式直接进行调用,而实例则没有限制,访问方式是在类对象创建以后 以实例名 + 方法名进行访问。
15、对象的相等于指向它们的引用相等有什么不同
对象的相等是指两个对象的值相等,指向它们的引用相等是指两个对象在内存中的地址相等。
16、在调用子类的方法之前首先调用父类无参数的构造方法的作用是?
帮助子类做初始化操作。