在java中创建对象
输出: 萨钦在java中创建对象,java,core,Java,Core,输出: 萨钦 对象名与类名相同..如何可能..程序给出正确的输出.原因是什么 这是允许的(对象名和类名不会发生冲突),但这很容易混淆,因此通常认为这不是一个好主意。按照惯例,类以大写字母开头,而变量则不以大写字母开头。没有任何东西可以阻止使用与变量同名的类的行为。唯一不能这样做的是保留字。例如,你不能这样做 class cricket{ void bat(){ System.out.println("sachin"); } public static v
对象名与类名相同..如何可能..程序给出正确的输出.原因是什么 这是允许的(对象名和类名不会发生冲突),但这很容易混淆,因此通常认为这不是一个好主意。按照惯例,类以大写字母开头,而变量则不以大写字母开头。没有任何东西可以阻止使用与变量同名的类的行为。唯一不能这样做的是保留字。例如,你不能这样做
class cricket{
void bat(){
System.out.println("sachin");
}
public static void main(String ar[]){
cricket cricket=new cricket();
cricket.bat();
}
}
如果您的代码更为传统,那么应该是这样的:
int int = 3; // not allowed
Integer Integer = 3; // allowed, but discouraged
使变量与类完全相同也会导致与静态方法的混淆。考虑这一点:
class Cricket{
void bat(){
System.out.println("sachin");
}
public static void main(String ar[]){
Cricket cricket=new Cricket();
cricket.bat();
}
}
当Java编译器看到:
void foo(Runnable r) throws Exception {
Thread Thread = new Thread(r);
Thread.start();
Thread.sleep(100); // Okay, now WTF does this do?
}
它知道左边是变量声明,右边是构造函数调用,因为在“new”和(
)之间只允许类
局部变量保存在不同的名称空间(“局部块范围”)中,因此这是可行的
但正如您所注意到的,这让读者感到困惑。这就是为什么Java规则说“大写类名”:
Java编译器完全忽略了大写字母,但它对人类读者有很大帮助。这就是它变得非常混乱的原因:
Cricket cricket = new Cricket();
正在调用哪个
chirp()
,以及如何调用另一个?因为还有一个名为Thread
的变量。现在,在变量上使用静态方法已经很混乱,但类名的阴影使之更加复杂。
Cricket cricket = new Cricket();
class bug {
public static void chirp() {
}
}
class cricket {
public void chirp() {
}
}
//...
cricket bug = new cricket();
bug.chirp();