问题目录
1. 对象与对象引用的区别是什么?请举例说明
- 对象是类的实例化,对象的内存分配在堆上,有自己的域变量。
- 对象引用是一个声名,其内存分配在栈上,没有初始化的对象引用没有自己的域变量,初始化后可通过对象引用操作对象。
new Plane() //新建对象
Plane p; //对象引用的声名
p = new Plane(); //新建对象 并初始化对象引用
2. 对象作为参数传递的特点是什么?请举例说明
- 对象作为参数时发生的是引用传递,即传递的是对象的地址
class MyInt{
int val;
}
public class Run{
public static void modify(MyInt i, int val){
i.val = val;
}
public static void main(String[] args){
MyInt m = new MyInt();
modify(m,8);
System.out.println(m.val);
}
}
- 最后输出结果为
8
,而不是0
,这是由于对象作为参数引用传递后,在modify方法中改变了域变量val的值。
3. 对象初始化顺序是怎么样的?请举例说明
- 对数据成员进行默认初始化
- 执行数据成员的初始化语句
- 调用构造方法指定变量初值
public class MyInt{
val = 8;
public MyInt(){}
public MyInt(int v){
val = v;
}
}
public class Run{
public static MyInt get(){
MyInt a = new MyInt(6);
return a;
}
public static void main(String[] args){
MyInt s = new MyInt(); //默认初始化 调用无参的构造方法
System.out.println(s.value); //输出8
s = get(); //默认初始化 调用有参的构造方法
System.out.println(s.value); //输出6
}
}
4. 类的static字段与非static字段的区别是什么?什么情况应该使用static修饰符?请举例说明
- 类static修饰字段是属于整个类的,存储在类的公共存储单元
- 类的非static字段是属于对象的,存储在堆栈上
- 属于全体对象的共有属性,可使用static字段修饰类字段
static 方法只能访问static属性,而非staitc方法可以访问static属性
class Student{
static int count = 0; //用于计数的属于整个类的静态属性
String name = "XXX";
public Student(){
count++; //非静态方法修改静态属性
}
public Student(String name){
this.name = name; //非静态方法修改静态属性
count++;
}
public static int getCount(){ //静态方法访问静态属性
System.out.println("We have "+count+" students.");
return count;
}
}
5. Java中final修饰符都有什么作用?请举例说明
- final 修饰变量时,代表该变量是常量,其值在初始化后不可改变;
- final 修饰方法时,代表该方法是最终方法,不能在后续继承中覆盖或重载;
- final 修饰类时,代表该类是最终类,不能再被继承。
6. Java中float[10] arr;语句正确吗?为什么?
不正确
Java中 标识符float[]
告诉编译器arr
是一个float
数组的声名,一旦加上数组大小编译器就无法识别出内容。应该使用:
float[] arr = new float[10];
或者
float[] arr;
arr = new float[10];
7. Java数组元素类型为基本数据类型和引用数据类型时,有什么不同?请举例说明
- 数组元素为基本数据类型,其默认值为0或0.0,初始化赋值直接覆盖即可
- 数组元素为引用数据类型,默认值为null,并且需要逐个初始化,与对象绑定
class MyInt(){
int val;
MyInt(int v) { val = v; }
}
public class Run{
public static void main(String[] args){
int[] a = new int[5];
for(int i=0;i<a.length();i++)
System.out.print(a[i]+" ")
System.out.println();
for(int i=0;i<a.length();i++)
a[i] = i +3;
for(int i=0;i<a.length();i++)
System.out.print(a[i]+" ")
System.out.println();
MyInt[] b = new MyInt[5];
for(int i=0;i<b.length();i++)
System.out.print(b[i]+" ")
System.out.println();
for(int i=0;i<b.length();i++)
b[i] = new MyInt(i + 5);
for(int i=0;i<b.length();i++)
System.out.print(b[i].val+" ")
System.out.println();
}
}
8.课后作业