数据类型:
基本数据类型
数值型: byte[1],short[2],int[4],long[8] 存放整数 字符型:char[2] 存放单个字符“a”或者单个汉子 布尔类型: boolean[1] 存放true false
引用数据类型
类(如: String) 接口 数组
- 浮点数在及其中存放的形式 浮点数=符号位+指数位+尾数位
字符类型的本质是整数 注意定义时用单引号,如果用双引号则是表示字符串
例: char c = 'a', 输出则是97 即a对应的ASCII码的值 ;char c1 = 97 ,输出则是97
继承内存图
java动态绑定机制
当调用对象是方法的时候,该方法会和该对象的内存地址/运行类型绑定
当调用对象的属性时,没有动态绑定,哪里声明哪里使用
如下:如果注释B类的sum方法 则输出结果为30(因为调用的getI方法是B类中的方法而不是A类)
如果注释了B类的sunm1方法,则输出结果为20,因为i是属性不具备动态绑定机制
静态的在类加载的时候就初始化
静态代码块
- 静态代码块的作用是对类进行初始化,而且它随着类的加载而加载,并且只会加载一次。如果是普通代码块,没创建一个对象就执行一次。
类加载的时候:
a.创建对象实例的时候(new) b.创建子类的对象实例的时候父类也会被加载 c.使用类的静态成员时(静态方法、静态属性)
- 普通代码块,在创建对象实例时,会被隐式调用,被创建一次就会调一次。如果使用类的静态成员时,普通代码块不会被执行,静态代码块会被执行
创建对象,在一个类调用的顺序
a.静态代码块和静态属性初始化 b.调用普通代码块和普通属性的初始化 c.调用构造方法
- 构造方法的最前面其实隐含了super()和调用普通代码块,静态相关的代码块、属性初始化、在类加载时就执行完毕了,因此是优先于构造器和普通代码块执行的。
- 我们看一下创建一个子类对象时(继承关系),他们的静态代码块,静态属性初始化,普通代码块,普通属性初始化,构造方法的调用顺序如下
①父类的静态代码块和静态属性(优先级一样,按定义的顺序执行)
②子类的静态代码块和静态属性(优先级一样,按定义的顺序执行)
③父类的普通代码块和普通属性初始化(优先级一样,按定义的顺序执行)
④父类的构造方法
⑤子类的普通代码块和普通属性初始化(优先级一样,按定义的顺序执行)
⑥子类的构造方法
静态代码块只能调用静态成员(静态方法、静态属性),普通代码块可以调用任意成员
内部类
内部类的分类:
定义在外部类局部位置上(比如方法内):
1)局部内部类(有类名)
2)匿名内部类(没有类名,重点)
定义在外部类的成员位置上:
1)成员内部类(没有static修饰)
2)静态内部类(用static修饰)
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。