在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();