浅谈Java中的常量池

图解

一、常量池分类

Java中的常量池分为:Class文件常量池、运行时常量池、全局字符串常量池、基本类型包装对象常量池

1.1Class文件常量池

class文件是一组以字节为单位的二进制数据流,在java代码的编译期间,我们编写的Java文件就被编译为.class文件格式的二进制数据存放在磁盘中,其中就包括class文件常量池,class文件常量池在在编译阶段就已经确定。

既然是常量池,那么里面存放的肯定是常量,那么什么是《常量》呢?class文件常量池主要存放两大常量:字面量和符号引用

字面量:

文本字符串,月就是我们经常声明的:public String s = "abc";中的"abc"

用final修饰的成员变量,包括静态变量、实例变量和局部变量

而对于基本类型数据(甚至是方法中的局部变量),也就是private int value = 1;常量池只保留了他的字段描述I和字段的名称value,他们的字面量不会存在与常量池。

符号引用:

符号引用主要涉及编译原理方面的概念,包括下面三类常量:

类和接口的全限定名

字段的名称和描述符,字段也就是类或者接口中声明的变量,包括类级别变量和实例级的变量

方法中的名称和描述符

也就是参数类型和返回值

1.2运行时常量池

运行时常量池的作用是存储java class文件常量池中的符号信息,运行时常量池中保存着一些class文件中描述的符号引用,同时在类的解析阶段还会将这些符号引用翻译成直接引用(直接指向实例对象的指针,内存地址),翻译出来的直接引用也是存储在运行时常量池中。

运行时常量池相对于class常量池一大特征就是具有动态性,java规范并不要求常量只能在运行时才能产生,也就是说运行时常量池的内容并不全部来自class常量池,在运行时可以通过代码生成常量并且将其放入到运行时常量池中,这种特性备用的最多的就是String.intern()。

1.3全局字符串常量池

全局字符串常量池存在于方法区

1.4 基本类型常量池

Java中基本类型的包装类大部分都实现了常量池技术,这些类Byte,Short,Integer,Long,Character,Boolean,另外两种浮点数类型的包装类则没有实现。另外上面这五种整型的包装类也只是在对应值小于等于127时才可使用对象池,也就是对象不负责创建和管理大于127的这些类的对象。

转载于

这一次,彻底弄懂java中的常量池 - 掘金

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Java的BorderLayout是一种常用的布局管理器,它将容器分为5个区域:北、南、东、西和间。在使用BorderLayout时,我们可以通过设置组件的位置来确定它们在容器的位置。 下面是一个简单的例子,演示如何使用BorderLayout: ``` import java.awt.BorderLayout; import javax.swing.JButton; import javax.swing.JFrame; public class BorderLayoutExample { public static void main(String[] args) { JFrame frame = new JFrame("BorderLayout Example"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JButton button1 = new JButton("North"); JButton button2 = new JButton("South"); JButton button3 = new JButton("East"); JButton button4 = new JButton("West"); JButton button5 = new JButton("Center"); frame.add(button1, BorderLayout.NORTH); frame.add(button2, BorderLayout.SOUTH); frame.add(button3, BorderLayout.EAST); frame.add(button4, BorderLayout.WEST); frame.add(button5, BorderLayout.CENTER); frame.pack(); frame.setVisible(true); } } ``` 在这个例子,我们创建了一个JFrame,并在其添加了5个JButton。使用BorderLayout将它们放置在窗口的不同位置。在上面的代码,我们将button1放置在北面,button2放置在南面,button3放置在东面,button4放置在西面,button5放置在心。 需要注意的是,当我们在使用BorderLayout时,如果某个位置没有被占用,那么它将会自动被设置为空。另外,如果我们在同一个位置添加了多个组件,那么后添加的组件将会覆盖先添加的组件。 总之,BorderLayout是一个非常常用的布局管理器,可以帮助我们轻松地将组件放置在容器的不同位置。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值