一、构造器(构造方法)
1、构造器的声明格式
- 语法格式
![dc7c84305a5fd952e1369ced3a6488a1.png](https://img-blog.csdnimg.cn/img_convert/dc7c84305a5fd952e1369ced3a6488a1.png)
- 举 例:
![4c2a1c6b8352355f02c656c343fbb194.png](https://img-blog.csdnimg.cn/img_convert/4c2a1c6b8352355f02c656c343fbb194.png)
- 注:构造器都会默认的声明super关键字,调用父类的构造器,不显示的声明,则程序会自动的调用Object类的无参构造器
2、 构造器的特征
- 它具有与类相同的名称它不声明返回值类型(与声明为void不同)不能被static、final、synchronized、abstract、native修饰,不能有return语句返回值
3、 构造器的作用:是类都有构造器,构造器是区分接口和类的关键
- 创建类的对象
![cf16ab43c3f4d1c0c97525823e4f29a9.png](https://img-blog.csdnimg.cn/img_convert/cf16ab43c3f4d1c0c97525823e4f29a9.png)
- 初始化对象的属性
![f6cd2d92f4d8b3c03669d5075ae4e728.png](https://img-blog.csdnimg.cn/img_convert/f6cd2d92f4d8b3c03669d5075ae4e728.png)
4、说明
- 1.如果没有显式的定义类的构造器的话,则系统默认提供一个空参的构造器,默认构造器的修饰符与所属类的修饰符一致
![b92c3d2de43fd25ea273fb97542766f6.png](https://img-blog.csdnimg.cn/img_convert/b92c3d2de43fd25ea273fb97542766f6.png)
- 2.定义构造器的格式:权限修饰符 类名(形参列表){}3.一个类中定义的多个构造器,彼此构成重载
![a4e5f7a91b8df2f012796a1fe1dabdfa.png](https://img-blog.csdnimg.cn/img_convert/a4e5f7a91b8df2f012796a1fe1dabdfa.png)
- 4.一旦我们显式的定义了类的构造器之后,系统就不再提供默认的空参构造器,若需要默认的空参构造器,必须重写5.一个类中,至少会有一个构造器6.父类的构造器不可被子类继承注意:抽象类中也有构造器,但是,抽象类中的构造器不能实例化,是为了让子类继承时调用
二、代码块(初始化块)
1、代码块的格式
- 代码块如果有修饰的话,只能使用static{} 非静态代码块static{} 静态代码块
![2dafba81f8daea85b1c983c2e2fb7f24.png](https://img-blog.csdnimg.cn/img_convert/2dafba81f8daea85b1c983c2e2fb7f24.png)
2、代码块的作用
- 对Java类或对象进行初始化
3、代码块的分类
- 静态代码块① 内部可以有输出语句② 随着类的加载而执行,而且只执行一次。区别静态方法:随着类的加载而加载③ 作用:初始化类中静态的信息④ 如果一个类中定义了多个静态代码块,则按照声明的先后顺序执行⑤态代码块的执行要优先于非静态代码块的执行⑥ 只能调用静态的属性和方法,不能调用非静态的结构
![01003f022f1ea2674aaafa70723bc21b.png](https://img-blog.csdnimg.cn/img_convert/01003f022f1ea2674aaafa70723bc21b.png)
- 非静态代码块①内部可以有输出语句② 随着对象的创建而执行,每创建一个对象,就执行一次非静态代码块③ 作用:可以在创建对象时,对对象的属性等进行初始化④ 如果一个类中定义了多个非静态代码块,则按照声明的先后顺序执行⑤ 既可以调用静态的属性和方法,也可以调用非静态的属性和方法
![295367e8b3cbd7e35f09c7a7a4994a7d.png](https://img-blog.csdnimg.cn/img_convert/295367e8b3cbd7e35f09c7a7a4994a7d.png)
4、属性的赋值顺序
- 赋值方式:①默认初始化;②显式初始化;③构造器中初始化;④有了对象以后,可以通过"对象.属性"或"对象.方法"的方式,进行赋值;⑤在代码块中赋值赋值顺序:执行的先后顺序:① - ② / ⑤ - ③ - ④
三、内部类
1、内部类的定义
- Java中允许将一个类A声明在另一个类B中,则类A就是内部类,类B称为外部类Inner class的名字不能与包含它的外部类类名相同
2、内部类的分类
- 成员内部类声明在方法外
![f618ebdc61ea4beb183143bf70af2db2.png](https://img-blog.csdnimg.cn/img_convert/f618ebdc61ea4beb183143bf70af2db2.png)
- 分为:静态成员内部类和非静态成员内部类一方面,作为外部类的成员1、调用外部类的结构:属性、方法等2、可以被static修饰:此时表示静态成员内部类;此时就不能再使用外层类的非static的成员变量3、可以被4种不同的权限修饰另一方面,作为一个类1、类内可以定义属性、方法、构造器等
![0a06ad04edd0866487d991dd0a7a15e4.png](https://img-blog.csdnimg.cn/img_convert/0a06ad04edd0866487d991dd0a7a15e4.png)
- 2、可以被final修饰,表示此类不能被继承。言外之意,不使用final,就可以被继承3、可以被abstract修饰,表示此类不能被实例化
- 实例化成员内部类的对象
![fa94f3786c578d3d93ece70d24a59ba7.png](https://img-blog.csdnimg.cn/img_convert/fa94f3786c578d3d93ece70d24a59ba7.png)
- 在成员内部类中区分调用外部类的结构
![6813231a30cb47dc6c32a8e47b0a09c8.png](https://img-blog.csdnimg.cn/img_convert/6813231a30cb47dc6c32a8e47b0a09c8.png)
- 局部内部类声明在方法内、代码块内、构造器内
![eeeb7b99038c6e93b2a2a668ab4a6036.png](https://img-blog.csdnimg.cn/img_convert/eeeb7b99038c6e93b2a2a668ab4a6036.png)
- Java8新特征:① 需要显式的声明为final;② java8中可以省略final的声明