Java面向对象程序设计 第四章总结



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.课后作业

示例代码
利用命令行编译和运行
打包效果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值