zoukankan      html  css  js  c++  java
  • Java 关键字static final使用总结

      Static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,被static修饰的成员变量和成员方法独立于该类的任何对象。
    也就是说,它不依赖类特定的实例,被类的所有实例共享。只要该类加载,JVM虚拟机就能根据类名在运行时数据区的方法区内找到他们。因此,static对象可以在它的任
    何对象创建之前访问,无需引用任何对象。
    1、
    static修饰类的成员方法或者成员变量,我们通常称该方法是静态方法,该方法是静态变量;
    若用public修饰static成员方法或者成员变量,表示该方法或该变量是全局的,可以在其他类中通过类名直接调用;
    若用private修饰static成员变量,表示该变量只能在该类的成员方法中使用,并且可以在该类的静态代码块中使用;
    在静态方法或者静态代码块中只能调用静态变量,但在非静态方法或者代码块中可以调用静态和非静态的变量。
    2、静态代码块 非静态代码块 构造函数的加载顺序
        静态代码块,在虚拟机加载类的时候就会加载执行,而且只执行一次
        非静态代码块,在创建对象的时候(即new一个对象的时候)执行,每次创建对象都会执行一次
     1 public class StaticTest {
     2     static {
     3         System.out.println("static function...");
     4     }
     5     {
     6         System.out.println("unstatic function...");
     7     }
     8     public StaticTest(){
     9         System.out.println("construct function...");
    10     }
    11     public static void main(String[] args) {
    12         new StaticTest();
    13     }
    14 }

        运行结果:    

        所以这三者的加载顺序是 静态代码块>非静态代码块>类构造函数

        注:非静态代码块在不new类的时候是不是执行的。

          如果有多个静态代码块,执行顺序是按照代码块的先后顺序执行。

    2、静态变量

      

    public class StaticTest {
    
        static String a="string-a";
        static String b;
        String c = "string-c";
        String d;
        static{
            System.out.println("----------------------------");
        }
        static {
            System.out.println("static function...");
            privateStaicString("befor static");
            b="string-b";
            privateStaicString("after static");
        }
        {
            System.out.println("unstatic function...");
            privateStaicString("befor unstatic");
            b="string-b";
            privateStaicString("after unstatic");
        }
    
        public StaticTest(){
            System.out.println("construct function...");
            privateConstructtring("befor construct");
            d="string-d";
            privateConstructtring("after construct");
        }
        public static void privateStaicString(String title) {
              System.out.println("---------" + title + "---------");
              System.out.println("a="+a);
              System.out.println("b="+b);
        }
        public void privateConstructtring(String title) {
              System.out.println("---------" + title + "---------");
              System.out.println("a="+a);
              System.out.println("b="+b);    
              System.out.println("c="+c);
              System.out.println("d="+d);
        }
        public static void main(String[] args) {
            new StaticTest();
        }
    }

      运行结果:        

    3、static和final一块使用

      static final用来修饰成员变量和成员方法,可简单理解为“全局常量”!

        (1)对于变量,表示一旦给值就不可修改,并且通过类名可以访问

        (2)对于方法,表示不可覆盖,并且可以通过类名直接访问。

      

  • 相关阅读:
    gc buffer busy/gcs log flush sync与log file sync
    给Oracle年轻的初学者的几点建议
    Android 编程下帧动画在 Activity 启动时自动运行的几种方式
    Android 编程下 Touch 事件的分发和消费机制
    Java 编程下 static 关键字
    Java 编程下 final 关键字
    Android 编程下模拟 HOME 键效果
    Why Are Thread.stop, Thread.suspend, Thread.resume and Runtime.runFinalizersOnExit Deprecated ?
    Extjs4 大型项目目录结构重构
    [转]SQLServer 2008 允许远程连接的配置方法
  • 原文地址:https://www.cnblogs.com/parryyang/p/5329929.html
Copyright © 2011-2022 走看看