Java错误 – 参数的非法修饰符 – 仅最终允许
以下代码有什么问题
public static void main(String[] args){ public static final String Name = "Robin Wilson"; }
字符串引用名称显示编译错误 – Java错误 – 参数名称的非法修饰符 – 仅最终允许
可以使用以下给出的建议,但我想了解为什么它不被允许,尽管两者都是静态的?
您已经修改了您的问题:
我想理解为什么它不被允许,虽然两者都是静态的?
方法内部的变量仅存在于堆栈帧上。 每次调用方法时,JVM都会创建一个新的堆栈帧,并在方法完成后将其丢弃。
public
关键字用于类,方法和字段以控制访问。 没有可以应用于堆栈(本地)变量的访问概念。 它只在调用方法时存在于方法内部,并且只能在方法中访问。
static
关键字在字段上用于表示在类的所有实例中只存在一个此类成员,以及用于创建它们作为不需要实例的类成员的方法。 堆栈中的任何东西都没有静态的概念; 这是暂时的。 从方法调用返回后,堆栈框架及其上的所有局部变量将不复存在。
基本上,在谈论局部变量时都没有任何意义。
如何解决它
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
的值在分配后永远不会改变。
final
描述了如何使用变量。 它在一个方法中是有意义的,因为它不是关于访问。
你不能在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"; }
您不能将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是局部变量的唯一修饰符
您不能将局部变量(方法内的变量是局部变量)声明为public static
。 相反,以下代码将起作用:
public static void main(String[] args){ final String Name = "Robin Wilson"; }
因为你将String变量声明为public static final String Name =“Robin Wilson”;
根据java规则,当您在Main方法中声明它时,此String 名称是Local变量。 所以这里只允许最终决定。 您可以将其定义为** final String name =“Robin Wilson”; **在main方法中。 对于局部变量,只允许最终 。
组件的静态声明在类级别上可用。 声明方法中的组件使得方法的堆栈内存可用,因此只能通过对象访问。 静态属于全class。 因此,在声明变量static时没有意义。 如果你试图这样做,你甚至会得到编译时错误。 Final关键字与内存无关。
- Dagger 2:使用@Named获取同一对象的多个实例时出错
- Thread.sleep()是否使UI线程进入hibernate状态?
- System.out.printIn()如何接受整数?
- AlarmManager setInexactRepeating,setWindow,setRepeating方法在工作日内从循环内调用时不会触发警报
- 什么时候活动的实例变量被初始化?
- 错误Grandle Build C:\ Program Files \ Java \ jdk1.7.0_79 \ bin \ java.exe”以非零退出值1结束
- 更新ListView行中与数据库行对应的CheckBox
- 如何从Java在Android设备上运行adb screenrecord并结束屏幕记录?
- 如何标记java代码,使其不被编译