Java学习笔记之 static


说明:这只是本人的学习Java的个人心得与见解,分享出来,也算是自己的笔记。(本人小白,有错误的话望大神指出,不喜勿喷。-.-)

静态变量

– 在一个Java类中,可以使用static关键字来修饰成员变量,该变量被称作静态变量

– 静态变量被所有实例共享,可以使用“类名.变量名”的形式来访问

– static关键字只能用于修饰成员变量,不能用于修饰局部变量,否则编译会报错,下面的Demo是违反语法的。

public class Student{
      public void study(){
        static int num=10;//错误的

        }

}

静态方法

--被static关键字修饰的方法称为静态方法

--同静态变量一样,静态方法可以使用“类名.方法名”的方式来访问,也可以通过类的实例对象来访问。

--在一个静态方法中只能访问用static修饰的成员,原因在于没有被

static修饰的成员需要先创建对象才能访问,而静态方法在被调用时可以不创建任何对象。

静态程序块

– 用static关键字修饰的程序块称为静态程序块

– 当类被加载时,静态代码块会执行,由于类只加载一次,因此静态代码块只执行一次

– 在程序中,通常使用静态代码块来对类的成员变量进行初始化
•1、什么是程序块       

类中除了有成员变量、方法和构造方法,还可以使用程序块,所谓程序块就是由一对花括号({})包括的语句块。
•2、程序块的作用

在Java中,程序块的作用相当于完成一些初始化操作,常常在程序块实现对成员变量的初始化赋值。

普通程序块和静态程序块有以下区别:

 执行的顺序不同,静态程序块在编译即被执行且执行一次,而普通程序块只有在使用new运算符实例化对象被调用且执行一次;

 静态程序块只能访问类成员,而普通程序块既可以访问实例成员,也可以访问类成员。

下面开始详细的讲解与Demo

前提引入:
Java 中可以通过初始化块进行数据赋值

以Demo说明:

public class HelloWorld{
    String name;
    {
    name="love you ";

    }

}

在类的声明中,可以包含多个初始化块,当创建类的实例时,就会依次执行这些代码块。
>>如果使用 static 修饰初始化块,就称为静态初始化块。

需要特别注意:静态初始化块只在类加载时执行,且只会执行一次,同时静态初始化块只能给静态变量赋值,不能初始化普通的成员变量。

Demo:

public class StaticBlock{
    int num1;
    int num2;
    static int num3;
    //构造方法
    public StaticBlock(){
        num1=91;
        System.out.println("用构造方法完成num1的赋值");
    }
    //初始化块
    {
        num2=74;
        System.out.println("用初始化块完成num2的赋值");
   
    }
    //静态的初始化块 static
    static{
        num3=85;
        System.out.println("用静态的初始化块完成num3的赋值");
    }
    public static void main(String[] args){
        StaticBlock sta1=new StaticBlock();
        System.out.println("num1:"+sta1.num1);
        System.out.println("num2:"+sta1.num2);
        System.out.println("num3:"+num3);
        StaticBlock sta2=new StaticBlock();

       
    }
}

输出的结果为:

为什么会有这养的输出结果呢????

注意到输出的顺序了吗?

通过输出结果,我们可以看到:

程序运行时静态初始化块最先被执行,

然后执行普通初始化块,

最后才执行构造方法。

由于静态初始化块只在类加载时执行一次,所以当再次创建对象 hello2 时并未执行静态初始化块。

本文永久更新链接地址

相关内容