🕐 Java 类

吞佛童子2022年6月9日
  • Java
  • 基础
大约 4 分钟

🕐 Java 类

1. 访问权限

  • private : 只能被同一包下的同一类访问
  • default : 只能被同一包下的类访问
  • protected : + 能被不同包下的子类访问
  • public : 所有包下的类均可访问

2. 构造函数

1) 调用时间

  • 在新对象实例化时被调用

2) 特点

  1. 方法名与类名相同
  2. 无返回值
  3. 可以重载,不可子类重写

  • 在没有自定义引入类的构造方法时,类编译时自动生成一个无参构造函数;
  • 当有构造方法时,无论是否有参,均不会自动生成无参构造函数。

3. 内部类

1) 成员内部类

  • 成员内部类看起来像是外部类的一个 成员,可以使用 privatepublic 等访问限制符修饰

① 静态内部类

  • 编译完成后 没有外围类的对象的引用
  • 不依赖于外围类的对象
  • 不能使用外围类的 非 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

基本数据类型自动转型


上次编辑于: 2022/10/10 下午8:43:48
贡献者: liuxianzhishou