0722抽象类
//P140 //this用法 可以帮助在继承的子类中构造时节约一个对象 this(a,b); new String("Hello"); //产生了两个对象,constant pool;
单例类:资源单一,所以只希望该类产生唯一一个实例对象
//为了防止其他类自由创建我的对象 //构造函数写成private //提供一个public方法作为访问点,进行对象创建 //调用这个方法时,还没有对象。所以static该方法 //类必须知道自己是否曾已经创建过一个对象,保证唯一 //类需要提供一个成语变量保存已经创建的对象 //该成员变量需要被public static方法访问 //成语变量也必须是static
final关键字: ”不可变“
//P176 //final成员变量 //普通的成员变量可以系统默认初始化 //但是final只能被赋值一次,所以必须要求程序员显示地初始化 //final局部变量 //系统本来就不会为局部变量初始化,不用担心 //一个问题,函数(形参),在这个函数体里面,不准再改变形参的值了。传参已是一次了 //宏替换功能 //初始值可以在编译的时候被确定下来 //final方法 //不可以被重写 //但是当父类是private时,我表示可以重写 //final类 //不可以有子类,防止被重写了 //final帮助实现不可变类
不可变类:
//P180 P184
//反正是不可以改变的 //可以缓存实例,创建Integer对象时,valueof()相比构造函数使用了这个功能
//P182 //注意:不可变类依赖于final实现,成员与方法的不可变 //但是不是final类,NOT public final class //一个特殊的问题,当该不可变类包含一个 引用类型的属性时, //引用对象(不变)内容的改变可能会导致该类改变 public class Name { //普通,不是不可变类 } public class Person { private final Name name; //该属性为引用类型 private Person(Name name) { this.name=name; } //形参name的值可被改变, } //解决方案: //传入形参时,根据形参的值, //自己new出一个Name的对象为this.name进行赋值
抽象类 :
==运算符与equals()方法,可以提供重写
宏替换的好处
创建对象顺序:对所有属性分配内存,并且为属性进行初始化,或者是声明时指定的初始值
再执行构造函数里的初始值。
构造函数仅仅起到初始化的作用,并非内存创建对象作用。
包装类,自动装箱,自动拆箱(形参需要)