this关键字:
内存图解:
this语句的第二个功能:this也可以在构造函数中调用其他构造函数。
注意:只能定义在构造函数的第一行,因为初始化动作要先执行(也就是java的规则,以后面的初始化规则为主,省的覆盖)
一般函数不能调用构造函数,但是构造函数可以调用一般函数,构造函数也可以调用其他构造函数,就用到了this语句。
this只要方法当中用到了本类对象全是this来表示对象。
Static关键字:
1,数据共享 static 修饰共享数据。
静态数据 可以被对象调用,也可以直接被类名进行调用:如图:
static的特点:
1,static是一个修饰符,用于修饰成员。
2,static修饰的成员被所有的对象所共享
3,static优先于对象存在,因为static的成员随着类的加载就已经存在了
4,static修饰的成员多了一种调用方式,就是可以直接被类名所调用。类名.静态数据
5,static修饰的数据是共享数据,对象中存储的是特有数据。
静态变量(类变量)和成员变量(实例变量):如图
成员变量和静态变量的区别?
1, 两个变量的生命周期不同
成员变量随着对象的创建而存在,随着对象的被回收而释放。
静态变量随着类的加载而存在,随着类的消失而消失。
2, 调用方式不同
成员变量只能被对象调用。
静态变量可以被对象调用,还可以被类名调用。
3,别名不同。
成员变量也称为实例变量
静态变量成为类变量
4,数据存储的位置不同
成员变量数据包储存在堆内存的对象中,所以也叫对象的特有数据。
静态变量数据储存在方法区(共享数据区)的静态区,所以也叫对象的共享数据。
(寄存器(供给cpu用的内存),本地方法区(调用系统底层的内容的),方法区,堆内存,栈内存)
静态使用的注意事项:
1,静态方法只能访问静态成员。(静态先存在,非静态是随着对象的存在而后存在的)如图:
2, 静态方法中不可以使用this和super关键字。
3,主函数是静态的。
静态主函数调用非静态方法:
调用show有两种方式1,用类名.show,2用对象.show。就解决了这个问题
静态前面省略的是类名,非静态前面省略的是this 如图:country是属于类的 本类使用本类静态成员需要使用名字吗,可以省略 省略的是类名(Person)
主函数特殊之处:
1,格式是固定的
2,被jvm所识别和调用。
public:因为权限必须是最大的。
static:不需要对象的,直接用主函数所属类名调用即可。(虚拟机直接用类名进行调用主函数)
void:主函数没有具体的返回值。
main:函数名,不是关键字,只是一个jvm识别的固定的名字。
String[] args:这是主函数的参数列表,是一个数组类型的参数,而且元素都是字符串类型。
内存图解:
栈内存,堆内存,方法区(非静态和静态)
静态什么时候用:如图:
静态代码块:
随着类的加载而执行,而且只执行一次。
作用:用于给类进行初始化。
有的类不需要对象,就不用构造函数进行初始化,就用静态代码块进行初始化(这种类里边一般全都是静态属性)
如图:
构造代码块:可以给所有对象进行初始化。生成一个对象执行一次。
构造函数:是给对应的对象进行针对性的初始化。
静态代码块:是给类进行初始化的:随着类的加载,而存在。并且只执行一次。
如图:
该类中全是静态方法,不需要创建对象,就可以将本类的构造器私有化,别人就创建不了对象。如图: