java 类及对象的课后作业_Java类与对象课后作业

一.动手动脑

(1)以下代码为何无法通过编译?哪儿出错了?

a6089e49cecd0e82b64ad85656e40167.png

·结论:因为如果类已经提供了自定义的构造方法,那么系统不再提供默认构造方法。“Foo obj1 = new Foo();”这里错了!

(2)请运行TestStaticInitializeBlock.java示例,观察输出结果,总结出“静态初始化块的执行顺序”。

·结论(静态初始化块的执行顺序):静态初始化块只执行一次。创建子类型的对象时,也会导致父类型的静态初始化块的执行。

二.验证

1.(进行实验)如果一个类中既有初始化块,又有构造方法,同时还设定了字段的初始值,谁说了算?

·谁比较靠后就是谁初始化起作用。

·类字段的初始化顺序:执行类成员定义时指定的默认值或类的初始化块,到底执行哪一个要看哪一个“排在前面”。执行类的构造函数。类的初始化块不接收任何的参数,而且只要一创建类的对象,它们就会被执行。因此,适合于封装那些“对象创建时必须执行的代码”。

2. 请输入并运行以下代码,得到什么结果?

72718255a3d09fe08e9ebf8ac7b76e7d.png

·运行结果为: false

结论:

·当“==”施加于原始数据类型变量时,是比较变量所保存的数据是否相等

·当“==”施加于引用类型变量时,是比较这两个变量是否引用同一对象。

·引用代表地址,所以“==”实际上相当于比较两个引用类型变量中保存的对象地址是否相同。

·两个对象的“内容”,其实是指它们在某一时刻的所有字段的值,“内容相等”,其实是就“对应字段值”一致。在Java中要比对两个对象的字段值,可以 “重写(override)”基类的equals()方法。

三.一个有趣的问题

1.静态方法中只允许访问静态数据,那么,如何在静态方法中访问类的实例成员(即没有附加static关键字的字段或方法)?

·源代码

public class Test{

public static void main(String[] args) {

System.out.println("(静态变量)total_employees =  "+Employee.total_employees);

//实例

Employee e = new Employee();

System.out.print("(实例变量)name =  "+e.name);

}

}

class Employee

{

String name = "wangafn";

long salary;

static int total_employees;

static void clear()

{

total_employees=0;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值