目录
类
种类
Javabean类
不写main方法的类
测试类
含有main方法的类,在该类中可以调用javabean类。
一个java文件中可以定义多个class类,但只能有一个类是public修饰,而且public修饰的类型必须成为代码文件名(实际开发中建议还是一个文件定义一个class类)。
工具类
私有化构造方法,不让外界新建它的对象,成员方法需要定义为静态方便调用。
类的初始化
下面name成员变量未赋值默认值,初始化为null,这一块初始化会和数组默认初始化规律一样。
public class Student {
String name;
public void study() {}
}
整数类型(byte、short、int、long):默认初始化值0。
小数类型(float、double):默认初始化值0.0。
字符类型(char):默认初始化值’\u0000’空格。
布尔类型(boolean):默认初始化值false。
引用类型(类、接口、数组、String):默认初始化值null。
构照函数
构造函数和js不同(js中固定名为constructor),它使用方法名和类名完全相同,没有返回值类型也没有void,不能带有return。
如果没有定义构造方法,系统将给出一个默认的无参数构造方法。已有构造方法则不会给出默认的构造方法。构造方法也支持重构。
新建对象的内存图
Student s = new Student();
s.study()
1.加载class文件(在方法区加载,只在该类被第一次new的时候加载,后面再new会直接读取方法区中的类)
2.申明局部变量 (栈内存)
3.在堆内存中开辟一个空间
4.默认初始化成员变量(属性名中未赋值的进行默认值的初始化),
5.显示初始化成员变量(属性名中有赋值的进行赋值初始化)
6.构造方法初始化
7.将堆内存中的地址值赋值给左边的局部变量(栈内存)
8.调用类的方法,调用的是指向方法区中Student类的方法。
static
可以修饰成员方法和成员变量。
被static修饰的成员变量叫静态变量,被该类所有对象共享,可以通过对象名和类名调用(js中只能通过类名调用)。
静态变量存储在静态区(堆内存中)是随类的加载而加载。因为可以通过类名调用,所以是优先于new 对象的出现。
静态方法中无this。
继承
Java只支持单继承(只有一个父类),但可以多层继承(父类也可以继续向上继承)。
Java中所有的类都直接或间接继承于Object(和js类似都继承与Object.prototype)。
子类只能访问父类中的非私有成员。
This
表示当前方法调用者的地址值,this()表示运行本类的构造方法
Super
父类存储空间,super()表示运行父类的构造方法
子类构造方法中未显式调用父类构造方法会默认调用父类中的无参构造方法(相当于第一行中插入了super()),再执行自己。
子类构造方法中未显式调用父类构造方法必须在第一行。
super不能连续调用( super.super错的)。
虚方法表
每个类都有自己的虚方法表,它为类中非private、非static、非final的方法,