Java static变量与代码块

static是用来修饰成员变量和成员方法,也可以形成静态static代码块。

被static修饰的成员变量和成员方法独立于该类的任何对象。也就是说,它不依赖类特定的实例,被类的所有实例共享。

只要这个类被加载,Java虚拟机就能根据类名在运行时数据区的方法区内定找到他们。因此,static对象可以在它的任何对象创建之前访问,无需引用任何对象

它方便了在没有创建对象的情况下使用,如math的使用。

特点:

package com.company;
 /*   case_01被所有使用的关键字共享
      case_02:可以使用类名调用
      case_03可以调用静态的成员方法
      case_04不可以调用非静态成员变量
      case_05不可以调用非成员方法
*/
public class StudentDemo02 {
    public static void main(String[] args) {
        Student1.graduateFrom = "xxx";//case_02
        Student1.study();
    }

}
class Student1 {
    String name;
    int age;
    static String graduateFrom;
    public static void study(){
        System.out.println(graduateFrom);
        sleep();//case_03
        //System.out.println(name); case_04
        //eat(); case_05

    }
    
    public static void sleep() {
        System.out.println("sleep");
    }
    public void eat() {
        System.out.println(graduateFrom);
    }
}    

 代码块:

它优先于主方法执行、优先于构造代码块执行,当以任意形式第一次使用到该类时执行。

该类不管创建多少对象,静态代码块只执行一次。

package com.company;

public class BlockDemo {
    static {
        System.out.println("BlockTest静态代码块执行");
    }
    
    {
        System.out.println("BlockTest构造代码块执行");
    }
    

    public BlockDemo(){
        System.out.println("BlockTest无参构造执行了");
    }
    
    public static void main(String[] args) {
        System.out.println("BlockTest的主函数执行了");
        Coder c = new Coder();
        Coder c2 = new Coder();
    }
}

class Coder {
    
    static {
        System.out.println("Coder静态代码块执行");
    }
    
    {
        System.out.println("Coder构造代码块执行");
    }
    
    public Coder() {
        System.out.println("Coder无参空构造执行");
    }    
    
}

执行结果

猜你喜欢

转载自www.cnblogs.com/crzhang/p/9967029.html