java中static详解

Java中static(随着类的出现而出现):

  1. 适用范围:可以修饰变量和方法

  2. 静态(static)修饰如下:

        a.变量:称为类变量、静态变量

        b.方法:称为类方法、静态方法

        c.代码块:称为静态代码块

    3.特点:

        a.随着类的加载而加载

public class Demo {
//创建一个类,定义一个静态变量,一个实例变量
	
	String name="赵丽颖";
	static String sex="男";

//	在mian方法里面调用这两个变量是不一样的
	public static void main(String[] args) {
//		静态变量可以通过类调用也可以通过对象调用,而实例变量只能通过对象调用
     
     System.out.println(Demo.sex);
     Demo demo=new Demo();
     System.out.println(demo.sex);
    System.out.println(demo.name);
	}

}

         b.优先于对象存在   (为创建对象的时候就已经存在)

         c.被类的所有对象共享(静态变量随着类的加载出现,全局中类只会被加载一次,静态会被所有对象共享)

 
public class Demo {
//创建一个类,定义一个静态变量,一个实例变量
	static int age=18;

     int a=10;

	public static void main(String[] args) {
//	静态变量是被所有对象共享的,实例对象是每个对象里面都是独立的
//		demo1,demo2对age都进行了修改,以最终修改为主
     
     Demo demo1=new Demo();
     demo1.age=22;
     demo1.a=5;
     Demo demo2=new Demo();
     demo2.age=30;
     demo2.a=50;
     System.out.println(demo1.age);
     System.out.println(demo1.a); 
     System.out.println(demo2.age);
     System.out.println(demo2.a);
	}

}
 
d.可以通过类名调用

4.类的成员变量可以分为以下两种:

  1. 静态变量(或称为类变量),指被 static 修饰的成员变量。
  2. 实例变量,指没有被 static 修饰的成员变量。

5. 注意事项:

      a.在静态方法中不可以使用this关键字(静态方法随着类的出现而出现,this指向的是当前对象,类出现时对象还没有出现,所以不能用this)
      b.静态方法只能访问静态的成员变量和静态的成员方法(静态方法随着类的出现而出现,成员变量,成员方法需要对象的调用,类出现时对象还没有出现)
      c.子类不能重写父类中含有static,final,private修饰的方法
 
6.静态变量和成员变量的区别:
   a. 所属不同
         静态变量属于类,所以也称为为类变量
         成员变量属于对象,所以也称为实例变量(对象变量)
   b. 内存中位置不同
         静态变量存储于方法区的静态区(常量池)
        成员变量存储于堆内存
   c.内存出现时间不同
         静态变量随着类的加载而加载,随着类的消失而消失
         成员变量随着对象的创建而存在,随着对象的消失而消失
   d.调用不同
          静态变量可以通过类名调用,也可以通过对象调用
          成员变量只能通过对象名调用

7.代码块

  • 定义:在Java中,使用{}括起来的代码被称为代码块,根据位置和声明的不同,可以分为局部代码块,构造代码块,静态代码块,同步代码块。
    • 局部代码块在方法中出现;限定变量生命周期,及早释放,提高内存利用率
    • 构造代码块类中方法外出现;多个构造方法方法中相同的代码存起,每次调用构造都执行,并且在构造方法前执行(相当于构造方法的初始化)
    • 静态代码块在类中方法外出现,加了static修饰在类中方法外出现,并加上static修饰;用于给类进行初始化,在加载的时候就执行,并且只执行一次
  • 执行顺序:静态代码块>构造代码块>构造方法
    public class Demo {
    
    	static 
    	{
    	System.out.println("Demo 静态代码块");
    	}
    
    	{
    	System.out.println("Demo 代码块");
    	}
    	
    	public Demo()  {
    	System.out.println("Demo 构造方法");
    	}
    	}
    
    public class Test {
    
    	static
    	 {
    	 System.out.println("我是静态代码块");
    	 }
    	public static void main(String[] args) {
    	 System.out.println("我是main方法");
    	Demo demo1=new Demo();
    	Demo demo2=new Demo();
    	
    	 }
    	
    	
    }	 
    	

posted @ 2022-09-24 16:41  小小邢  阅读(110)  评论(0)    收藏  举报