错误:类X是公共的,应在名为X.java的文件中声明
我正试图编写一个程序,但遇到以下编译器错误:错误:类X是公共的,应在名为X.java的文件中声明,java,Java,我正试图编写一个程序,但遇到以下编译器错误: Main.java:1:错误:类WeatherArray是公共的,应该在名为WeatherArray.java的文件中声明 公共类气象阵列{ ^ 1错误 我已经检查了我的文件名,我的公共类与我的.java文件相同 我怎样才能解决这个问题 这是我的密码: public class WeatherArray { public static void main(String[] args) { // ... } } 公共
Main.java:1:错误:类WeatherArray是公共的,应该在名为WeatherArray.java的文件中声明
公共类气象阵列{
^
1错误
我已经检查了我的文件名,我的公共类与我的.java文件相同
我怎样才能解决这个问题
这是我的密码:
public class WeatherArray {
public static void main(String[] args) {
// ...
}
}
公共类的名称必须与放置它的.java文件的名称匹配(例如
公共类Foo{}
必须放置在Foo.java
文件中)。因此:
- 将文件从
重命名为Main.java
WeatherArray.java
- 将类从
重命名为public class WeatherArray{
public class Main{
- 文件中公共类的名称必须与该文件的名称相同
因此,如果您的文件声明类WeatherArray,则需要将其命名为WeatherArray.java您将文件命名为Main.java。将您的文件命名为WeatherArray.java并进行编译。您的文件将在其应该的位置命名为Main.java WeatherArray.java
答案很简单。这取决于您的管理员权限。在编译java代码之前,您需要使用“以管理员身份运行”打开命令提示符。然后编译代码。无需更改代码中的任何内容。类的名称必须与java文件的名称相同。就是这样!!当您有一个r硬盘上的Java类和代码中Java类的另一个名称 例如,我在代码中将我的
MainActivity
类重命名为MainActivity
仅(!),我立即收到了这个错误
在AndroidStudio的Project选项卡中还有一个可视指示器——一个类中的类,就像嵌套的classed一样,但有一个错误指示器
解决方案是在项目选项卡中简单地重命名类名(
SHIFT
+F6
)与Java代码中的名称匹配。当您将文件命名为WeatherArray.Java时,可能您的硬盘上还有另一个文件,因此您可以将WeatherArray.Java重命名为ReWeatherArray.Java,然后将ReWeatherArray.Java重命名为WeatherArray.Java。一切正常。错误示例:
public class MaainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Get the view from activity_main.xml
setContentView(R.layout.activity_main);
}
}
正确示例:只需确保您编写了“主要活动”活动的正确名称
在我的案例中,我正在使用syncthing。它创建了一个我不知道的副本,并且我的编译失败。要避免此错误,您应该遵循以下步骤:
1) You should make a new java class
我曾经遇到过同样的错误。这真的很有趣。我用不同的文件名创建了一个.java文件的备份,但类名相同。然后一直尝试构建它,直到我检查了文件夹中的所有文件。在我的情况下(使用IntelliJ)我复制、粘贴并重命名了工作区,我仍然使用旧路径编译新项目
在这种情况下,这个特定的错误也会发生,如果您有相同的错误,您可以检查您是否做了类似的事情。在编写“Javac[x].java”时,终端不区分大小写,因此请确保您在终端中编写的内容与文件名和类名匹配
我的类名和文件名都是“MainClass”,但我是用“MainClass”编译的。注意,我忘了用大写字母“c”。我也遇到了同样的问题,但当我意识到我没有用正确的大小写编译它时,我解决了这个问题。你可能一直在这样做 javac Weatherarray.java 应该是什么时候 javac WeatherArray.java
从Ubuntu命令行:
//WeatherArray.java
public class WeatherArray {
public static void main(String[] args) {
System.out.println("....Hello World");
}}
ls
WeatherArray.java
javac WeatherArray.java
ls
WeatherArray.java WeatherArray.class
java气象阵列
……你好,世界
当然,如果您使用与WeatherArray不同的名称命名java文件,则需要去掉public,它将是:
// Sunny.java
class WeatherArray {
public static void main(String[] args) {
System.out.println("....Hello World"); }}
// javac Sunny.java; java WeatherArray
它说它试图编译
Main.java
而不是WeatherArray.java
我在Mac OSX上使用eclipse。将源代码发布到Main.java.1.确保你的文件名尊重类名的大小写;2.清除所有嵌套的while
循环,否则我今晚会杀了很多小猫。我可以用这些循环来吃一点薯条吗sted while loops?Main.java在文件结构中位于何处?如果没有public class Main
就没有Main.java
。不要将Main类与Main
方法混淆。你的Main
方法在WeatherArray.java
中。另外,我认为你的嵌套while应该是顺序的If
语句。好的,谢谢你的帮助。我将大胆地删除所有嵌套的while循环。它还可以通过删除public
使类成为非公共类(但如果你试图从其他包中使用该类,这将导致一些问题)。它实际上是一个注释。如果有另一个文件具有相同的名称,它可能会覆盖该文件或出现其他错误。如果您正在尝试编译新文件,其他答案中给出的建议就是所需的全部-只需重命名该文件或类,如果有另一个文件阻止重命名它,则显然需要将其从wa中删除首先是y。似乎缺乏管理员权限不太可能导致此错误。这似乎没有给2-5年前发布的5个答案添加任何内容,即类名需要与文件名匹配,特别是其中已经提到了类名中的拼写错误。
3) And a new java class is made
//WeatherArray.java
public class WeatherArray {
public static void main(String[] args) {
System.out.println("....Hello World");
}}
// Sunny.java
class WeatherArray {
public static void main(String[] args) {
System.out.println("....Hello World"); }}
// javac Sunny.java; java WeatherArray