📅  最后修改于: 2020-02-12 14:23:09             🧑  作者: Mango
在Java中,允许使用预定义的类名作为类名或变量名。但是,根据Java规范语言(第3.9节),在Java中进行命名的基本规则是,不能将关键字用作类的名称、变量的名称或用于包的文件夹的名称。
在Java中使用任何预定义类都不会引起编译器错误,因为Java预定义类不是关键字。
以下是Java中的一些无效变量声明:
boolean break = false; // 不被允许,break是关键字
int boolean = 8; // 不被允许,boolean是关键字
boolean goto = false; // 不被允许,goto是关键字
String final = "hi"; // 不被允许,final是关键字
我们可以在程序中将类名作为预定义的类名之一吗?
答:是的,我们可以。以下是将Number用作用户定义的类的示例
// Number是一个预定义名称,存在于java.lang包中
// 注意 : java.lang在默认情况下,被所有java程序导入
public class Number
{
public static void main (String[] args)
{
System.out.println("芒果文档");
}
}
输出:
芒果文档
使用字符串作为用户定义的类:
// String 是一个预定义名称,存在于java.lang模块中
// 注意 : java.lang在默认情况下,被所有java程序导入
public class String
{
public static void main (String[] args)
{
System.out.println("程序很困惑");
}
}
但是,在这种情况下,您将得到如下运行时错误:
Error: Main method not found in class String, please define
the main method as:
public static void main(String[] args)
说明:这是因为Main线程正在寻找具有预定义String类数组参数的main method()。但是在这里,它得到了带有用户定义的String类的main method()。每当主线程看到类名时,它都会尝试按作用域搜索该类作用域。首先它将搜索在您的程序中出现的,然后搜索在您的程序包中出现的; 如果未找到,则JVM遵循委托层次结构原理来加载该类,因此将出现运行时错误。
要运行上述程序,我们还可以提供String类的完整路径,即java.lang.String。
// String 是一个预定义名称,存在于java.lang模块中
// 注意 : java.lang在默认情况下,被所有java程序导入
public class String
{
public static void main (java.lang.String[] args)
{
System.out.println("程序很困惑");
}
}
输出:
程序很困惑
使用预定义的类名作为用户定义的变量名
我们可以在程序中将变量名作为预定义的类名之一吗?
答:是的,我们可以。
// Number是一个预定义名称,存在于java.lang模块中
// 注意 : java.lang在默认情况下,被所有java程序导入
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