Java SE笔记: static关键字(静态和成员)
- 成员是对象级别的,访问成员必须用“引用.”,如果用“类名.”访问会报错!
- 静态是类级别的,访问静态必须用类“类名.”,
如果用“引用.”也能访问,但是底层仍使用“类名.”
,并不会用到对象,如果用空引用访问静态,也不会报错,因为静态访问与对象无关!
- 何时使用静态:一般情况下工具类中的方法大部分都是静态方法!
- 静态方法中无法访问非静态变量。
如果用空引用访问成员则会发生空指针异常!
静态变量和成员变量
解释静态变量诞生的:
如下程序在堆栈中的结构如图,那么每个animal对象中都有一个属性“陆生”,那么将会造成内存空间的浪费,所以可以定义静态变量!

如下图,已定义static变量,该变量存放在方法区,属于类级别,所以用类名点访问!

什么时候变量声明成静态变量?
如果这个属性所有的对象都有,并且这个属性的值是相同的,则该属性声明成静态的属性。
成员变量:创建java对象的时候初始化。一般用getter和setter方法访问和修改!
静态变量:在类加载阶段赋值,并且只赋值一次。一般用类名点访问。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| public class StaticTest04{ public static void main(String[] args){ Animal a1 = new Animal("AAA",10); Animal a2 = new Animal("BBB",11); System.out.println(Animal.type); System.out.println(a1.type); Animal a3 = null; System.out.println(a3.type); } }
class Animal{ String name; int age; static String type = "陆生"; Animal(String name,int age){ this.name = name; this.age = age; } }
|
静态方法和成员方法
- static修饰的方法叫做静态方法
- 一般情况下工具类中的方法大部分都是静态方法。
- 静态方法不用创建对象也能直接访问该方法。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| public class StaticTest03{ public void m1(){ } public static void m2(){ System.out.println("m2...."); } public static void main(String[] args){ StaticTest03 st = new StaticTest03(); st.m1(); m2(); st.m2(); StaticTest03 s = null; s.m2(); } }
|
静态语句块和实例语句块
- 静态语句块:
- 在类加载阶段执行,并且只执行一次,并且是自上而下的顺序执行。
- 实例语句块:
- 每一次调用构造方法之前会执行一次。
- 实例语句块执行顺序也是自上而下。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| public class StaticTest02{ static{ System.out.println("A"); } { System.out.println("1"); } { System.out.println("2"); } { System.out.println("3"); } StaticTest02(){ System.out.println("StaticTest02无参数的构造执行!"); } public static void main(String[] args){ new StaticTest02(); new StaticTest02(); new StaticTest02(); } }
|