以下代码有什么问题
public static void main(String[] args){
public static final String Name = "Robin Wilson";
}
字符串引用名称显示编译错误 - Java错误 - 参数名称的非法修饰符 - 仅限最终允许
对于以下给出的建议可以,但我想理解为什么它不被允许,尽管两者都是静态的?
答案 0 :(得分:22)
您已修改过您的问题:
我想理解为什么它不被允许,尽管两者都是静态的?
方法内的变量仅存在于堆栈帧上。每次调用方法时,JVM都会创建一个新的堆栈帧,并在方法完成后将其丢弃。
public
关键字用于控制访问的类,方法和字段。没有可以应用于堆栈(本地)变量的访问概念。它只在被调用时存在于方法内部,并且只能在方法中访问。
static
关键字在字段上用于表示在类的所有实例中只存在一个此类成员,以及将这些成员创建为不需要实例的类成员的方法。堆栈中的任何东西都没有静态的概念;这是暂时的。从方法调用返回后,堆栈框架及其上的所有局部变量将不复存在。
基本上,在谈论局部变量时都没有任何意义。
答案 1 :(得分:7)
window?.backgroundColor = myColor
和 public
不能在方法定义中使用。因此,此错误告诉您,方法中定义的变量所允许的唯一修饰符是 static
。
您可以通过删除有问题的修饰符来修复它:
final
或将变量定义移出类似
的方法class MyClass
{
public static void main(String[] args){
final String Name = "Robin Wilson";
}
}
要了解原因,您需要了解三个修饰符(class MyClass
{
public static void main(String[] args){
}
public static final Name = "Robin Wilson";
}
和public
和static
)各自的含义。 final
只是说我们正在跟踪String Name
并将其称为String
。
Name
class MyClass
{
public String Name = "Robin Wilson";
}
表示程序的任何部分都可以读取它(否则它只能由public
类中编写的代码读取。)
MyClass
指定其他代码可以访问的内容。在一个方法里面这没有意义。在方法内部定义的变量只能在该方法内部访问,一旦方法完成,它们就会被抛弃。因此,这些变量不可能是public
。
public
class MyClass
{
static String Name = "Robin Wilson";
}
表示static
变量是类本身的一部分,而不是类的实例。换句话说,Name
类的所有实例共享相同的MyClass
变量。
Name
指定如何访问它(在类的实例上或通过类本身)。在方法内部这没有意义,因为局部变量在方法关闭后被丢弃,因此没有其他任何东西可以访问它。
static
class MyClass
{
final String Name = "Robin Wilson";
}
表示final
的价值在分配后永远不会改变。
Name
描述了如何使用变量。它在一个方法中是有意义的,因为它与访问无关。
答案 2 :(得分:3)
您无法在main
内声明此内容,将其置于方法之外,您希望将其作为[类成员]:
public static final String Name = "Robin Wilson";
public static void main(String[] args) throws IOException { }
否则(我不认为这是你想要的)只需从那里删除public static
并简单地写:
public static void main(String[] args){
final String Name = "Robin Wilson";
}
答案 3 :(得分:1)
您不能将public static modifier用于局部变量。执行以下任何操作
public static void main(String[] args){
final String Name = "Robin Wilson";
}
或将其声明为成员变量
public static final String Name = "Robin Wilson";
public static void main(String[] args){
}
请记住,final是唯一的局部变量修饰符
答案 4 :(得分:0)
您不能将{1}}声明局部变量(方法内的变量是局部变量)。相反,以下代码将起作用:
public static
答案 5 :(得分:0)
因为你将String变量声明为 public static final String Name =“Robin Wilson”;
根据java规则,当您在 Main 方法中声明时,此String name 是Local变量。所以这里只允许最终决定。 您可以将其定义为** final String name =“Robin Wilson”; **在main方法中。 本地变量仅允许最终。
答案 6 :(得分:0)
组件的静态声明在类级别上可用。在方法中声明组件使得在方法的堆栈存储器中可用,因此只能通过对象访问。静态属于全班。因此,在声明变量static时没有意义。如果您尝试这样做,您甚至会收到编译时错误。 Final关键字与内存无关。
答案 7 :(得分:0)
这意味着您应该在“ main”块之外编写静态函数。它将正常工作。享受
答案 8 :(得分:-1)
private、protected 和 public 修饰符不能用于方法内部的变量。这是因为方法中只能有局部变量。
Java 只是告诉您当时唯一允许的修饰符是 final 关键字。