Java之常量的概念

零基础学Java

Java学习交流 : V:study_51ctofx

什么是常量

常量:程序运行中,固定不变的量

两种表现形式:
字面常量和final修饰的常量

public static void main(String[] args){
   //其中 1 为字面常量,固定不变的量
   int a = 1;
   //或者这里的 1 也是字面常量
   System.out.println(1);
   
   //第二种final修饰的常量
   final int b = 1;
   final int c;
   c = 1;
   c = 2;//此时代码会报错,final修饰的变量只能被赋值一次,不能被修改
   
   //上面的b和c通过final修饰后,不允许被修改,因此是固定不变的量
}

常量的分类

字符串常量、小数常量、整数常量、字符常量、布尔常量(true、false)、空常量(null);

public static void main(String[] args){
  //字符串常量,双引号内允许一个或者多个字符
  System.out.println("study_51ctofx");
  //小数常量
  System.out.println(3.14)
  //整数常量
  System.out.println(1);
  //字符常量,单引号内允许一个字符,\u0000(Unicode编码), 表示一个空白字符
  System.out.println('a');
  System.out.println('\u0000');
  //布尔常量
  System.out.println(true);
  //空常量
  System.out.println(null);
}

了解下常量池

常量池是为了避免频繁的创建和销毁对象而影响系统性能,其实现了对象的共享,同时节省内存开销。
例如字符串常量池,在编译阶段就把所有的字符串文字放到一个常量池中。
常量池一般分:Class常量池(静态常量池)、运行时常量池、字符串常量池

Class常量池:
当java文件被编译成class文件之后,会在class文件中生成我们所说的class常量池,class文件中除了包含类的版本、字段、方法、接口等描述信息外,还有一项信息就是常量池(constant pool table),用于存放编译器生成的各种字面量(文本字符串、被声明为final的常量、基本数据类型的值)和符号引用(类和接口的全限定名、字段的名称和描述符、方法的名称和描述符)。

运行时常量池:
当类加载到内存中后,jvm就会将class常量池中的内容存放到运行时常量池中,在上面我也说了,class常量池中存的是字面量和符号引用,也就是说他们存的并不是对象的实例,而是对象的符号引用值。而经过解析(resolve)之后,也就是把符号引用替换为直接引用,解析的过程会去查询字符串常量池,也就是我们上面所说的string pool,以保证运行时常量池所引用的字符串与字符串常量池中所引用的是一致的。

  符号引用:在编译时,java类并不知道所引用的类的实际地址,
  因此只能使用符号引用来代替。
  比如org.simple.People类引用了org.simple.Language类,
  在编译时People类并不知道Language类的实际内存地址,
  因此只能使用符号org.simple.Language(假设是这个,
  当然实际中是由类似于CONSTANT_Class_info的常量来表示的)
  来表示Language类的地址。

  直接引用:直接引用可以是直接指向目标的指针

字符串常量池(string pool):
字符串常量池里的内容是在类加载完成,经过验证,准备阶段之后在堆中生成字符串对象实例,然后将该字符串对象实例的引用值存到string pool中(记住:string pool中存的是引用值而不是具体的实例对象,具体的实例对象是在堆中开辟的一块空间存放的)。string pool在每个HotSpot VM的实例只有一份,被所有的类共享。在jdk1.8后,将String常量池放到了堆中。

动动手练习题

Java题库在线答题:www.51ctofx.com

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值