javaSE基础-02

JVM

javaSE基础-02_第1张图片

每个方法都有一个栈帧,栈帧中存放该方法的成员变量。

基本数据类型在堆中都有初始值

javaSE基础-02_第2张图片

GC:垃圾回收机制

javaSE基础-02_第3张图片

基本数据类型与引用数据类型

基本数据类型

八种,只有一块存储空间,在栈中存放的是具体的值

javaSE基础-02_第4张图片

引用数据类型

javaSE_02_05

注意基本数据类型和引用数据类型的值传递问题

匿名对象与构造器

匿名对象

  • 实例化一个对象,只是在堆中开辟一块新的内存空间,但是没有把该空间的地址赋值给任何一个变量

  • 因为没有名字,所以匿名对象只能使用一次,一般把匿名对象作为方法的实参传递

构造器

  • 完成对象的初始化工作
  • 名称与类名相同
  • 禁止有返回类型,也不能使用void作为返回值类型
  • 构造器不能使用return
  • 构造器其实有返回值,返回的是当前创建对象的地址
  • 构造器可以自定义和重载

Static

  • static修饰的内容,随着类的加载而加载

    当 JVM 把字节码加载到虚拟机中,static修饰的成员会自动加载到内存当中(方法区)

  • static修饰的内容,被该类型的所有对象所共享

  • static修饰的内容,可以直接使用类名来调用

代码块

静态代码块

和类一起加载(即加载字节码时调用),在main方法之前就执行了,只执行一次

可用来做一次性的初始化操作

static {
 name
}

初始化代码块

定义在类中,创建对象时加载,每创建一个对象都会调用一次,但是在构造方法之前加载(实际上就是放在构造函数中执行)

{

}

执行顺序:

静态代码块 > 初始化代码块 > 构造方法


  1. 类的加载时间:当第一次创建该类对象的时候,加载到 JVM 中,在加载时会执行static
  2. 字段初始化问题
    • 静态字段:在静态代码块中初始化
    • 非静态字段:在构造函数中初始化

Final关键字

  • 修饰

    字段:该字段不能再去被修改

    方法:子类不能再去覆盖该方法

    类:该类就不能再被继承

  • final修饰字段时,必须手动设置初始值

  • final修饰变量时,就该表一个常量,全部用大写字母命名

  • final可以在局部代码块中使用

  • 如果final修饰的是基本数据类型,代表值不能再被修改 (String除外)

  • 如果final修饰的是引用数据类型,代表地址不能再被修改 (String除外)

抽象 abstract

抽象方法

  • 抽象类中的方法只有方法名,没有方法的实现
  • 抽象方法不能是私有的private,不能用final修饰,不能用static
  • 抽象方法必须在抽象类中
  • 抽象类中也可以写普通方法
  • 抽象类有构造函数

抽象类

  • 抽象类不能创建对象,只能靠子类去实现方法
  • 抽象类当中,可以有抽象方法,也可以有非抽象方法(给子类调用使用)
  • 有构造器,但是构造器不能私有
  • 不能使用final关键字

接口

  • 接口中没有构造器
  • 接口不能被实例化创建对象
  • 接口中定义的变量,都是全局静态常量
  • 接口中定义的方法都是公共的抽象的方法
  • 接口中的方法没有方法体,必须要被重写
  • 接口可以多继承(extends),但是不会去覆盖父接口的方法

抽象与接口的异同

相同点:

  • 都是被其他类继承或者实现
  • 都不能实例化
  • 都可以定义抽象方法,定义的抽象方法子类都必须得覆盖

不同点:

  • 接口没有构造器,抽象类当中有
  • 抽象类可以包含抽象方法和普通方法
  • 接口只能定义抽象方法,不能有普通方法(java8以后可以有)
  • 接口中默认成员变量 public static final 变量 ----> 静态常量; 抽象类中 默认的权限
  • 接口中方法 public abstract 方法名; 抽象类 默认的权限

内部类

实例内部类

  • 属于对象的内部类,不属于类的,不适用static修饰的内部类

  • 在内部类当中可以直接访问外部类当中的成员

  • 外部类不能直接访问内部类当中的成员

  • 变量的访问原则:就近原则

  • 在内部类当中不能有静态的成员

    javaSE基础-02_第5张图片

静态内部类

  • 在内部类前面加上static

  • 不需要创建外部对象

  • 没有外部类的引用

  • 可以访问外部类的静态成员与普通变量

  • 访问静态内部类中的静态成员 Outter.Inner.color

  • 静态内部类当中可以定义静态成员,也可以定义非静态成员

    javaSE基础-02_第6张图片

    javaSE基础-02_第7张图片

局部内部类

定义在方法中的类

  • 不能使用一些修饰符 public private …
  • 局部内部类只能在定义的方法当中使用
  • 局部内部类当中不能包含静态变量
  • 局部内部类当中可以包含局部变量,使用的局部变量本质上是final 常量

匿名内部类

没有名字的局部内部类

  • 没有构造器

  • 只使用一次的时候 ,去使用匿名内部类

  • new 父类的构造器 或 接口() {

    内部写的代码(new的时候就会自动执行)

    }

    javaSE基础-02_第8张图片

枚举

javaSE基础-02_第9张图片

定义

枚举:表示一个事件的固定状态

java枚举:

  • 是一个特殊的类,多个常量对象的集合,其实是继承了Enum类
  • 私有化了构造器,不能再创建对象
  • 定义了两个静态常量和一个存储所有常量的数组
  • 常量的值其实就是创建的对象,把所有的常量都放在了数组中

[修饰符] enum 枚举的名称 {

​ 常量1,常量2,常量3 …

}

public enum WeekDay{
    MONDAY,TUESDAY,WENDESDAY,THURSDAY,FRIDAY,SATURDAY,SUNDAY
}

使用

WeekDay.MONDAY

你可能感兴趣的:(编程语言)