04.jvm常量池01
创始人
2024-01-22 00:36:12

1.字段的使用

CONSTANT_Fieldref_info{
u1 tag;
u2 class_index; //top/jamsee/MyStu,指向Class_info里面看
u2 name_and_type_index; // 指向CONSTANT_NameAndType_info指向utf-8常量,就是只记录一个符号在里面然后层层指向
//也分为 name 和type , }

   String name;//没有使用(赋值也是),不进常量池private String str1="aa"+name;//使用了进常量池,和修饰符无关static String str2="aaa";//进final String="vvv";//进static final String="vvv";//不进{int a=10;//局部变量不可以}static{boolean b=true;//不可以}public void fun1(){int a=10;//不可以}Person person=new Person();int aa=person.aa;//用另外一个类赋值也可以(使用其他类变量),但是这个类不能为 static final//在类内,方法体里面 int cc=person.aa;//aa也可以存在,但是cc不可以(算另外一个类的字段算本类的字段)

2.方法常量(都要调用才进常量池)

CONSTANT_Methodref_info{
u1 tag;
u2 class_index;//指向接口名 java.lang.Object
u2 name_and_type_index;//名称和构造方法返回值 :()V }

1.默认调用父类无参构造方法 :()V
//自己写构造方法,并写个方法调用

  public Car(int a){};public  void func(){Car car=new Car(1);}   //:(Ijava/lang/int:)V//方法之间调用fun1(){} fun2(){fun1();   // fun1:()V ,使用了func1进入常量池(void)}private String fun3(boolean b;int s,MyCat cat){   fun3 : (zILtop/jamsee/MyCat;)Ljava/lang/String;return null;}static void fun4(){}static final void fun5(){} //都可以进入//继承父类,构造方法改变class aa extends bb{}//其他地方没有写,这样调用父类也会进入,如果其他地方也调用,就是存在这个类和父类的fun6进入public void fun6(){super.fun6();}

3.接口方法引用

CONSTANT_InterfaceMethodref_info{
u1 tag;
u2 class_index;
u2 name_and_type_index; }

  public interface IMyFood{void fun1();}public class MyFood extends IMyFood{public void fun1(){MyFood.main(new String[]{"aaa"}); //main方法这样也会进入常量池,main方法由虚拟机调用一般不进入常量池}public static void main(String[] args){MyFood myfood=new MyFood(); //自己的构造方法,父类的,构造方法myfood.fun1();IMyFood ifood=new MyFood();//多态会进入interfacemethod常量池ifood.fun1();}}
          java代码--->javac--->java字节码--->常量池--->

4.常量里面都是符号表(数组的下标) 上面4个常量,都是使用的类,字段,方法,接口信息

javap -v(熟悉后)

5.(面试题)java中的接口的超类(基类)是不是Object

 !!!答:本类和父类和使用的类都会进入class_info常量池,官网说 所有类都有object声明(关联) 字面量--->字面知道内容是什么

6.string static final 和其他的字符串定义

CONSTANT_String_info{ u1 tag;u2 string_index;//指向CONSTANT_Utf8_info常量}

public class aaa{
static final String str=“aaa”; //java语法层面的常量进入
String str2=“bbb”; //bbb是常量也会进入
public void fun1(){
sout(“ok”);//也是
}
{ sout(“ccc”); //实例块也可以
}
static{ String str3=“abc”+“def”; //在常量池进入abcdef整体,优化
String str3=“ddd”+123; //也是整体
}

}

7.integer(小于short范围直接进字节码里面)

{
u1 tag;
u4 bytes; //4个字节8个位
}

     //以下(是整数)都会进入常量池static final Integer a3=new Interger(666);static final int a=10;static final boolean b1=true;static final boolean b2=false;static final char c1='a';//8位  11111111 static final byte by1=20;static final short s1=30;int bb=5000;//可以进public void fun2(){int a=50; //short范围内的不进入,在init方法里int b=50000;//直接进入字节码的方法里面,优化}static{ }

8.float(如String int)

CONSTANT_Float_info{
u1 tag;
u4 bytes;
}
fun4(64.9f);//字面量都进去,static final也可以进去

9.面试题:区分实例块和静态块和构造方法谁先执行

static{}>{}>init() 实例块比构造块先执行,(init<初始化阶段>查看) (存静态 clinit)
static int a=500;//静态成员 和静态块放一起
int b=700;//实例成员 和实例块 放在一起

10.long

CONSTANT_Long_Info{
u1 tag;
u4 high_bytes;
u4 low_bytes; }

  public class c1{static final long l1=10;static long l2=20;public Myc(){long l3=30;  }}

相关内容

热门资讯

埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
ps局部放大 放大某个部位的图... 软件类学习建议:边看边练习,可以先收藏后学习。一、使用Ctrl快捷键放大:Ctrl + +缩小:Ct...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
ps局部放大 放大某个部位的图... 软件类学习建议:边看边练习,可以先收藏后学习。一、使用Ctrl快捷键放大:Ctrl + +缩小:Ct...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...