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 }
View Code

输出结果: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 }
View Code

输出结果: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 }
View Code

输出结果:

Father 静态块

Child 静态块

Father 构造

Child 构造

Child

计划、执行、每天高效的活着学着
原文地址:https://www.cnblogs.com/huxiaoyun90/p/3022350.html