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)对于方法,表示不可覆盖,并且可以通过类名直接访问。

      

  • 相关阅读:
    按学生成绩排序
    错误分析:floating point formats not linked
    学生成绩等级统计
    两个链表按升序合并
    js随机生成hex色值
    WEB监控系列第一篇:web监控搭建——graphite+statsd(单机搭建)
    WEB监控系列第四篇:statsd指南
    WEB监控系列第三篇:graphite指南
    安装Fedora 15后需做的25件事情
    《python tutorial》python 学习第二天
  • 原文地址:https://www.cnblogs.com/parryyang/p/5329929.html
Copyright © 2011-2022 走看看