知识大杂烩

编译期常量与运行时常量的区别:

  public static final String str = "hello world!"; // 编译期常量(值在编译期就能确定)

       public static final String str1 = UUID.randomUUID().toString(); // 运行时常量(值在运行时才能确定)

  编译期常量:在编译的阶段,这个常量就会被存入到调用这个常量的方法所在的类的常量池当中,本质上,调用类并没有直接引用到定义常量的类,因此并不会触发定义常量的类的初始 化(甚至于我们可以把定义常量的类删除掉,即删除.class文件)

  例如编译期常量编译后如下图:常量hello word就存在于调用的类的常量池中了,而不是调用的时候再去定义常量的类中取值

  

  运行时常量:在编译阶段其值不能确定,所以值不会放到调用类的常量池中,这时在程序运行时,会导致主动使用这个常量所在的类,显然会导致这个类初始化

数组创建本质:

  对于数组实例来说,其类型是由JVM在运行期动态生成的,表示为[com.jqbai.Test(一元数组),[[com.jqbai.Test(二元数组)这种形式,动态生成的类型,其父类型就是Object,对于数组来说,JavaDoc经常将构成数组的元素为Component,实际上就是将数组降低一个维度后的类型 

  

       

猜你喜欢

转载自www.cnblogs.com/jqbai/p/10193621.html
今日推荐