Java study notes (11)-static static modifier

static

关键字,用来修饰属性,方法,类,代码块
方法区中有静态常量池,首先加载,核心内库再将static类加载进去.
方法区中有静态区,将main方法加载到静态区,在静态区存储,静态static关键字修饰的变量只有一个地址,不管创建多少对象,不同对象保存的地址都是同一个,因此新创建的对象会覆盖上面的对象。
类加载后不会移除,直到整个程序运行到结果。
静态变量是随着类加载被加载到方法区的静态区当中,直到类被移除才会释放。
static修饰变量时的使用环境 
	1.如果每个对象的特征点不一样不适合
	2.如果每个对象的特征值都一样,则可以使用static来进行修饰
	3.一般情况下都是用类名来调用静态变量的
	4.构造代码块中不可以定义静态变量(静态变量在类加载时就要初始化,构造代码块在创建对象时执行)
	5.在构造方法中不可以定义静态变量,同上。
	6.在构造代码块和构造方法中可以修改静态变量的值。
静态方法 static修饰的方法
生命周期 随着类加载而被加载到方法区的静态区中,被调用时才开始运行程序。
注意
	1.静态方法中不能定义静态变量,因为类加载已经完成。程序还不执行。矛盾。
	2.静态方法中不能够直接调用非静态方法。静态方法在加载类时就已经加载在方法区静态区,而非静态方法必须得通过new之后才能调用,也就是创建内存区之后运行,静态方法可以直接用类调用,二者矛盾。
	3.静态方法中不能够使用super this 关键字。二者都是代表对象,静态中在类加载使用,不能够创建对象。
	4.main方法中不能使用this和super关键字 因为它是静态方法。
	5.静态方法可以进行方法重载
	6.子类能继承父类的静态方法
	7.静态方法不可以重写——因为类加载,静态方法的加载和类相关
静态代码块
			static{//类在真正被使用时,会使用静态代码块,仅执行一次。
				代码块;
			}
class Person2{
    
    
 
 String name;
 int age;
 static char gender;
 public void eat() {
    
    
  System.out.println("吃东西。。。。。。");
 }
}
public class StaticDemo {
    
    
 public static void main(String[] args) {
    
    
  Person2 p = new Person2();
  p.age = 10;
  p.name = "胡哥哥";
  p.gender = '男';
  p.eat();

 System.out.println(p.age +p.name+p.gender);
  Person2 p1 = new Person2();
  p1.age = 10;
  p1.name = "胡姐姐";
  p1.gender = '女';
  p1.eat();
  
  System.out.println(p1.age +p1.name+p1.gender);
  System.out.println(p.age +p.name+p.gender);
 }
}
运行结果
吃东西。。。。。。
10胡哥哥男
吃东西。。。。。。
10胡姐姐女
10胡哥哥女//注意static 修饰的变量被覆盖了

Guess you like

Origin blog.csdn.net/qq_42351519/article/details/111147333