首页 > 编程知识 正文

构造函数和构造方法,构造方法有什么特点

时间:2023-05-04 19:44:30 阅读:147549 作者:430

在类和对象篇中,我们说:

如果未明确定义构造方法,编译器将自动提供无参数的构造方法

如果为类显式定义了构造方法,则不会生成缺省的无参数构造

本篇博客就带大家一起来验证~

首先,明确定义构造方法。 这意味着您自己定义构建方法,而非编译器将提供缺省的构建方法

只能在字节码级别验证是否生成缺省生成方法

使用Student类为例:

类字符串{ public string name; int age; //提供构建方法的public Student () { System.out.println )“我是一种构建方法! ); }publicstudent(stringname,int age ) { this.name=name; this.age=age; system.out.println (personstring,int ); }} 方法1 jclasslib插件

在使用此插件之前,必须安装jclasslib插件

显式定义构造方法

编译后,生成方法的名称为 init

上面有两个上述有两个 init ,您如何区分您参与的是哪种结构方法?

打开任意 init 以查找局部变量表

在上图中,局部变量表中有参数this,您可以看到这个this是我们的目标空间

由于构造方法会初始化对象,因此必须传递构造方法才能确定要初始化的对象和对象空间的位置。 因此,如果构造方法没有参数,则可以看到有一个隐藏的this会传递对象的地址

注意:this传达的不是真正的地址,而是对象的地址被转换后的东西

它还包含如何构造参数的局部变量表。

你会发现除了name、age之外,还有this

可以解释:

构建方法的名称为对应的 init

则上述过程也可以说明,如若没有显式定义构造方法:

http://www.Sina.com/http://www.Sina.com /按上述方法验证:

这意味着,如果类没有显式定义构造函数方法,编译器将自动生成没有参数的缺省构造函数方法

当用户显示定义时,将不再生成编译器

.便可以在 jclasslib 里找是否存在 init 方法,若存在,即可说明编译器提供了默认的构造方法

.在 init 里找到局部变量表,查看除this外是否有其他参数,若没有,即可证明编译器提供的是没有参数的构造方法

类字符串{ public string name; int age; } public class exercise 0909 { publicstaticvoidmain (string [ ] args ) { Student student=new Student; }} 方法2 javap 工具进行反汇编

未显式定义构造方法

反汇编结果表明,没有明确定义构建方法,编译器自动提供了构建方法

1.打开终端,找到对应目录,输入javap -c反汇编

找到对应的局部变量表,看其中的值的个数即可

在局部变量表中:主要用于存储方法的参数和方法中定义的局部变量

如果未定义局部变量,则上述代码存储在局部变量表中的是隐藏的this参数,用于存储对象地址转换后的内容

2.观察反汇编结果

类字符串{ public string name; int age; //构建方法publicstudent(stringname,int age ) { this.name=name; this.age=age; system.out.println (personstring,int ); }和上述过程一样,这里不做过多的描述,而是直接截取核心代码进行验证。

您可以看到局部变量包含三个参数: this、name和age

3.使用 javap -v

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。