1.Java中final修饰符都有什么作用?请举例说明
>>final修饰属性,则属性为常量;
final int NUM = 20;
NUM = 30; // 编译错误
>>修饰方法,则该方法在子类当中不能被覆盖,可防止任何继承类修改此方法,保证了程序的安全性和正确性。
class Parent {
public final void method1(){}//这个方法不能被子类覆盖
}
class Child extends Parent {
public final void method1(){…}//编译错误
}
>>修饰类,则该类不能被继承
class Parent {
}
final class Person extends Parent{
} //可以继承Parent类
class Child extends Person{
} //编译报错,不能继承Person类
2.Java中float[10] arr; 语句正确么?为什么?
不正确
关于一维数组:
正确声明: int [ ] arr;
String [ ] example;
myClass [ ] mc ;
注意:此时仅声明了引用变量,并未产生数组对象
正确初始化:1.int[] a= new int[10];
2. int[] a = {3,4,5,6};
3. float[] f4= new float[] { 1.0f, 2.0f, 3.0f};
或 float[] f4;
f4= new float[] { 1.0f, 2.0f, 3.0f};
常见错误:int[] a ; a= {3,4,5,6};
int[10] a;
3.Java数组元素类型为基本类型和引用类型时,有什么不同?请举例说明
对于基本类型数组而言,数组元素的值直接存储在对应的数组元素中,因此,初始化数组时,先为该数组分配内存空间,然后直接将数组元素的值存入对应数组元素中。
例如:
1.int[] a = {3,4,5,6};
2.int[] arr = new int[10]; //在堆上为数组对象分配10个整型元素空间,每个元素初始化为默认值0
引用类型数组的数组元素是引用,因此情况变得更加复杂:每个数组元素里存储的还是引用,它指向另一块内存,这块内存里存储了有效数据。
例如:
String[] example = new String[10]; //对象引用数组 。 产生一个具有10个单元的数组对象,每个单元存放的是1个String对象的引用,所有单元的初值为默认值null,此时并未创建具体的String对象。
for(String x: example)
System.out.println(x); // 输出结果为10个null
System.out.println(xample[0]. length()); // 抛出 NullPointerException异常
修改:example[0] = new String(“ab”); //创建String对象,赋值给example[0], 此时example的第一个元素指向String对象,从而可以操纵String对象