1.加上static的属性是类的静态属性
--创建模板类Person并定义俩个变量
--创建俩个对象并输出对应变量值
--探究结果为:张三、李四、男、女?
--结果为:
--但是把修饰sex的static去掉
--结果就转为:
--为什么?
引出概念图
--static修饰的属性在共享区内,即各个对象共用的公式
--堆内存内存储的为非static修饰的属性
--而由代码可只,共享的sex属性,输出值由‘男’转变为‘女’
--换句话说,即在static的修饰下,sex的输出值总是为最后一次定义的值
--这里男女的输出值就对换了,因为最后一次定义的sex输出值为‘男’
2.特点:
@static修饰的类属性的访问可以通过:类名.类属性,还可以通过对象来访问
--即可以直接自主定义输出,无视static的修饰
--但是,因为这是在后文定义的,可以自主输出,如果在前面跟其他person属性一起定义,则输出结果仍参照static共享区原则
--所以static修饰的属性输出值也得考虑先后顺序
--因为name属性没有被static修饰,所以无法直接通过类名.属性来访问
-static修饰的属性,可以通过【类名.属性名】来操作,
而其他普通(非static)属性,得先new一下,即通过【对象.属性名】来操作
- static修饰的属性在共享区
- 非static修饰的属性在堆内存
--编译器也会给我们提示,person1/2.sex,可以直接通过类名.属性调用,不需再new
@static修饰的类属性在当前的class文件加载到 jvm的时候就被初始化
@当jvm销毁了这个类,那么这个类的static属性也被销毁
②方法上:1.语法:
public static(返回值) 方法名(数据类型 变量){
方法体
return 结果}
--首先创建俩个语法,区别是有无static修饰
2.static修饰的方法是静态方法,可以直接通过【类名.方法名】调用
同理,非static修饰的方法,只能通过【对象.方法名】调用
③注意点:
1.类方法初始化很早,类被jvm加载后,就初始化了类方法,而普通方法(对象的方法)也加载进入了jvm,但是要等到对象被实例化后,这个方法才能被使用
2.普通方法中访问该属性时,隐藏了this,如果没有实例化,这个this就不存在
--例如
--this是隐藏的,不主动写出来就不会输出
--static修饰的,里面没有this
3.static修饰的方法不能访问static修饰的类属性,即类方法不能访问对象非static修饰的属性,也不能调用非static修饰的方法
--static修饰的方法只能使用static修饰的成员变量(属性)
--即因为static修饰了sex,所以sex是现在式,现在即可调用
--而name没有static修饰,所以name是未来式,得先new才能使用
4.对象方法可以访问类的所有属性和方法
④静态代码块1.语法:
--例如在模板Person定义一个静态代码块
--任意执行后,static都会输出
2.静态代码块主要用于初始化资源
3.静态代码块在main之前执行
--先输出static代码块
--只输出一次



