当前位置: 首页 > news >正文

网站制作费用价格表企业网站推广策划书

网站制作费用价格表,企业网站推广策划书,做网站公司郑州郑州的网站建设公司哪家好,淄博头条新闻今天众所周知,在java里是不能给构造函数写返回值的,如果在低版本的编译器定义一个构造器写上返回值可能会报错,高版本里面他就是一个普通的方法。可是如果构造函数没有返回值,那么比如Test t new Test()我们new一个对象的时候是怎么赋…

众所周知,在java里是不能给构造函数写返回值的,如果在低版本的编译器定义一个构造器写上返回值可能会报错,高版本里面他就是一个普通的方法。

可是如果构造函数没有返回值,那么比如Test t = new Test()我们new一个对象的时候是怎么赋值的呢?

构造函数有返回值吗

写一段代码测试一下:

public class Test{

public Test(){

}

public static void main(String[] args){

Test t = new Test();

}

}

反编译一下看看:

Code:

0: new           #5 // class com/irving/utils/baidu/Test

3: dup

4: invokespecial #6 // Method "":()V

7: astore_1

8: return

从反编译的结果看 4: invokespecial #7 // Method "init": ()V,调用构造函数,V代表void无返回值,那么init代表什么含义?

我在书里找到这样一段话:

在 Java 虚拟机层面上,Java 语言中的构造函数是以一个名为init的特殊实例初始化方法的形式出现的,init这个方法名称是由编译器命名的,因为它并非一个合法的 Java 方法名字,不可能通过程序编码的方式实现。实例初始化方法只能在实例的初始化期间,通过 Java 虚拟机的 invokespecial 指令来调用, 只有在实例正在构造的时候,实例初始化方法才可以被调用访问。

一个类或者接口最多可以包含不超过一个类或接口的初始化方法,类或者接口就是通过这个方法完成初始化的。这个方法是一个不包含参数的静态方法,名为clinit。这个名字也是由编译器命名的,因为它并非一个合法的 Java 方法名字,不可能通过程序编码的方式实现。类或接口的初始化方法由 Java 虚拟机自身隐式调用,没有任何虚拟机字节码指令可以调用这个方法,只有在类的初始化阶段中会被虚拟机自身调用。

init代表着虚拟机调用构造函数,现在情况很明显,构造函数返回类型是void,那么它究竟是怎么赋值的呢?

赋值探究

我们明白一点,方法的调用过程就是栈帧入栈和出栈的过程,栈帧随着方法的调用创建,方法结束销毁。栈帧的内部包含局部变量表、操作数栈、动态链接等。

局部变量表表示方法调用时候的参数传递,当一个实例方法被调用的时候,第0个局部变量存储了当前实例方法所在对象的引用(this),后续的其他参数传递至1到N的连续位置。

操作数栈用来准备方法调用的参数和返回结果。

82294704930c54c739eb73d73e758113.png

以上面测试代码的方法来看Test t = new Test() 的调用过程:

new 创建Test对象,并将其引用值压入操作数栈顶

dup 复制栈顶数值并将复制值压入栈顶

invokespecial 使用dup复制的引用并用来初始化,此时栈顶应该只有new创建的原始引用

astore_1 将new创建的引用存入局部变量表索引为1的位置

return 方法正常返回

e453c50b9ff9f488aba9d019adf2969c.png

从这个过程我们已经看出来了,整个过程最后我们最终拿到了new之后创建的对象引用,并且保存到局部变量表中,可以供我们继续使用。

关注公众号:java宝典

52f2d48be04ead4894aaf9e8e73d89d1.png

文章来源: segmentfault.com,作者:liangtengyu,版权归原作者所有,如需转载,请联系作者。

原文链接:segmentfault.com/a/1190000037560333

http://www.lbrq.cn/news/2701729.html

相关文章:

  • 如何加快百度收录网站百度电话销售
  • 人人商城网站开发近期国内外重大新闻10条
  • ui设计需要学哪些课程企业seo服务
  • 用jsp做的网站需要什么工具栏东莞seo广告宣传
  • 南京学习网站建设推广app赚佣金接单平台
  • 论某网站职能建设温州网站优化推广方案
  • 企业官网网站模板重庆企业网站排名优化
  • 网站制作 php独立站建站平台有哪些
  • 南昌网站建设机构网站推广100种方法
  • 稷山网站制作企业站seo
  • cnc强力磁盘 东莞网站建设seo排名优化软件价格
  • 网站设计公司名称百度seo优化系统
  • 西安网站建设开发熊掌号海外市场推广策略
  • 门户网站开发意义网站百度推广
  • 乐清企业网站建设线上渠道推广怎么做
  • 软件开发过程包括深圳债务优化公司
  • 城阳网站建设公司东莞seo
  • 石家庄人力资源和社会保障局南京网络优化公司有哪些
  • 行政还要负责网站建设新媒体吗百度上传自己个人简介
  • 重庆网站建设齐重庆零臻科技郑州seo优化哪家好
  • 做游戏模型挣钱的网站百度seo排名360
  • 天津大型网站建设网站收录查询爱站
  • 怎么做模板网站的报价表网站模板平台资源
  • 青岛网站建设设计公司百度搜索指数在线查询
  • ih5网站制作平台软文写作300字
  • 西安给公司做网站汕头网站制作设计
  • 常见的网络营销有哪些四川seo整站优化吧
  • 网站扁平化设计风格百度关键词搜索量查询
  • 网站域名不要了怎么做seo公司怎么推广宣传
  • 江西省住房城乡建设部网站上海app网络推广公司
  • Redis7学习——Redis的十大类型String、List、Hash、Set、Zset
  • 基于UniApp的智能在线客服系统前端设计与实现
  • Kubernetes-03:Service
  • MCP协议更新:从HTTP+SSE到Streamable HTTP,大模型通信的进化之路
  • 21.Linux HTTPS服务
  • Baumer高防护相机如何通过YoloV8深度学习模型实现纸箱的实时检测计数(C#代码UI界面版)