01 static关键字
01_01 static修饰成员变量
【1】成员变量的分类及特点:
① 类变量:被static修饰,随类一起加载,在计算机中只有一份,被该类的所有对象共享。
② 实例变量(对象的变量):不被static修饰,属于每个对象,每个对象中都有一份。
【2】如何访问:
① 类变量:类名. (推荐) 或 对象名. (不推荐)
② 实例变量(对象的变量):对象名.
【3】讨论:为什么不能通过类名访问实例变量?答:如果通过类名访问实例变量,由于实例变量每个对象中都有一份,编译器并不知道到底访问哪个对象中的。
01_02 成员变量的执行原理
把调用main方法的Test类加载到方法区中 --》在栈区为main方法开辟栈帧空间 --》将Student类加载到方法区中,并检查学生类中有没有类变量,如果发现有类变量会立即把类变量加载到堆内存中去,学生类是可以找到类变量的 --》把类变量name的值修改成袁华 --》在main方法的栈帧中为引用s1开辟空间 --》在堆区为学生对象s1开辟空间,学生类中有为实例变量开辟空间,并且记住了类的地址 --》把学生对象s1的地址赋值给引用s1 --》通过s1中的地址找到学生对象s1发现name并不是实例变量后,通过类的地址找到学生类,再通过学生类找类变量name把值修改成马冬梅。
01_03 两种成员变量的应用场景
【1】类变量:
注意1:类变量一般使用public修饰,代表对外完全公开暴露,因为类变量数据只有一份,它的目的就是希望别人都来共享它访问它。
注意2:在自己类中访问自己的类变量可以省略前面的类名不写。
【2】实例变量:每个对象都要有一份且数据各不同。
01_04 static修饰成员方法
【1】成员方法的分类,特点,访问:
01_05 成员方法的执行原理
把调用main方法的Test类加载到方法区中 --》在栈区为main方法开辟栈帧空间 --》将Student类加载到方法区中,在学生类中找到printHelloHorld方法,发现这个方法由static修饰,是可以通过类名/对象名进行调用的,所以将执行打印功能 --》在main方法的栈帧中为引用s开辟空间 --》在堆区为学生对象s开辟空间,学生类中有为实例变量开辟空间,并且记住了类的地址 --》把学生对象s的地址赋值给引用s --》通过引用s中的地址找到s对象,通过类的地址找到学生类,在学生类中找到printHelloHorld方法,发现这个方法由static修饰,是可以通过类名/对象名进行调用的,所以将执行打印功能 --》通过引用s中的地址找到s对象,通过类的地址找到学生类,在学生类中找到printPass方法,发现这个方法是实例方法,只能通过对象名调用,而本次调用的确是通过对象进行调用的,所以执行的相关功能 --》在学生类中找到printPass方法,发现这个方法是实例方法,只能通过对象名调用,而本次调用是通过类名进行调用的所以报错。
01_06 类方法的应用场景
01_07 使用成员方法的注意事项
02 static的应用:代码块
实例代码块的应用:把构造器中的重复代码拿到实例代码块中。
03 static的应用:单例设计模式
04 搞懂main方法
【1】main方法是什么?main方法就是一个类方法。
【2】main方法是如何直接跑起来的呢?答:我们用java命令执行Java程序的时候,虚拟机会用main方法所在类的类名直接调用main方法,从而触发main方法的执行。
【3】main方法的参数:在执行java程序时可以给main方法进行传参(了解即可)
05 继承
05_01 概念、特点
【注意】:Java中的继承指的是子类能不能用。
05_02 继承的执行原理
05_03 继承的好处
【提问】:在上图代码中,怎样在子类中使用父类被封装的name数据?答:调用父类中的getName方法。
05_04 权限修饰符
05_05 单继承
05_06 Object类
【1】说明:Object类是所有类的祖宗类,要么直接继承,要么间接继承Object类,也就是说我们无论使用哪个类创建对象,它都是可以调用Object类中的相关方法的。
【2】进一步说明:如果我们在设计类时如果没有明确指定它继承于哪一个类那么这个类默认继承于Object类;如果有明确指定继承于哪一个类,由于java只能单继承,所以该类没有直接继承Object类,但它的父类或爷爷辈如果没有指定父类,则该类的父类或爷爷辈也是默认继承于Object类的,此时该类也将间接继承Object类。
05_07 方法重写
方法重写的应用实例:对象直接用sout输出的时候,默认会去调toString()方法(返回的是一个字符串)的,返回的是这个对象的地址,在开发中我们打印对象,更多的希望看到这个对象中的内容,那么我们可以在子类中去重写toString方法让返回结果为对象的内容。
05_08 子类中访问其他成员的特点
05_09 子类构造器的特点