1.对象与对象引用的区别是什么?请举例说明。
FighterPlane fp=new FighterPlane();
在这里,new FighterPlane()创建了一个对象,fp被称为该对象的引用。
相当于遥控器(对象引用)和电视机(对象)的关系。
2.对象作为参数传递的特点是什么?请举例说明。
传递方法与传递其他类型的数据一样,可采用值传递和地址传递两种方法。
值传递:是把对象的拷贝而不是本身传递给函数,函数中对参数对象的任何修改都不会影响调用该函数的对象本身;
地址传递:调用该函数的对象与参数对象共用同一个地址,所以,函数对参数对象的任何修改都会影响调用该函数的对象本身。
3.对象初始化顺序是怎样的?请举例说明。
①系统会对数据成员进行默认初始化
②执行数据成员定义处的初始化语句
③调用构造函数为数据成员指定初值
package hello;
class IntClass{
int value;//自动初始化,默认值为0
//int value=5; //在定义时指定初值
public IntClass() {}
//定义构造方法将属性value初始化
public IntClass(int val) {
value=val;
}
}
public class IntClassConstructor {
public static IntClass getInstance() {
//调用构造方法从而省略了s.value代码
IntClass s=new IntClass(8);
//s.value=8;
return s;
}
public static void main(String[] args) {
IntClass a=new IntClass();
System.out.println(a.value);
a=getInstance();
System.out.println(a.value);
}
}
4.类的static字段与非static字段的区别是什么?什么场景应该使用static修饰符?请举例说明。
1) static与非static字段的区别如下:
static修饰的属性和方法称为静态属性、静态方法,属于类,而不属于对象。
内存方面:静态属性被保存在类的公共存储单元中。
调用静态属性:可以通过类名或对象引用调用static修饰的属性(类.属性或对象.属性,即通过类名或对象引用加点的方式调用静态属性),因为静态属性存储在公共单元中,所以不同对象调用到的静态属性的值与类名调用得到的值都是一样的,由于静态属性属于类,为了避免混淆和符合逻辑,最好不要使用对象.属性这种方法调用静态属性。
调用静态方法:可以通过类名或对象引用调用static修饰的方法(类.方法或对象.方法,即通过类名或对象引用加点的方式调用静态方法),同样,为了避免混淆和符合逻辑,最好不要使用对象.方法这种方法调用静态方法。
静态方法的特点:静态方法内部的代码仅能访问类中的静态属性和静态方法,不能访问非静态属性和方法,这是因为没有static修饰的属性和方法属于对象,对象的优先级比类高,所以对象方法可以访问静态属性,而静态方法不能访问对象属性。
2)在需要一些逻辑上不属于对象的属性或方法时应使用static修饰符,这个属性或方法应该是在对象之上的。
例如:若需要统计某一个类有几个对象,那就需要一个静态属性来记录该类的对象数目;
Integer类的valueOf方法即属于静态方法,此外Integer类还有许多静态属性,如MAX_VALUE、MIN_VALUE、SIZE、BYTES等,这些属性均与具体的对象无关。
5.Java中final修饰符都有什么作用?请举例说明。
当用final修饰一个类时,表明这个类不能被继承。也就是说,如果一个类永远不会让它被继承,就可以用final进行修饰。final类中的成员变量可以根据需要设为final,但是要注意final类中的所有成员方法都会被隐式地指定为final方法。
public class Test {
public static void main(String [] args) {
final int COUNT = 10; // COUNT为常量
COUNT = 100; // 此句会报错
System.out.println(COUNT);
}
}
class Int{
int value=10;
void changeValue(int v){
this.value = v;
}
}
class SubInt extends Int{
void changeValue(int v){
System.out.println("Changing value......");
this.value = v;
}
}
public class Test {
public static void main(String [] args) {
SubInt submi = new SubInt();
submi.changeValue(200);
System.out.println(submi.value);
}
}
结果为:
Changing value......
200
6.Java中float[10] arr;语句正确吗?为什么?
不对。[ ]里不能有数字。
7.Java数组元素类型为基本类型和引用类型时有什么不同?请举例说明。
对于基本类型数组而言,数组元素的值直接存储在对应的数组元素中,因此,初始化数组时,先为该数组分配内存空间,然后直接将数组元素的值存入对应数组元素中。
例如:int [ ] a={1,2,3,4,5};
引用类型数组的数组元素是引用,因此情况变得更加复杂:每个数组元素里存储的还是引用,它指向另一块内存,这块内存里存储了有效数据.
例如:MyClass [ ] mc=new MyClass[10];