文中★部分,为面试常考题。
1、 ★数组和循环下标从0开始的原因
与数据的存储方式,偏移量有关。
第一个元素:首地址 + sizeof(数据类型) * 0 ;
第二个元素:首地址 + sizeof(数据类型) * 1 ;
第三个元素:首地址 + sizeof(数据类型) * 2 ;
从零开始,有便于计算机取首位。
2、★JAVA中是否有引用传递?
JAVA中无论什么类型的数据都只有值传递。传参时,是把实参的值传递给形参。
3、★区分基本数据类型和引用数据类型在做值传递时的差异。
由于两种数据的保存形式的不同。
基本数据类型传递的是值。
引用数据类型传递的是引用的值。
所以在方法里如果同时改变两个个数据的话
基本数据类型是不会改变的(因为在内存中它指向的数据的地址没改变,所以不会发生改变)改变的只是形参。
引用数据类型如果改变的话,他改变的是引用指向的堆中的数据。所以方法结束后也会改变
4、构造方法的执行步骤。
①划分空间 ②在该空间划分属性 ③对属性进行初始化 ④执行我们在构造方法里面书写的代码。
5、什么是标准JAVA类。
① 必须要有公共无参构造。
② 必须为属性提供符合命名规范的get/set方法。
③ 应该实现serializable接口。
6、★请问final/finally/finalize的区别。
Final:关键字。修饰变量成为常量,修饰方法不能被重写,修饰类不能继承
Finally:关键字。异常捕获时使用
Finalize:方法名。Object中的一个方法finalize();由gc调用
7、★抽象类和接口的区别
① 在语法上的不同:抽象类的声明部分需要用abstract关键字修饰,通常情况下,抽象类都会有抽象方法。接口的方法只能是公共抽象方法。两者都不能产生对象。
②设计目的的不同:抽象类,通常作为多个子类的父类,其中的方法是其与生俱来的行为。而接口,可以有多个不同的类来实现,是其中的方法附属添加的行为。
8、★throw 与 throws 的区别,以及说出几个常见的异常类名。
Throw与 Throws的区别详见总结2。
常见异常类名:
运行时异常RuntimeException:NullPointerException、ClassCastException
编译时异常:IOException、SQLException、IllegalClassFormatException
9、★String str= new String(“hello”);
该语句产生了几个对象?
共产生了三个对象:
① 加载期放入字符串常量池的字符串对象
② 运行时new出来放在堆区的字符串对象
③ 类加载时创建的字符串模板对象