java学习笔记

1,在新的class中产生既有class的对象的方法称为组合(Composition).它只很单纯的重复运用既有程序代码的功能,而非重复运用其形式;
2,实际接收既有class的形式,并加入新码,无须更动既有的class的神奇行为即继承(inheritance);可通过关键字extends来实现;
3,基本型别的数据会被自动初始化为零,但object reference会被初始化为null,但编译器不为每个reference产生缺省对象。每个非基本型别的对象都具备toString();
4,为了继承着想,一般原则是将所有的数据成员声明为private,将所有函数声明为public;
5,base class会在derived class构造函数取用它之前,先完成本身的初始化动作;编译器会为derived class合成一个default构造函数,并在其中调用base class 的构造函数;
6,虽然编译器会强迫你初始化base classes,并且规定你一定得在构造函数起始处完成,但它并不会看管你是否将成员对象也初始化,得你自己记得;
7,除了内存,最好不要依赖垃圾回收机制;
8,protected指"就此class的使用者来说,这是private。但任何继承自此一class的derived classes,或位于同一个package内的其他classes,却可以访问";
9,继承代表着一种关系的展现,它代表"这个新的class是一种(is-a)旧的class。";继承可实现"向上转型(upcasting)"--"将derived class 转为base class"的动作;
10,只有在明显能够产生使用价值时,或需要向上转型时,才使用继承,否则用组合代替;
11,如果某一笔数据既是static也是final,那么他会拥有一块无法改变的存储空间;
12,可以将null当作final引数。当基本型别引数为final时,可以读取引数所代表的值,但无法改变该值;
13,class中所有的private函数自然而然会是final的;final class中的所有函数也都自然是final的;
14,class装载动作可能发生在class的第一个实体诞生时,或其static成员第一次被取用时;class装载动作会且只会发生一次。

1,封装(encapsulation)是借着"将"特征(claracteristics)与行为(behaviors)结合在一起"而产生新的数据型别;
2,隐藏(implementation hidden)则籍由"将细目(details)声明为private"而分离出接口(interface)与实现(implementation);
3,先期邦定(early binding)是指邦定动作发生于程序执行前(由编译器和连接器完成);C编译器只有一种method call,就是先期绑定;
4,后期绑定(last binding)即绑定动作将在执行器才根据对象型别而进行;后期绑定也称执行期绑定(run-time binding)或动态绑定(dynamic binding);Java的所有函数,除了别声明为final者,皆使用后期绑定;
5,让程序员"将变动的事物与不变的事物隔离"的所有技术中,多态是最重要的技术之一;
6,如果某个函数名称和base class函数名称相同,但引数相异(与返回值类型无关),即为重载(Overloading);
7,如果class含有单一或多个abstract methods.便须以关键字abstract修饰此class,即其为抽象类;
8,在derived class中,你得为base class中的所有abstract methods都提供相应的定义;
9,也可以将不含任何abstract methods的class声明为abstract。如果你不希望你所撰写的class杯产生出任何实体,但这个class又不具备"拥有abstract methods"的实际理由时,这项性质便极为有用。(总结:abstract class不能被组合);
10,将某个class声明为abstract,并不强迫你得将所有函数都声明为abstract,可以是0个、1个或n个;
11,构造函数不具有多态性;
12,编译器不允许在继承过程中降低访问权限("Friendly"的访问权限小于protected);
13,应该先执行derived class的终止式,然后才是base class的终止式。因为derived class的终止动作可能毁掉用某些base class函数,而这些终止动作的正常运作有赖其"base class成分"仍旧可用才行,所以你不能过早加以摧毁;
14,如果你在构造函数中调用动态绑定的某个函数,会唤起该函数被复写(Overriden)后的定义。然而其效应无法预期,甚至可能会覆盖某些难以发现的臭虫;
15,撰写构造函数时,"尽可能简单得让对象进入正确状态。如果可以的话,别调用任何函数"。构造函数中唯一可以安全调用的函数便是"base class中的final函数"(这对private函数一样成立,因为他们天生就是final),此函数无法被复写,也就不会产生这一类令人惊讶的结果;
16,当你不知道选择"继承"或"组合"手法时,最好选择组合;
17,"请以继承表达行为上的差异,以数据成员表达状态(state)上的变化";
18,向上转型(upcating)之后,无法调用derived class新增的函数;
19,向上转型是安全的,但向下转型必须要通过"执行期型别辨识"(RTTI);
20,如果不使用数据抽象性和继承,就不可能了解多态并进而运用多态。多态是一个无法单独对待的特性,只能协同运作,作为"class相对关系"大局中的一部分。只要不是后期绑定,就不是多态。


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值