以下代码无法编译(使用eclipse Luna):
public class Main {
public static void main(String[] args) {
java.lang.Object Object = new java.lang.Object(); // Error line
System.out.println(Object.class);
}
}
class java {
static lang lang;
}
class lang {
static Object Object;
}
class Object {
static java java;
}
Eclipse自动建议我"创建类'对象'在类型' java.lang'" ...
(我 DO 在构建路径中有JRE。)
那么,我的代码出了什么问题?
修改
错误在于取消和实例化状态。
编辑2:
实例化java
仍会产生相同的错误:
public class Main {
public static void main(String[] args) {
java java = new java();
java.lang.Object Object = new java.lang.Object();
System.out.println(Object.class);
}
}
class java {
static lang lang = new lang();
}
class lang {
static Object Object = new Object();
}
class Object {
static java java = new java();
}
答案 0 :(得分:3)
你的问题是,通过定义一个名为java
的类,你已经改变了java.lang.Object
的含义 - 所以编译器现在认为这是语义上不正确的东西,而是将其视为java.lang.Object
类的名称。
不要创建一个名为java
的课程。它打破了一切。
答案 1 :(得分:0)
java.lang.Object
已经存在,因此无需编写
class java {
static lang lang;
}
class lang {
static Object Object;
}
class Object {
static java java;
}
java.lang
,因此您无需说
java.lang.Object object = new java.lang.Object();
你可以说
Object object = new Object();
最终代码:
public class Main {
public static void main(String[] args) {
Object object = new Object();
System.out.println(object.class);
}
}
答案 2 :(得分:0)
在这种情况下,您必须先实例化java
才能访问其子项,从而导致不太优雅。
public static void main(String[] args) {
Object Object = (new java()).lang.Object; // instantiate java, THEN call lang.Object
System.out.println(Object.getClass());
}
这导致:
线程中的异常" main"显示java.lang.NullPointerException 在Test.main(Test.java:4)
由于lang
null
java
位于lang
内,因为您尚未宣布静态{{1}}的初始值。
答案 3 :(得分:0)
java被定义为本地作用域中的一个类,它优先于全局定义的java包。因此,当您的代码引用java.lang.Object时,编译器会将其理解为对lang类的静态Object属性的引用。对象是"对象"而不是类型,你的语法是非法的
java.lang.Object Object = new java.lang.Object(); //this is illegal because java.lang.Object is an object, not a type
Object o = java.lang.Object; //this is legal because you're just creating a reference to an object