public int Man()不是构造函数,是一个普通的函数 构造的形式只能是public class Man(){ public Man(){} pubcli Man(参数){} }
public int Man()不是构造函数 new Man()调用的是构造函数Man() 而.a调用普通函数int Man() 所以得到0的结果是正确的
构造方法返回值是允许的,不过如你所说,却是一点用也没有,但是是可以为编译器所接受. 同时,不能通过返回值对方法进行重载,Man方法和int Man方法会造成歧义,使构造函数调用出现问题. 我把上面的程序改了一下,你看一下结果 public class Man { public Man(){System.out.println("standard constructor");} public int Man() { System.out.println("illegal constructor"); return 0; } int a = Man(); public static void main(String[] args) { Man man = null; while(true){ man = new Man(); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } } }
sorry,刚才的答案有错,确实int Man方法没有被调用
稍微改写一下子 public class Foo { public Foo(){} public int F() { return 1; } int a = F(); public static void main(String[] args) { int b = new Foo().a; System.out.println(b); } } int F() 和int Foo()是一回事,就名字不同, 构造函数可以重载,但不论Java还是C++或别的,通过返回值来重载是不被支持的 int i=Function();和Function();部分情况下这两句没有本质的不同 构造函数绝对没有返回值 我手头没有C++编译器,估计楼主这种情况在C++中要严重一点,因为Cpp支持在栈 内创建对象Foo()就可以构造一个匿名类
public class Man { public Man Man() { int a = 10; return this; } int a = 0; public static void main(String[] args) { Man b = new Man(); System.out.println(b.a); } } 自己试一下,你就可以知道结果了。为了不让你弄混,我把构造函数给去掉了
不好意思,上面的程序有一个地方写错了 public class Man { public Man Man() { a = 10; return this; } int a = 0; public static void main(String[] args) { Man b = new Man(); System.out.println(b.a); } }
构造的形式只能是public class Man(){
public Man(){}
pubcli Man(参数){}
}
new Man()调用的是构造函数Man()
而.a调用普通函数int Man()
所以得到0的结果是正确的
同时,不能通过返回值对方法进行重载,Man方法和int Man方法会造成歧义,使构造函数调用出现问题.
我把上面的程序改了一下,你看一下结果
public class Man {
public Man(){System.out.println("standard constructor");}
public int Man() {
System.out.println("illegal constructor");
return 0;
}
int a = Man();
public static void main(String[] args) {
Man man = null;
while(true){
man = new Man();
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
public class Foo {
public Foo(){}
public int F() {
return 1;
}
int a = F();
public static void main(String[] args) {
int b = new Foo().a;
System.out.println(b);
}
}
int F() 和int Foo()是一回事,就名字不同,
构造函数可以重载,但不论Java还是C++或别的,通过返回值来重载是不被支持的
int i=Function();和Function();部分情况下这两句没有本质的不同
构造函数绝对没有返回值
我手头没有C++编译器,估计楼主这种情况在C++中要严重一点,因为Cpp支持在栈
内创建对象Foo()就可以构造一个匿名类
public Man Man() {
int a = 10;
return this;
}
int a = 0;
public static void main(String[] args) {
Man b = new Man();
System.out.println(b.a);
}
}
自己试一下,你就可以知道结果了。为了不让你弄混,我把构造函数给去掉了
public class Man {
public Man Man() {
a = 10;
return this;
}
int a = 0;
public static void main(String[] args) {
Man b = new Man();
System.out.println(b.a);
}
}