• java 编译期常量


      今天在看书的时候遇到了一个不是很懂的名词,是在think in java 这本书的第七章讲final关键字时讲到的。然后自己在网上查了一下知道了一些。

      编译器常量就是:它的值在编译期就可以确定的常量。也就是说在编译的时候就已经为用到这些常量的地方赋好值了。下边这段程序可以很好地帮助我们找出哪些是编译期常量哪些不是。

    package com.wenge.compileTest;
    
    public class CompileTest{
        public static void main(String args[]){
    //        System.out.println(Data.i1);
    //        System.out.println(Data.i2);//initialization!
    //        System.out.println(Data.b1);//initialization!
    //        System.out.println(Data.b2);
    //        System.out.println(Data.s1);
    //        System.out.println(Data.s2);//initialization!
    //        System.out.println(Data.a); //initialization! 
    //        System.out.println(Data.e); //initialization!
            
        }
    }
    class Data{
      static{
          System.out.println("initialization!");
      }
      public static final int i1 = 0;
      public static final Integer i2 = 0;
      public static final Boolean b1 = true;
      public static final boolean b2 = true;
      public static final String s1 = "0";
      public static final String s2 = new String("0");
      public static final A a = new A();
      public static final Enum e = E.A;
    }
    class A{
     
    }
    enum E {
        A,B,C,D,E,F,G;
    }

      我们在main方法中一次只输出一个数据,其余的注释掉,然后我们可以通过看控制台有没有输出"initialization!"而判断输出的常量的类型是不是编译期常量。因为"initialization!"是写在静态代码块里的,所以如果只要CompileTest类的main方法用到Data类里的属性Data类里的静态代码块就会被执行从而输出"initialization!"。
    然后单独运行时是否输出"initialization!"已经在后边注释了。(有注释的就说明输出了)所以很容易可以从输出结果中得到结论:java中的编译期常量包括java八大基本类型和直接声明的string类型。什么是直接声明的string类型呢?就是没有通过new关键字声明的字符串(String str = "abc";)。

      当然了常量的前提是有final关键字修饰。

  • 相关阅读:
    oracle日志总结
    UIScrollView,contentOffset,contentInsert的各自特点和区别?
    js动态增加表格
    判断某个对象是不是DOM对象
    IOS 中frame与bounds的区别
    删除重复项,只取其中一条数据
    NSBundle
    React
    HTML5 postMessage 和 onmessage API 详解
    SonarQube
  • 原文地址:https://www.cnblogs.com/Vdiao/p/6040125.html
Copyright © 2020-2023  润新知