Java static变量与代码块

Posted crzhang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java static变量与代码块相关的知识,希望对你有一定的参考价值。

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

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

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

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

特点:

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);
    }
}    

 相关说明:由于静态方法不需要依赖任何对象就可以访问,所以在静态方法中不能使用非静态成员变量和方法,静态方法中也没有this关键字,因为它们都需要依赖对象而存在。

代码块:

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

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

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无参空构造执行");
    }    
    
}

执行结果:

技术分享图片
BlockTest静态代码块执行
BlockTest的主函数执行了
Coder静态代码块执行
Coder构造代码块执行
Coder无参空构造执行
Coder构造代码块执行
Coder无参空构造执行
View Code

 



以上是关于Java static变量与代码块的主要内容,如果未能解决你的问题,请参考以下文章

Java面向对象(OOP)--static修饰符(static变量static方法代码块和静态代码块创建和初始化对象的过程静态导入)

Java 核心基础之static静态代码块和静态方法

4Java中成员变量与局部变量

final与static关键字的区别?(skycto JEEditor)

《Java架构筑基》从Java基础讲起——深入理解Static

Java基础 -- 关键字Static和Final