2

我创建了一个名为 In.java 的文件并输入了以下代码

class In {
   int a;

   public static void main(
      String args[] ) {
      Inheritance h = new Inheritance();
      h.set( 6 );
      System.out.println( h.get() );
   }

   void set(
      int a ) {
      this.a = a;
   }

   int get() {
      System.out.println( a );
      return a;
   }
}

当我编译它时,它显示了一个关于继承的错误。然后我将 In 重命名为 I Inheritance

class Inheritance {
   int a;

   public static void main(
      String args[] ) {
      Inheritance h = new Inheritance();
      h.set( 6 );
      System.out.println( h.get() );
   }

   void set(
      int a ) {
      this.a = a;
   }

   int get() {
      System.out.println( a );
      return a;
   }
}

现在,当我编译它并创建了 Inheritance.class 但是当我编译时文件名仍然是 In.java ,因为public class Inheritance它提醒我该类应该更改为 Inheritance.java 。现在当我运行java In它时显示错误Error: Could not find or load main class In现在我再次将类重命名为 In as

class In {
   int a;

   public static void main(
      String args[] ) {
      Inheritance h = new Inheritance();
      h.set( 6 );
      System.out.println( h.get() );
   }

   void set(
      int a ) {
      this.a = a;
   }

   int get() {
      System.out.println( a );
      return a;
   }
}

现在,当我将其编译为 In.class 并运行输出时,它运行的程序显示

6 6

当我使用 In.java 创建程序并运行名称为 Class Inheritance 的类时,它编译并给出了 Inheritance.class 。1.如果类名和文件名不同,编译器不会报错吗?2.当我运行java In它显示Error: Could not find or load main class In为 In.class 文件生成时为什么它在编译 In.java 时没有检测到它的类名称为 Inheritance ?那么一个类文件可以使用同一目录中的任何其他类文件吗?

4

1 回答 1

5

任何声明的类public都应保存在同名文件中。如果公共类的名称和包含它的文件不同,则会出现编译错误。未声明的类public可以保存在不同名称的文件中。

请注意,生成的类文件以 java 类命名,而不是文件名。看看下面的例子。

下图X中是任何有效名称(Foo和除外Bar)。

示例 1:

// filename X.java (doesn't compile)
public class Foo {

}
public class Bar {

}

编译器抱怨公共类Foo并且Bar不存在于它们自己的.java文件中。

示例 2:

// filename Foo.java (doesn't compile)
public class Foo {

}
public class Bar {

}

错误与上述相同,但仅适用于Bar这次。

示例 3:

// filename Foo.java (compiles)
public class Foo {

}
class Bar {

}

生成的文件是Foo.classBar.class

示例 4:

// filename X.java (compiles)
class Foo {

}
class Bar {

}

生成的文件是Foo.classBar.class

于 2013-11-01T17:22:44.353 回答