Static
摘要:
Java 中static应用并不怎么广泛,编程中也尽量不建议使用static,作为全局变量,具备太多不稳定性,给后期代码整合带来隐患。本文主要综合网上一些资料整理关于static的基本用法与一些自己觉得有意思的例子。
1 基本用法
Static 修饰的对象,不依赖实例,加载于JVM的堆中,只有一份,由所有类共享。所修饰的对象访问权限无限制,可以为public,protect,private。
1) 修饰方法
Static方法调用推荐直接通过类名调用(类名.方法名),以区别普通方法。正因为static方法可随时调用,所以static方法中不能依赖于任何普通方法,普通变量。即使你想用,IDE也会提醒你把调用的方法,
变量加上static修饰符。
2) 修饰变量
Static变量访问推荐直接通过类名调用(类名.变量名),一般static变量值都固定,编程中推荐变量名全大写,方便后期识别。静态变量属于整个类,所以静态变量不能放在方法内部。
3) 修饰代码块
Static代码块自动执行,静态代码块的执行顺序如下:
1.父类的静态代码块
2.子类的静态代码块
3.父类的非静态代码块 (即int i=5)
4.父类的构造函数
5.子类的非静态代码块 (即int j=5)
6.子类的构造函数
验证请见例子二
4) 修饰类
Static修饰类,此类一定是内部类。Static内部类使用范围不大,方便类单元测试。静态内部类的创建不依赖外部类实例。
2 好玩的例子
例子一
1 public class Father { 2 3 public static void print() { 4 5 System.out.println("Father"); 6 7 } 8 9 } 10 11 public class Child extends Father { 12 13 public static void print() { 14 15 System.out.println("Child"); 16 17 } 18 19 public static void main(String[] args) { 20 21 Father child = new Child(); 22 23 child.print(); 24 25 } 26 27 }
输出结果:Father
1 public class Father { 2 3 public void print() { 4 5 System.out.println("Father"); 6 7 } 8 9 } 10 11 public class Child extends Father { 12 13 public void print() { 14 15 System.out.println("Child"); 16 17 } 18 19 public static void main(String[] args) { 20 21 Father child = new Child(); 22 23 child.print(); 24 25 } 26 27 }
输出结果:Child
例子二
1 public class Father { 2 3 static { 4 5 System.out.println("Father 静态块"); 6 7 } 8 9 int i = 5; 10 11 public Father() { 12 13 System.out.println("Father 构造"); 14 15 } 16 17 public void print() { 18 19 System.out.println("Father"); 20 21 } 22 23 } 24 25 public class Child extends Father { 26 27 static { 28 29 System.out.println("Child 静态块"); 30 31 } 32 33 int j = 5; 34 35 public Child() { 36 37 System.out.println("Child 构造"); 38 39 } 40 41 @Override 42 43 public void print() { 44 45 System.out.println("Child"); 46 47 } 48 49 public static void main(String[] args) { 50 51 Father child = new Child(); 52 53 child.print(); 54 55 } 56 57 }
输出结果:
Father 静态块
Child 静态块
Father 构造
Child 构造
Child
计划、执行、每天高效的活着学着