自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(10)
  • 问答 (1)
  • 收藏
  • 关注

原创 递归栈的工作原理

对于这段代码,首先main方法先入栈,接着执行第一行代码,在栈中main方法区域创建变量,等号右边调用jc()方法,jc方法入栈,参数n为5,返回5*jc(5-1)。然后依次类推,最后一个入栈的jc方法参数为n==1;那么return的1应该返回给谁呢,方法的返回值应该返回给方法的调用处。因此会把返回值1返回给jc(1);最后方法依次出栈,120返回给=号的右边。

2024-01-31 10:33:20 473

原创 Integer底层原理

下面着重讲解前两种,在Integer的底层源码中,当你以调用静态方法创建Integer对象时,底层会先判断创建对象的value值,如果范围在-128-127之间,底层会直接返回一个实现创建的对象以供使用。在创建Integer对象时候与之前一样,通过new关键字创建,在栈内存中声明一个Integer类型变量,记录堆内存中的地址,等号右边的new Integer()会在堆内存中开辟一个地址空间,成员变量value记录数据10.第二种value为128,不在范围,因此要重新创建,所以地址不同。

2024-01-25 20:22:45 385

原创 Java内部类内存图

接着打印this.a,刚刚解释过this的地址为002,所以this.a可以理解为打印002里面的a。下一句sout(outer.this.a)的具体流程为,先通过this找到002,接着找到002中记录outer地址的this,通过this的值找到outer的地址001,在001找到a的值为10。2.代码继续运行,执行oi.show(),show方法加载入栈,方法的调用者为oi,因此this记录的是调用者的地址值(002),在方法中定义了a=0,将局部变量a=0入栈,进入栈中show方法模块。

2024-01-17 20:14:07 365

原创 访问本类构造方法this(...)

如果现在要给一个变量设置一个默认值,可使用this(...)方法。下面结合代码讲解:需求:将大学默认设置为”某某大学“,结合上图代码,用无参构造创建一个学生类对象,此时在Student()类里面写入this()方法,当用无参构造创建对象时会 调用学生类中的无参构造方法,并写入变量值到this方法中如上图,接着this方法调用本类中其他构造方法,并将对应变量传递进去。此时name=null,age=null,school="某某大学",实现大学这个变量的初始化设置。

2024-01-14 10:48:58 397 1

原创 java继承中构造方法的访问特点

父类的构造方法与子类的方法名不同,因此无法使用。

2024-01-14 09:57:19 399 1

原创 关于java成员方法继承内存图

如下下图。

2024-01-13 22:26:01 329 1

原创 java继承的内存图

首先测试类的main()方法和class文件加载到方法区,main()方法被虚拟机调用入栈,执行main方法中第一句代码,将类Zi的字节码文件和变量加载到方法区,有类Zi继承了Fu类,所有Zi类会把Fu类的class文件和变量加载至方法区,同时Fu类继承object类,所以object的class文件也会被加载。接着执行等号左边,Zi z加载入栈,等号右边在堆内存中开辟一个空间,与之前不同的是,该空间被一分为二,一边加载父类的成员变量,一边则是自己的成员变量。并将地址赋值给栈中的变量。

2024-01-13 20:45:03 341

原创 字符串存储的内存原理

1)等号右边没有变量:javac在编译class文件时,会直接拼接字符,此时等同于直接赋值一个字符串即String s1="a"+"b"+"c"也就等同于String s1="abc";

2024-01-09 19:30:05 318

原创 字符串创建在内存中的实现

字符串创建常见的一般分为两种:分析:首先针对第一种方式进行分析,代码执行main()函数,main()方法加载至栈内存中,接着在main()方法中创建变量String s1=,对于等号右边,系统检查串池中是否有该字符串,如果没有将该字符串"abc"写入串池中,并将地址值赋给s1。对于第二行代码,同样在main()方法中创建变量String s2=,接着检查串池中是否有该字符串,有“abc”因此,直接将地址赋值给s2。

2024-01-08 16:27:32 456 1

原创 Java 面向对象的内存图分析data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

如下图所示(jdk8之前): 如下图所示(jdk8之后): jdk8之后将方法区取消,新增元空间,把原来方法区功能进行拆分,一部分分给元空间,另一部分则是给了堆方法区:字节码文件加载时进入的内存栈内存:方法运行时进入的内存,变量也在此处堆内存:new出来的东西会放在这块内存中,开辟空间并产生地址当我们创建一个对象时,例如:Student s =new Student();内存至少进行七件事:现结合具体实例分析

2024-01-07 16:35:03 467 1

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除