java中static关键字

static可以修饰成员变量、成员方法,被修饰的成员属于类。被static修饰的成员变量、成员方法随类的加载而加载,只加载一次;存储在静态区;先于对象存在。

  • 修饰成员变量

    static修饰的成员变量,称为类变量。每个对象共享同一个类变量的值。任何对象都可以更改该类变量的值,但也可以在不创建该类的对象的情况下对类变量进行操作。类变量一般使用类名.变量名的方式访问。

    public class Test{
        public static void main(String [] args){
            Student.stuCount = 1;
            System.out.println("Total number of students " + Student.stuCount); // 1
            Student stu0 = new Student("jack");
            Student stu1 = new Student("tom");
            System.out.println("Total number of students " + Student.stuCount); // 3
        }
    }
    
    public class Student {
    	public static int stuCount;
    	private String name;
    	
    	public Student() {
    		stuCount += 1;
    	}
    	public Student(String name) {
    		this.name = name;
    		stuCount += 1;
    	}
    }
    
  • 修饰成员方法

    static修饰的方法,称为类方法(习惯称为静态方法)。静态方法一般使用类名.方法名的方式掉用

    // 在Student类中定义静态方法
    public static void show () {
    	System.out.println("Total number of students " + Student.stuCount);
    }
    

    注意:

    1. 静态方法可以直接访问类变量和静态方法
    2. 静态方法 不能直接访问普通成员变量或成员方法。反之,成员方法可以直接访问类变量或静态方法。
    3. 静态方法中,不能使用 this关键字。
  • 修饰代码块

    static修饰的代码块称为静态代码块。静态代码块定义在定义成员的地方。

    public class Test {
        static {
            System.out.println("静态代码块");
        }
    
        {
            System.out.println("代码块");
        }
    }
    
    public class Main {
        public static void main(String[] args) {
            new Test();
            new Test();
            // 静态代码 代码块 代码块
        }
    }
    

    静态代码块随着类的加载而执行,且只执行一次。执行优先与main和构造方法。
    非static代码块在类实例化之前执行,每次实例化都执行。

posted @ 2020-10-25 18:25  遥远的相似性  阅读(83)  评论(0)    收藏  举报