1.对象与对象引用的区别是什么?请举例说明。
创建对象:new FighterPlane();//对象分配在堆heap上
声明一个对象引用:FighterPlane fp;//fp作为局部变量分配在栈stack上,fp也称为引用变量
初始化对象引用:fp = new FighterPlane();//fp指向实际对象
FighterPlne fp = new FighterPlane();//实质是将新创建的FighterPlane对象的首地址赋给对象引用fp,从此fp与该对象关联,通过fp即可操纵该对象。
老师的形象比喻:遥控器(对象引用)和电视机(对象)的关系。
2.对象作为参数传递的特点是什么?请举例说明。
对象(引用)作为参数传递,虽然本质上还是值传递,但不像简单类型变量作为参数传递,而是相当于c++中的指针,指向了对象的地址。
例如:
输出:
输出:
3.对象初始化顺序是怎样的?请举例说明。
(1)系统会对数据成员进行默认初始化;
(2)执行数据成员定义处的初始化语句;
(3)调用构造方法为数据成员指定初值。
例如:
输出:
4.类的static字段与非static字段的区别是什么?什么场景应该使用static修饰符?请举例说明。
用 static 修饰符修饰的数据成员是不属于任何一个类的具体对象,而是属于类的静态数据成员。
它被保存在类的内存区的公共存储单元中,而不是保存在某个对象的内存区中。因此,一个类的任何对象访问它时,存取到的都是相同的数值。
访问方式为通过类名加点操作符来访问,也可通过对象引用来访问。
《 Java 开发手册》强制使用类名(而不是该类的对象引用)访问静态方法和静态变量。
static 修饰的方法有如下特点:
(1) static 方法是类方法,但可以被所有对象所访问,引用这个方法时,可以使用对象名做前缀,也可以使用类名做前缀。
《 Java 开发手册》强制使用类名(而不是该类的对象引用)访问静态方法和静态变量。
(2) static 方法内部的代码,只能访问类中的 static 属性或方法,不能直接访问类中的非 static 属性或方法(因为那是对象方法),但非 static 方法(对象方法)可以访问 static 数据成员。
(3)main 方法是特殊的静态方法,是 Application 程序入口点,必须写成 public static void main ( String []args )的形式。
当类共享数据成员时,可以使用static。
5.Java中final修饰符都有什么作用?请举例说明。
(1)final修饰属性,则属性为常量;
例:final int n = 20;
n = 30;//编译错误
(2)final修饰方法,则该方法在子类当中不能被覆盖,可防止任何继承类修改此方法,保证了程序的安全性和正确性;
例:
class Parent{
public final void method1(){}//这个方法不能被子类覆盖
}
class Child extends Parent{
public final void method1(){...}//编译错误
}
(3)final修饰类,则该类不能被继承。
例:
class Parent{
}
final class Person extends Parent{
}//可以继承Parent类
class Child extends Person{
}//编译报错,不能继承Person类
6.Java中float[10]arr;语句正确吗?为什么?
不正确。一维数组声明时不可在方括号内指定数组大小。应为:int [] arr; String [] example; myClass [] mc;此时只是声明,并未创建对象,无法分配内存。
7.Java数组元素类型为基本类型和引用类型时,有什么不同?请举例说明。
数组元素为基本类型:
例:int [] arr = new int[10];//在堆上为数组对象分配10个整型元素空间,每个元素初始化为默认值0
数组元素为引用类型:
例:String [] example = new String [10];//对象引用数组
产生一个具有10个单元的数组对象,每个单元存放的是1个String对象的引用,所有单元的初值为默认值null,此时并未创建具体的String对象。