《Java 编程思想读书笔记》----类和接口

1.方法调用的实际过程:

Banana a = new Banana();
Banana b = new Banana();
a.peel(1); // => Banana().peel(a, 1);
b.peel(2); // => Banana().peel(b, 2);

2.关键字this,只能在方法内部使用,表示调用方法的那个对象的引用。

class Person {
    public void eat(Apple apple) {
        Apple peeled = apple.getPeeled();
        System.out.println("Yummy");
    }
}

class Peeler {
    static Apple peel(Apple apple) {
        //something to do;
        return apple;
    }
}

class Apple {
    Apple getPeeled() {
        return Peeler.peel(this);
    }
}

这是this的一种用法,即有些操作要放到类外。这些操作对许多不同的类都相同,这里不同的类的意思是没有is-a的关系,机没有共同的父类。

3.构造器调用构造器:

public class Flower {
    Flower(int) {
    }

    Flower(String) {
    }

    Flower(String, int) {
        this(int);
        //this(String);错误
    }
}

I.只能调用一次;
II.构造器调用必须置于最起始处。
除了在构造器外,禁止在任何地方调用构造器:this(…);
只能new class();

4.static方法即没有this的方法。
即调用方法时:Class.Func(int); 区别于非static:Class.Func(this,int);
由于没有this即对象的引用,static方法就不能调用非static方法:
因为非static方法要this对象的引用这个隐藏的参数,而static方法不带this传不了。
当然可以通过在static方法的参数列表中传入对象的引用来调用非static方法,但是这只要写个非static方法就行了。

5.局部变量初始化:
void func() {
int i;//error java编译时错误,提示i尚未初始化。
}

6.类内部成员变量定义的顺序决定了初始化的顺序。
成员变量在任何方法(包括构造器)被调动之前初始化。即使它们散布于方法定义之间。

7.static不能用于局部变量

8.枚举类型

public enum Spiciness {
    VOT, MILD, MEDIUM, HOT,FLANING;//是常量,所有大写;
}
Spiniciness howHot = Spiciness.MEDIUM;
howHot.ordianl(); // 2;

9..java文件是一个编译单元,一个编译单元只能有一个public class且必须和文件名相同,如果有额外的类,就不能是public的,对外部不可见类,即只服务于public类。

10.所有class都会编译为.class文件;
package字段必须写在.java文件除注释外第一行。
它确定了.class文件在.jar包中的位置。
路径用域名区分,如果发布代码最好申请自己的域名。

11.import可用于java的条件编译,在正式版本可以用import不同的包来取消打印和调试信息。

12.protected同时提供包访问权限。

13.编译单元完全不带public类也是可能的,类名可以和文件名相同也可以不同,但是不能是private的,只能是包访问权限或者public。

14.类不能是private和protected

15.继承不是复制基类的接口:当创建一个导出类对象,这个导出类对象包括了一个父类的子对象,这个父类的子对象和用父类直接创建的对象是一样的,区别是父类直接创建的对象来自于外部,而父类的子对象被包装在导出类对象内部。

16.如果基类构造器带参数,那子类构造器第一件事就是调用子类构造器。

17.除了内存外,不能依赖垃圾回收器做任何事,因为不一定会调用,也许永远不调用,调用了也会用它想要的顺序来回收对象。

18.继承和组合之间的选择:是否需要向上转型。

19.数组是对象 int[] a = {…};是在堆上分配内存。

20.允许定义空白final。final int i;即先声明final的变量。然后再赋值。
但是编译器会确保空白final在使用时都初始化。
这样做可以提供很大的灵活性,即每个对象对应的final变量不同,也保持了恒定不变的特性。

21.final修饰参数,主要用于向匿名内部类传参。

22.final修饰方法,把方法锁定,防止子类覆写。

23.private隐式含有final的含义,即private无法被覆盖。
在子类中声明和父类中private的方法相同的public或者protected和private方法,不是覆盖原来父类的方法,只是在子类中重新生成老的方法。

24.final类。类无法被继承。

25.Java除了final和static方法,其它方法都是后期绑定。

26.private 的方法如果被覆写,那么子类向上转型时调用子类的public的方法时不会成功的,只会调用父类的private方法。

27.如果子类的域名即成变量名和父类是一样的,那么子类要调用父类的域要用super.filed。

28.构造器隐式含有static。

29.子类构造器第一件事应该是调用父类构造器,如果没有指定用哪个基类构造器,就会调用默认构造器,如果默认构造器不存在,编译器会报错。
故如果父类重载了构造器,子类构造器第一件事应该调用父类的这个构造器,其子类构造器必须重载。

30.基类的清理动作应该在导出类之后。

31.编写构造器时:用尽可能简单的方法是对象进入正常的状态;避免调用其它的方法,在构造器内唯一能够安全调用的是基类的final方法,也适用于private方法。
原因:如果构造器调用的方法被子类覆盖,使用多态时父类构造器就会调用调用子类的子类的方法,而子类的一些成员可能还没初始化,对于变量都为0.但是对于对象的引用未初始化状态是null,会导致空指针。

32.接口可以包含域,但这些域都是隐式的public static和final的,可以直接用Test.filed来调用。接口的这些域不能申明为private和protected。
接口的方法默认是public的,不能申明为为private和protected。
但实现了接口的类必须申明为public,不然就是包访问权限。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值