🕐 Java 类
2022年6月9日
- Java
🕐 Java 类
1. 访问权限
private
: 只能被同一包下的同一类访问default
: 只能被同一包下的类访问protected
: + 能被不同包下的子类访问public
: 所有包下的类均可访问
2. 构造函数
1) 调用时间
- 在新对象实例化时被调用
2) 特点
- 方法名与类名相同
- 无返回值
- 可以重载,不可子类重写
注
- 在没有自定义引入类的构造方法时,类编译时自动生成一个无参构造函数;
- 当有构造方法时,无论是否有参,均不会自动生成无参构造函数。
3. 内部类
1) 成员内部类
- 成员内部类看起来像是外部类的一个 成员,可以使用
private
、public
等访问限制符修饰
① 静态内部类
- 编译完成后 没有外围类的对象的引用
- 不依赖于外围类的对象
- 不能使用外围类的 非 static 成员和方法
- 允许有 static 属性、方法
② 非静态内部类
- 编译完成后 隐含地保存着一个外围类的对象的引用
- 可以访问外部类的 所有 信息(如果有重名,使用
外部类.this.变量/方法
的方式来调用外部类的变量或方法) - 创建内部类对象时,必须先 使用外围类的对象 来创建
- 外围类可以访问成员内部类信息,但必须先 创建一个内部类的对象 ,再使用这个对象来访问
- 不能存在 static 的变量和方法,可以存在某一些 static final类型的 常量(具体指的是编译期常量)
- 原因:
- 对于非 static final 变量,JVM 加载顺序为:外部类实例化 -> 静态变量 | 静态代码块的初始化 -> 非静态代码块,
- 若没有外部类对象的引用,就不会有外部类的实例化,就不会触发 非静态内部类 初始化,而 static 需要初始化,两者矛盾
- 原因:
2) 局部内部类
3) 匿名内部类
- 很多时候我们编写 局部内部类 也只是会它来创建一个对象,并不会重复使用,所以我们连类名都不需要起了
3. 属性/字段
1) 常用关键字
列表:
public
protected
private
static
final
abstract
native
synchronized
volatile
enum
class
interface
package
extends
implements
import
try
catch
finally
throw
throws
transient
this
void
super
详细说明:
static
:- 作用范围: 属性 & 方法 & 代码块 & 类
- 类: 只可作为静态内部类,此时相当于一个外部类,且只能调用外部类的静态操作
- 属性: 类静态变量,不属于类的实例,可以在类未实例化时调用,通过 类名.方法名 的形式
- 方法: 静态方法不属于类的实例,只能使用静态变量和调用静态方法
- 代码块:
- 只会执行 一次
- 类加载 时期的调用
- 可含有多个静态代码块,编译代码时,按照定义的先后顺序合并到 clinit,然后依次执行
- 只能操作 静态变量
- 作用范围: 属性 & 方法 & 代码块 & 类
final
:- 作用范围: 属性 & 方法 & 类
- 类: 不可被继承
- 属性: 属性值一旦被赋值,则不可变
- 对于基本类型不可更改其数值,对于引用类型不可指向其他的对象
- 作用范围:
- 类静态变量
- 字段
- 局部变量
- 初始化时机:
- 编译期
- 常用于 基本数据类型 | String,确定后作为 常量 放入常量池
- 运行期
- 编译期确定其类型,运行期确定其值
- 编译期
- 方法: 不可被重写
- 作用范围: 属性 & 方法 & 类
abstract
:- 作用范围: 方法 & 类
- 方法: 抽象方法,不含具体实现,所在的类一定为 抽象类
abstract
方法不能与static
一起使用static
方法表示属于抽象类,在 类加载 期间就会执行,进行初始化,而abstract
方法里面什么也没有,必须子类实现,因此两者冲突
- 类: 抽象类,不能被实例化,只能被继承,不一定含有抽象方法
- 若子类没有实现 抽象类 的所有抽象方法,那其也必然是 抽象类
- 不含
abstract
方法的抽象类的作用:- 防止此类被实例化
- 方法: 抽象方法,不含具体实现,所在的类一定为 抽象类
- 作用范围: 方法 & 类
native
:- 调用本地方法,例如 C/C++,此时 程序计数器 的值为 undefined
- 可与任意 访问修饰符 | 关键字搭配,除了
abstract
native
修饰方法,必然有具体实现;而abstract
方法要求不能有实现,因此两者冲突
2) 数据类型
基本数据类型
名称 | 字节数 | 包装类 |
---|---|---|
boolean | - | Boolean |
byte | 🐣 | Byte |
char | 🐣🐣 | Character |
short | 🐣🐣 | Short |
int | 🐣🐣🐣🐣 | Integer |
float | 🐣🐣🐣🐣 | Float |
double | 🐣🐣🐣🐣🐣🐣🐣🐣 | Double |
long | 🐣🐣🐣🐣🐣🐣🐣🐣 | Long |
基本数据类型自动转型