第七周

课中

理论课:

  1. Java尽力保证:所有变量在使用前都能得到恰当的初始化。对于方法的局部变量,Java以编译时错误的形式来贯彻这种保证。
  2. 指定初始化:在定义类成员变量的地方为其赋值。
char ch = 'x';
byte b = 47;
int i = 999;
  1. 在运行时刻,可以调用方法或执行某些动作来确定初值,但自动初始化运行始终在构造器被调用之前。
public class Counter{
	int i;
	Counter(){i = 7;}//i首先被置0,然后变成7
}
  1. 在类的内部,变量定义的先后顺序决定了初始化的顺序。即使变量定义散布于方法定义之间,它们仍会在任何方法(包括构造器)被调用之前得到初始化。

  2. 如果类里面写了一个构造器,则默认构造器不再存在,需要写。

  3. 静态数据都只占用一份存储区域。static关键字不能应用于局部变量,因此它只能作用于域。

  4. 假设有个名为Dog的类:
    ① 即使没有显示地使用static关键字,构造器实际上也是静态方法。因此,当首次创建类型为Dog的对象时(构造器可以看成静态方法),或者Dog类的静态方法/静态域首次被访问时,Java解释器必须查找类路径,以定位Dog.class文件。
    ② 然后载入Dog.class,有关静态初始化的所有动作都会执行。因此,静态初始化只在Class对象首次加载的时候进行一次。
    ③ 当用new Dog()创建对象时候,首先在将堆上为Dog对象分配足够的存储空间。
    ④ 这块存储空间会被清零,这就将自动地将Dog对象中的所有基本类型数据都设置为默认值,而引用则被设置成了null。
    ⑤ 执行所有出现于字段定义处的初始化动作。
    ⑥ 执行构造器。

  5. 非静态实例初始化:和静态初始化子句一样,只不过少了static关键字。在构造器之前执行。

  6. 数组只是相同类型的、用一个标识符名称封装到一起的一个对象序列或基本类型数据序列。

  7. Arrays类是数组的工具类,utill类包里。

实验课:

public class testPlay {
	public static void main(String[] args) {
	piano a = new piano();
    violin b = new violin();
    a.play();
    b.play();
	}

第一题主要考验的是继承,然后实现继承。

编写一个测试程序,打印出中国人、美国人、北京人的平均的身高和体重,并输出他们的不同行为。
public static void main(String[] args) {
	ChinaPeople a = new ChinaPeople();
	AmericanPeople  b = new AmericanPeople ();
	BeijingPeople c = new BeijingPeople();
	a.speakHello();
	a.averageHeight();
	a.averageWeight();
	a.chinaGongfu();
	
	b.speakHello();
	b.averageHeight();
	b.averageWeight();
	b.americanBoxing();
	
	c.speakHello();
	c.averageHeight();
	c.averageWeight();
}
  1. 这题考察了接口,我们还没具体学过,所以我百度了如何去写接口,主要用到了关键字interface和implements。
package ch6;
/*
 * 定义一个接口CanFly,描述会飞的方法public void fly();分别定义类飞机和鸟,
 * 实现CanFly接口。定义一个测试类,测试飞机和鸟。测试类中定义一个makeFly()方法,
 * 让会飞的事物飞起来。然后在main方法中创建飞机对象和鸟对象,并在main方法中调用
 * makeFly()方法,让飞机和鸟起飞。
 */
public class Ch6Demo3 {
interface CanFly{
	public void fly();
}
public class plane implements CanFly{
    
	@Override
	public void fly() {
		System.out.println("飞机会飞。");
	}
}
public class bird implements CanFly{
    
	@Override
	public void fly() {
		System.out.println("小鸟会飞。");
	}
}
}
public void makeFly(CanFly p){
	p.fly();
}
public static void main(String[] args) {
	plane p = new plane();
	new text3().makeFly(p);
	bird b = new bird();
	new text3().makeFly(b);
	
}

多重接口继承,但在Java中不允许多重继承。

public static class Graduate implements StudentManageInterface, TeacherManageInterface

在构造函数中增加筛选条件:

public Graduate(String name,String sex,int fee, int pay)
	{
	super();
	this.name = name;
	this.sex = sex;
	this.fee = fee;
	this.pay = pay;
	if (this.pay - this.fee < 20000)
	System.out.println("需要贷款!");
	}

预习:

预习了第六章访问控制权限和第七章复用类

  1. 包:库单元:代码组织、创建独一无二的包名、定制工具类、用import改变行为、对使用包的忠告。
  2. Java访问权限控制:包访问权限、public:接口访问权限、private:你无法访问、protected:继承访问权限。
  3. 接口和实现
  4. 类的访问权限
  5. 组合语法
  6. 继承语法:初始化基类
  7. 代理
  8. 结合使用组合和继承:确保正确清理,名称屏蔽。
  9. 在组合和继承:确保正确清理、名称屏蔽。
  10. 在组合和继承之间选择
  11. protcted关键字
  12. 向上转型:为什么成为向上转型、再论组合与继承
  13. final关键字:final数据、final方法、final类有关final的忠告
  14. 初始化及类的加载:继承与初始化

总结:

这一周的理论课和实验课收获都挺多的,这次实验课上的实验作业比前面几次都要简单,我也学习到了新知识:接口。但是第五题我老是出错,找不到原因,希望后面一周老师讲解的时候可以找到原因。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值