java 内部类 的修饰符_Java学习笔记 10 - 构造方法、修饰符、内部类等

本文主要内容

1、构造方法

2、this、super 、final 、static关键字

3、匿名对象、内部类、包、权限修饰符、代码块

01 构造方法

A、作用:在实例化对象同时对象属性初始化

B、格式:权限 类名(参数列表){}

C、注意事项

1、类中,如果没有构造函数,编译器会自动添加一个无参的构造函数。如果有,则不会自动添加。

2、new 对象时,即是在调用对象的构造方法。

3、同一个类可以有多个构造方法,构造方法以重载的形式展现

4、构造方法在创建对象的时候就执行了,而且只执行一次。一般方法是在对象创建后,需要使用时才被调用,可以被调用多次

5、构造方法没有返回值类型。也不需要写返回值。因为它是为构建对象的,对象创建完,方法就执行结束

02 this关键字

构造方法之间的调用,要使用this(参数),语法:this(参数列表)

1、this(参数)在一个构造方法中调用其他构造方法

2、this(参数)必须写在构造方法中的第一行

3、this关键字用来区别同名的成员变量与局部变量,用法:this.成员变量

03 super关键字

A、格式

调用本类中的构造方法:this(实参列表);

调用父类中的空参数构造方法:super();

调用父类中的有参数构造方法:super(实参列表);

B、注意事项

1、super()调用的是父类的空参数构造方法,进行父类成员的初始化

super(参数)调用的是父类的有参数构造方法,super.成员变量 调用的是父类的成员变量

2 、子类的构造方法中有一个默认的构造方法,在该构造方法中的第一行有一个隐式代码super();

目的是调用父类的构造方法,super代表父类在内存中存储的位置

3、子类中所有的构造方法,无论重载多少个,第一行必须是super()

4、如果父类有多个构造方法,子类中super()可以是父类任意一个构造方法。

5、构造方法不能继承,所以不能重写

6、super()必须是子类构造方法中的第一行

7、无论如何,子类的所有构造方法都要直接或间接的调用到父类的构造方法

8、this()、super()不能同时存在

子类中的构造方法为什么会有一句隐式的super()呢?

原因:子类会继承父类中的内容,所以子类在初始化时,必须先到父类中去执行父类的初始化动作。这样,才可以使用父类中的内容。当父类中没有空参数构造方法时,子类的构造方法必须有显示的super语句,指定要访问的父类有参数构造方法。

04 final 关键字

final修饰类不可以被继承,但是可以继承其他类

final class 子类类名 extends 父类类名{}

final修饰的方法不可以被覆盖,但父类中没有被final修饰方法,子类覆盖后可以加final

public final void 方法名(){}

final修饰的变量称为常量,这些变量只能赋值一次,需要在创建对象前赋值,否则报错

final int i = 20;

i = 30; //赋值报错,final修饰的变量只能赋值一次

05 static关键字

访问静态成员的格式

类名.静态成员变量名

类名.静态成员方法名(参数)

1、静态方法中不能调用非静态方法或变量,只能调用静态方法或变量

2、静态方法中不能使用this或super

3、非静态方法可以使用静态变量

4、当方法中没有使用非静态变量时,方法应该定义为静态方法。

当方法中只使用非静态变量时,方法应定义为非静态方法。

当方法中既没有使用静态和非静态变量时,方法应定义为静态方法。

5、静态方法或变量是在类创建过程中进行创建和初始化的,它的存在优先于非静态方法或变量。当类执行完成后,静态方法或变量才消亡。

6、接口中的每个成员变量都默认使用public static final修饰。

7、被static修饰的成员变量属于类,不属于这个类的某个对象

8、被static修饰的成员可以通过类名直接访问

06 匿名对象

1、匿名对象使用格式: new 类名()

2、匿名对象只能使用一次

3、匿名对象可以作为方法中的参数,也可以作为返回值

07 内部类

A、特点

1、调用方法中的内部类的方法,需要在方法中new内部类,然后调用内部类的方法。

2、匿名内部类方法的调用格式:new 内部类名称(){定义具体方法}.方法名;

3、接口的实现或类的继承,都可以通过 new 接口名或类名(){方法的重写};的方式创建对象。

B、内部类的分类

1、成员内部类

定义在外部类中的成员位置。与类中的成员变量相似,可通过外部类对象进行访问

定义格式

class 外部类 {

修饰符 class 内部类 {

//其他代码

}

}

访问方式: 外部类名.内部类名 变量名 = new 外部类名().new 内部类名();

2、局部内部类

定义在外部类方法中的局部位置。与访问方法中的局部变量相似,可通过调用方法进行访问.

定义格式

class 外部类 {

修饰符 返回值类型 方法名(参数) {

class 内部类 {

//其他代码

}

}

}

访问方式:在外部类方法中,创建内部类对象,进行访问

3、外部类、内部类、内部类方法中同时定义同一个变量时,内部类使用该变量时遵循就近原则。

内部类中的方法想要调用内部类中定义的变量,可以用: this.变量名称

内部类中的方法想要调用外部类中定义的变量,可以用: 外部类名.this.变量名称

4、内部类的定义位置可以在外部类定义变量的任意相同位置

08 包

类中包的声明格式: package 包名.包名.包名…;

在访问类时,为了能够找到该类,必须使用含有包名的类全名:包名.包名….类名,如: java.util.Scanner

导包的格式:import 包名.类名;

09 权限修饰符

public 所有包中的类都可以访问

protected 本包及子类可以访问,不同包的子类访问,只能在子类中访问,不能出类例如:在main方法中实例化子类对象通过实例化的对象去访问protected修饰的方法或变量,是不可以的。

default 本包内都可以访问,不同包的子类不能访问。

private 只能本类可以访问

10 代码块

A、以”{}”划定的代码区域 叫代码块,位置没有固定要求,可随意

B、分类: 局部代码块 构造代码块 静态代码块 同步代码块

1、局部代码块

以”{}”划定的代码区域,此时只需要关注作用域的不同即可

方法和类都是以代码块的方式划定边界的

2、构造代码块

构造代码块是定义在类中成员位置的代码块

优先于构造方法执行,构造代码块用于执行所有对象均需要的初始化动作

每创建一个对象均会执行一次构造代码块

3、静态代码块

定义在成员位置,使用static修饰的代码块。

静态代码块只执行一次,无论new几次对象。非静态代码块、构造方法,new几次对象就执行几次

静态代码块优先于非静态代码块执行,非静态代码块优先于构造方法执行

可用于给静态变量赋值,用来给类进行初始化。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值