标签:
java中的static
– 在一个Java类中,可以使用static关键字来修饰成员变量,该变量被称作静态变量
– 静态变量被所有实例共享,可以使用“类名.变量名”的形式来访问
– static关键字只能用于修饰成员变量,不能用于修饰局部变量,否则编译会报错,下面的Demo是违反语法的。
1 public class Student{ 2 public void study(){ 3 static int num=10;//错误的 4 5 } 6 7 }
--被static关键字修饰的方法称为静态方法
--同静态变量一样,静态方法可以使用“类名.方法名”的方式来访问,也可以通过类的实例对象来访问。
--在一个静态方法中只能访问用static修饰的成员,原因在于没有被
static修饰的成员需要先创建对象才能访问,而静态方法在被调用时可以不创建任何对象。
– 用static关键字修饰的程序块称为静态程序块
– 当类被加载时,静态代码块会执行,由于类只加载一次,因此静态代码块只执行一次
– 在程序中,通常使用静态代码块来对类的成员变量进行初始化
类中除了有成员变量、方法和构造方法,还可以使用程序块,所谓程序块就是由一对花括号({})包括的语句块。
在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 时并未执行静态初始化块。
标签:
原文地址:http://www.cnblogs.com/tudou-loveloli/p/5271683.html