数据类型:

  1. 基本数据类型

    数值型: byte[1],short[2],int[4],long[8] 存放整数
    
    字符型:char[2] 存放单个字符“a”或者单个汉子
    布尔类型: boolean[1] 存放true false
  2. 引用数据类型

    类(如: String)
    接口
    数组
    
    
  3. 浮点数在及其中存放的形式 浮点数=符号位+指数位+尾数位
  4. 字符类型的本质是整数 注意定义时用单引号,如果用双引号则是表示字符串

    例: char c = 'a', 输出则是97 即a对应的ASCII码的值 ;char c1 = 97 ,输出则是97
    

继承内存图

image.png

java动态绑定机制

当调用对象是方法的时候,该方法会和该对象的内存地址/运行类型绑定
当调用对象的属性时,没有动态绑定,哪里声明哪里使用

如下:如果注释B类的sum方法 则输出结果为30(因为调用的getI方法是B类中的方法而不是A类)

 如果注释了B类的sunm1方法,则输出结果为20,因为i是属性不具备动态绑定机制

image.png

静态的在类加载的时候就初始化

静态代码块

  1. 静态代码块的作用是对类进行初始化,而且它随着类的加载而加载,并且只会加载一次。如果是普通代码块,没创建一个对象就执行一次。
  2. 类加载的时候:

    a.创建对象实例的时候(new)
    b.创建子类的对象实例的时候父类也会被加载
    c.使用类的静态成员时(静态方法、静态属性)
  3. 普通代码块,在创建对象实例时,会被隐式调用,被创建一次就会调一次。如果使用类的静态成员时,普通代码块不会被执行,静态代码块会被执行
  4. 创建对象,在一个类调用的顺序

    a.静态代码块和静态属性初始化
    b.调用普通代码块和普通属性的初始化
    c.调用构造方法
  5. 构造方法的最前面其实隐含了super()和调用普通代码块,静态相关的代码块、属性初始化、在类加载时就执行完毕了,因此是优先于构造器和普通代码块执行的。
  6. 我们看一下创建一个子类对象时(继承关系),他们的静态代码块,静态属性初始化,普通代码块,普通属性初始化,构造方法的调用顺序如下
    ①父类的静态代码块和静态属性(优先级一样,按定义的顺序执行)
    ②子类的静态代码块和静态属性(优先级一样,按定义的顺序执行)
    ③父类的普通代码块和普通属性初始化(优先级一样,按定义的顺序执行)
    ④父类的构造方法
    ⑤子类的普通代码块和普通属性初始化(优先级一样,按定义的顺序执行)
    ⑥子类的构造方法
    静态代码块只能调用静态成员(静态方法、静态属性),普通代码块可以调用任意成员

内部类

内部类的分类:

定义在外部类局部位置上(比如方法内):
  1)局部内部类(有类名)
  2)匿名内部类(没有类名,重点)
定义在外部类的成员位置上:
  1)成员内部类(没有static修饰)
  2)静态内部类(用static修饰)

AHF_BL
1 声望0 粉丝

下一篇 »
Spring