《Java编程思想第四版》学习笔记--5至8章

第五章 初始化与清理

1.每个方法首字母小写的编码风格不适用于构造器。构造器是一种特殊类型的方法,因为它没有返回值,这与返回值为空不同。
2.方法重载。参数类型或个数不同。如果传入的参数小于方法中声明的参数,实际数据类型会被提升,传入char没找到对应的,就会提升到int。反之,必须进行强制转换。重载必须满足以下三点:
1)方法的名称必须相同。
2)方法的参数必须不同,这里的不同分三种情况:
a、参数个数不同,类型无限制;
b、参数个数相同,但是参数类型不同;
c、参数个数和类型都相同,但是参数的顺序不同;
3)方法的返回类型和修饰符可以相同,也可以不同。

3默认构造器没有形式参数,自动创建默认对象,如果已经定义了一个构造器,编译器就不会自动创建了。
4.this关键字 当前对象的引用时,需要使用。 当前类中的方法可以直接在同一个类中的其他方法被调用,不用写this。
5.对象可能不被垃圾回收,垃圾回收不等于析构。finalize得到调用,图像会被擦除。垃圾回收只与内存有关。
无论对象是如何创建的,垃圾回收器都会负责释放对象所占的内存。
6.定义变量的先后顺序决定了初始化的顺序,在任何方法(包括构造器)被调用之前得到初始化。
静态数据的初始化:先静态对象,而后是非静态对象。构造器也是静态方法。静态代码块仅执行一次。实际初始化语句都是在调构造器之前完成的。

class Window {
    Window(int marker) {
        System.out.println("Window("+marker+")");
    }

class House {
    int value1;
    static int value2;
    int value3 = 2;
    static int value4;
    {
        System.out.println("初始化非静态成员变量:value1 = " + value1 + ", value3 = " + value3);
    }  
    static {
        value4 = 1;
        System.out.println("初始化静态成员变量:value2 = " + value2 + ", value4 = " + value4);
    }
    Window w1 = new Window(1);
    House() {
        System.out.println("House()");
        w3 = new Window(33);
    }  
    Window w2 = new Window(2);
    void f() {
        System.out.println("f()");
    }
    Window w3 = new Window(3);

public class OrderOfInitialization {
    public static void main(String[] args) {
        House h = new House();
        h.f();
    }
}/* Output:
初始化静态成员变量:value2 = 0, value4 = 1
初始化非静态成员变量:value1 = 0, value3 = 2
Window(1)
Window(2)
Window(3)
House()
Window(33)
f()
数组的创建是在运行时刻进行的,数组元素中的基本数据类型会自动初始化。引用类型,如果忘记创建对象,试图使用数组中的空引用,运行时会产生异常。
7.可变参数
8.枚举类,可以在switch 语句中使用。

第六章 访问权限控制

1.包名。
2.访问权限。
包访问权限,接口访问权限,你无法访问,继承访问权限。加上继承访问权限,位于另一个包内的继承过来的,也能使用。
类访问权限仅有两个:包访问权限或者public。如果不想让其他类访问到该类,可以将构造器设为private,阻止任何人创建该类的对象,但是在该类的static成员内部可以创建p122。默认是包访问权限。

第七章 复用类

1.每一个非基本类型的对象都有一个toString()方法,当编译器需要一个String而你却只有一个对象时,该方法便会被调用,p126.
编译器并不是为每一个引用都创建默认对象,如果想初始化这些引用,在四个位置:
`定义对象的地方。
`类的构造器。
`使用这些对象之前。
`使用实例初始化。
2.继承。对类的复用。super关键字,表示当前类就是从超类继承来的。子类调用基类有参的构造器也需要使用。
初始化基类。创建子类对象,构建过程是先创建基类对象,向外扩散。
3.组合与继承。首先选择组合,如果必须向上转型,则用继承是必要的。
4.向上转型。可以将子类引用转换成父类引用的动作。
5.final 永不改变的编译时常量。
           运行时被初始化的值,不希望被改变。
一个既static又final的域只占据一段不能改变的存储空间。不可以通过创建对象两次而改变值。
空白final:声明没有赋初始值。必须在域的定义处或者构造器中对其赋值。
参数也可以设置成此类型。
final方法。所有的private方法都隐式地被指定为final方法,将方法锁定且不会被覆盖。
final 类。不允许被继承,所有方法都隐式指定为final,不能覆盖它们。
6.初始化及类的加载顺序。
父类的静态方法,子类的静态方法,初始化父类的属性值/父类的普通代码块,父类的构造方法,初始化子类的属性值/子类的普通代码块,子类的构造方法。

第八章 多态

多态是继数据抽象和继承之后的第三种基本特征

多态(也称作动态绑定、后期绑定或运行时绑定)。

多态的作用是消除类型之间的耦合关系。

1.绑定。
后期绑定,运行时根据对象的类型进行绑定,也叫动态绑定或运行时绑定。
2.父类为从他继承而来的子类建立了公共接口,子类重写这些方法,向上转型,用父类类型接收子类对象。多态意味着不同的形式,持有从基类继承而来的相同接口,以及使用该接口的不同形式,不同版本的动态绑定方法。
3.静态方法与类关联,而不是单个对象。私有方法不能被覆盖。
4.构造器的调用顺序。从父类的构造器,声明顺叙调用成员的初始化方法,子类的构造器主体。销毁对象时候,顺叙相反,dispose()方法。

4 协变返回类型

导出类中的覆盖方法可以返回基类方法返回类型的某种导出类型(导出类中的覆盖方法的返回类型可以比基类方法返回类型更具体)。

5.用继承进行设计。
用继承表达行为间的差异,并用字段表达状态上的变化。p165.
基类可以接收发送给子类的任何消息,可一旦向上转型,就不能调用那些新方法。
如果想调用那些扩展方法,就要尝试向下转型,否则会报编译时出错。这种转型不安全。

Java中,所有转型都会检查,在进入运行时仍会检查,如果不是该类型,就会抛出ClassCastException异常。运行期间对类型进行检查的行为称作“运行时类型识别(RTTI)”。

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值