4、5初始化和清理
5.1 构造器初始化
- 无参:如果一个类没有构造器,那么会有一个默认的无参构造器,并且只能通过无参构造器初始化对象;
- 带参:传入参数初始化成员变量或者其它初始化操作需要的参数,如果类重质油带参构造器,那不能通过无参构造器初始化对象。
5.2 方法重载
- 具有相同的方法名称、不同的返回值或者参数列表(个数、类型、顺序)
- 基本类型重载:基本类型存在自动向上转型的情况
5.3 垃圾回收
- finalize():在对象被销毁时调用
- 如何回收:引用计数、停止-复制、标记-清扫、分代、JIT
5.4 成员变量初始化
- 指定初始化,定义的时候初始化,每次创建对象的实例初始值一样;
- 构造器初始化,在构造器中初始化成员变量;
- 非static域初始化非成员变量({});
- 静态变量初始化:指定初始化和静态域初始化(static{});
- 初始化顺序:如果类第一次被实例化,那么首先初始化类的静态变量,如果不是,将不会再初始化静态变量,接着初始化指定方式的,最后初始化构造器方式的
- 继承方式初始化顺序:父类static->子类static->父类指定->父类构造->子类指定->子类构造
package com.chenlei.study.thinkinginjava; class Base{ Base(String msg){ System.out.println(msg); } } class Father{ static Base staticBaseFather = new Base("staticBaseFather specify"); static Base staticBaseFather1; static{ staticBaseFather1 = new Base("staticBaseFather static area"); } Base base = new Base("fieldBaseFather specify"); Base base1; { base1 = new Base("fieldBaseFather non-static area"); } Base base2; public Father() { base2 = new Base("fieldBaseFather constructor"); } } class Child extends Father{ static Base staticBaseChild = new Base("staticBaseChild specify"); static Base staticBaseChild1; static{ staticBaseChild1 = new Base("staticBaseChild static area"); } Base base1; { base1 = new Base("fieldBaseChild non-static area"); } Base base = new Base("fieldBaseChild specify"); Base base2; public Child() { base2 = new Base("fieldBaseChild constructor"); } } public class Initalized { public static void main(String[] args) { new Child(); } }
output:staticBaseFather specify staticBaseFather static area staticBaseChild specify staticBaseChild static area fieldBaseFather specify fieldBaseFather non-static area fieldBaseFather constructor fieldBaseChild non-static area fieldBaseChild specify fieldBaseChild constructor
时间: 2024-10-30 03:01:32