在Java中使用预定义的类名作为类或变量名
在Java中,允许使用预定义的类名作为类名或变量名。但是,根据Java规范语言(第 3.9 节), Java中命名的基本规则是不能使用关键字作为类名、变量名或用于包的文件夹名。
在Java中使用任何预定义类都不会导致编译器错误,因为Java预定义类不是关键字。
以下是Java中的一些无效变量声明:
boolean break = false; // not allowed as break is keyword
int boolean = 8; // not allowed as boolean is keyword
boolean goto = false; // not allowed as goto is keyword
String final = "hi"; // not allowed as final is keyword
使用预定义的类名作为用户定义的类名
- 问题:我们可以将我们的类名作为程序中预定义的类名之一吗?
答:是的,我们可以拥有它。下面是使用Number作为用户定义类的示例// Number is predefined class name in java.lang package // Note : java.lang package is included in every java program by default public class Number { public static void main (String[] args) { System.out.println("It works"); } }
输出:
It works
- 使用字符串作为用户定义的类:
// String is predefined class name in java.lang package // Note : java.lang package is included in every java program by default public class String { public static void main (String[] args) { System.out.println("I got confused"); } }
但是,在这种情况下,您将收到如下运行时错误:
Error: Main method not found in class String, please define the main method as: public static void main(String[] args)
解释:这是因为主线程正在寻找带有预定义字符串类数组参数的主方法()。但是在这里,它得到了带有用户定义的 String 类的main method()。每当主线程看到一个类名时,它都会尝试按范围搜索该类范围。首先它会在你的程序中看到,然后在你的包中。如果没有找到,那么 JVM 遵循委托层次原则来加载该类。因此你会得到运行时错误。
为了运行上面的程序,我们还可以提供 String 类的完整路径,即Java.lang.String 。// String is predefined class name in java.lang package // Note : java.lang package is included in every java program by default public class String { public static void main (java.lang.String[] args) { System.out.println("I got confused"); } }
输出:
I got confused
使用预定义的类名作为用户定义的变量名
问题:我们可以将变量名作为程序中预定义的类名之一吗?
答:是的,我们可以拥有它。
// Number is predefined class name in java.lang package
// Note : java.lang package is included in every java program by default
public class Number
{
// instance variable
int Number = 20;
public static void main (String[] args)
{
// reference variable
Number Number = new Number();
// printing reference
System.out.println(Number);
// printing instance variable
System.out.println(Number.Number);
}
}
输出:
Number@15db9742
20