A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

在Java中,构造方法必须满足什么样的规则,构造方法能够被static, final, synchronized, abstract和native修饰吗?构我就知道造方法一般需要满足:方法名必须与类名保持一致和不要声明返回类型。清那位高手指点一下还有别的区别吗

评分

参与人数 1技术分 +1 收起 理由
Rancho_Gump + 1

查看全部评分

4 个回复

倒序浏览
构造方法有三个特点:
1. 方法名与类名相同
2. 无返回值
3. 参数列表不同

个人心得:
1. 构造方法一般在实例化的时候用
2. 如果声明一个带参的构造方法,一般情况下,也会声明一个无参的构造方法。
回复 使用道具 举报
不能被static, final, synchronized, abstract和native修饰。构造方法不能被子类继
承,所以用final和abstract修饰没有任何意义。构造方法用于初始化一个新建对象,
所以用static修饰没有意义。多个线程不会同时创建内存地址相同的对象,因此使用
synchronized修饰也是没有必要的。此外,Java语言目前还不支持native类型的构造
方法。
回复 使用道具 举报
1. 构造函数必须满足的语法规则:方法名必须与类名相同;不要声明返回类型;不能被static、final、synchronized、abstract、native等修饰。
2 构造方法可以被重载,来表达对象的多种初始化行为。在重载构造方法中可以使用this语句来调用其他构造方法,使用时应该注意:如果在构造方法中使用了this语句,则必须作为构造方法的第一条语句;只能在一个构造方法中用this语句来调用类的其他构造方法,而不能在成员方法中调用类的构造方法;只能通过this语句来调用其他构造方法,不能通过方法名来直接调用构造方法。
3 在java中,如果用户定义的类中没有提供任何构造方法,java语言会自动提供一个默认的构造方法,该默认构造方法没有参数,用public修饰,且方法体为空。当然,程序中也可以显示的定义默认构造方法。
4 如果类中显示定义了一个或多个构造方法,并且所有的构造方法都带有参数,那么这个类就失去了java语言为其准备的默认构造方法,此时若使用该类的默认构造方法(即不含参数的构造方法)时就是编译出错。
5 父类的构造方法不能被子类继承,但是,在子类的构造方法中可以通过super语句调用父类的构造方法。使用super语句应该注意:在子类的构造方法中使用super语句,它必须作为第一条语句。
6 在创建子类的对象时,java虚拟机首先执行父类的构造方法,然后再执行子类的构造方法,在多级继承的情况下,将从继承树的最上层得父类开始,依次执行各个类的构造方法,这可以保证子类对象从所有直接或间接父类中继承的实例变量都被正确的初始化。
7 如果子类的构造方法中没有用super语句显示调用父类的构造方法,那么通过这个构造方法创建子类对象时,java虚拟机会自动先调用父类的默认构造方法,而此时若父类没有默认构造方法时,就是编译出错

回复 使用道具 举报
答:构造方法一般需要满足以下几条规则:
(1)方法名必须与类名保持一致。
(2)不要声明返回类型。
(3)不能被static, final, synchronized, abstract和native修饰。构造方法不能被子类继
承,所以用final和abstract修饰没有任何意义。构造方法用于初始化一个新建对象,
所以用static修饰没有意义。多个线程不会同时创建内存地址相同的对象,因此使用
synchronized修饰也是没有必要的。此外,Java语言目前还不支持native类型的构造
方法。

知识扩展:
用this语句来调用其他构造方法时,必须遵守以下规则:
(1)假如在一个构造方法中使用了this语句,那么它必须作为构造方法的第一条语句(不考虑注释语句)。
(2)只能在一个构造方法中使用this语句来调用类的其他构造方法,而不能在实例方法中用this语句来调用类的其他构造方法。
(3)只能用this语句来调用其他构造方法,而不能通过方法名来直接调用构造方法。

同样,使用super语句调用父类的构造方法时,也必须遵守以下语法规则:
(1)在子类的构造方法中,不能直接通过父类方法名来调用父类的构造方法,而是使用super语句。
(2)假如子类的构造方法中有super语句,它必须作为构造方法的第一条语句。

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马