首页 新闻 搜索 专区 学院

构造方法重载

0
[待解决问题]

我在练习构造方法过程中,遇到下面问题:1、在 1 的地方调用方法hhh();为什么必须是静态方法?      2、在 2 的地方,有void为什么显示此方法具有构造函数名?但当修改为构造函数时,u1.User();u2.User();u3.User();三句为什么又不合适了?

 

public class User {
int id;
String name;
String pwd;


public User() {
System.out.println("hhh");
}

public User(int id,String name) {
super(); 
this.id = id; 
this.name = name;
System.out.println(id+name);
}

public User(int id,String name,String pwd) {
this.id = id;
this.name = name;
this.pwd = pwd;
System.out.println(id+name+pwd);
}

static void hhh() {
System.out.println("111");
}

public static void main(String[] args) {
User u1 = new User();
User u2 = new User(123,"xige");
User u3 = new User(123,"xige","456");


u2.id = 122;
u2.name = "xige";
u3.id = 133;
u3.name = "xige2";
u3.pwd = "123";

u1.User();
u2.User();
u3.User();
User.hhh();                         //       1

}

private void User() {                          //         2

}

}

西戈wzc的主页 西戈wzc | 菜鸟二级 | 园豆:222
提问于:2020-03-12 22:13
< >
分享
所有回答(1)
0

前提声明 :你声明的类只有一个
第一问:
这个与Java程序的加载机制有关,因为被static声明的方法与类同时在内存中创建(简单可认为被static声明的方法其生命周期与类一致。只有类结束执行,static声明的方法才结束生命周期),对于非static声明的方法,只在被调用时创建(即非static方法的创建晚于static声明的方法但其消亡时间不一定),Java的编译器是不允许一个已经创建的方法调用未创建的方法(编译时异常--这个必须在编译时处理),所以就会出现static方法无法调用非static方法。
第二问:
因为你这是一个类,在一个类里面除了构造器可以完全与类名相同,其余的都不能使用类名作为方法名(即平常写普通方法时,不要使用类名命名),如果使用类名作为方法名就会被编译器默认当做构造器。且你的构造器之间已经构成了重载。
如果,你重新声明一个类(不使用User作为类名),在该类内是可以定义User方法的,此时这是一个普通方法,不是构造方法。

Tips:看题主的代码。忽然想起了自己刚开始学Java的时候,也是分不清构造方法和普通方法的区别,经常将构造方法当作普通方法使用。

My-Question | 园豆:199 (初学一级) | 2020-03-12 23:07
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册