1.将对象变成字符串类型有两种方式,一种是直接调用tostring方法,一种是用+“”
2.类中基本类型会被初始化为0,但对象引用会被初始化null
3.编译器并不会简单的为每一个引用都创建默认的对象,如果想初始化这些对象,可以在如下的地方执行:
a)在定义对象的地方。这意味着他们总是能够在构造器被调用之前初始化
b)在类的构造器中。
c)在正要使用对象之前,成为惰性初始化
d)使用实例初始化
4.final的使用:a.基本数据类型中使用final修饰表示该数据是一个常数,永远不能改变,并且必须要赋初值(可以是一个表达式),而如过是修饰一个句柄(即对象或数组),那
么只是不能再将该句柄指向其他的新对象,但可以改变对象的属性或数值。当用static和final同时修饰时该数据就是一个全局常数(一般采用大写)。无论是将其定义为static还
是定义为final,在编译期间都是不知道值的,只有在运行期(初始化)才知道。b.自变量用final修饰,如方法的参数被定为final,那么在方法内部不能改变该参数句柄所对应的对
象,只能读取它。c.方法被final修饰,理由一:不想让继承类来覆盖和改写该方法,防止继承类改变它本来的含义。理由二:会使代码的执行效率变高。
5.类的整个初始化顺序(包括继承):装载程序先到外面去找到那个类,找到后查看是否有基类(extends),有的话随之将其载入,无论是否需要生成基类的对象,这个过程都会
发生,如果该基类还含有基类,也将其载入,依此类推。之后会在根基类中执行static初始化,在到衍生类中初始化,以此类推。保证这个顺序是很重要的,因为可能衍生类的初
始化可能依赖基类成员。至此必要的类都已经装载完毕,可以进行对象的创建,首先,这个类中的基础类型数据都是初始化为默认值,对象句柄初始为null(为对象分配的存储空间
初始化成二进制0),随后调用基础类构造器,这个调用是自动的,我们也可自己显示调用(super),如果基类的构造方法中含有基类的抽象方法,那么会调用子类的方法实现,基
础类的构建采用与衍生类构建器完全相同的处理过程。基础类构建器完成后,实例变量会按本来的顺序进行初始化。最后执行构建器的剩余部分。
6.final关键字
参考:http://blog.youkuaiyun.com/niguang09/article/details/6035813
7.在“上溯造型”中能够通过基类来调用子类的所有方法,那么必须保证子类只含有基类的所有方法,不含有额外的方法。此时我们为了能调用子类额外的方法,那么必须使用“下溯
造型”,但“上溯造型”肯定是安全的,因为基础类不可能拥有一个比衍生类更大的接口,故能保证基础类发送的每一条消息衍生类都能接受到,但“下溯造型”就不行了。