Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中的多个类和主方法,以及包、名称空间_Java_Namespaces_Packages - Fatal编程技术网

Java中的多个类和主方法,以及包、名称空间

Java中的多个类和主方法,以及包、名称空间,java,namespaces,packages,Java,Namespaces,Packages,在Eclipse中.java文件名必须与类名相同。这在任何情况下都是真的,还是只适用于Eclipse?对于main方法,它看起来像C中的main函数,但问题是,如果我有两个类都有自己的main方法,并且可以将它们链接在一起呢?另外,我可以在一个.java文件中编写两个类吗?我在Windows中使用Eclipse,它与Linux版本相同吗 对于包,我的书告诉我包就是目录。因此,要指定文件所属的包,我是否只需要说“package my_pack”?我是否需要创建一个像/src/my_pack这样的目

在Eclipse中.java文件名必须与类名相同。这在任何情况下都是真的,还是只适用于Eclipse?对于main方法,它看起来像C中的main函数,但问题是,如果我有两个类都有自己的main方法,并且可以将它们链接在一起呢?另外,我可以在一个.java文件中编写两个类吗?我在Windows中使用Eclipse,它与Linux版本相同吗

对于包,我的书告诉我包就是目录。因此,要指定文件所属的包,我是否只需要说“package my_pack”?我是否需要创建一个像/src/my_pack这样的目录并将我的.java文件放在其中

第三,什么是名称空间?它与包和类有什么关系

1)这是Java的东西。文件名必须与文件中的公共类匹配。如果没有公共类,您几乎可以命名任何东西。如果有两个类具有一个main方法,那么其中一个可以调用另一个。它们像在C中一样相互关联,只是相互编译。在同一个文件中可以有两个类;只有一个可以公开。Eclipse在不同的操作系统中非常相似。对于操作系统的差异,存在一些差异

2) 我的包没有遵循好的命名约定。my.pack或com.my是更好的名称。但是,是的,您希望创建该目录

3) Java没有使用名称空间这个术语,但我说包就像名称空间一样

在Eclipse中.java文件名必须与类名相同。这在任何情况下都是真的,还是只适用于Eclipse

java文件必须与包含的公共类具有相同的名称

对于main方法,它看起来像C中的main函数,但问题是,如果我有两个类都有自己的main方法,并且可以将它们链接在一起呢

是的,在同一个项目中可以有两个类,它们都有一个
静态void main(String[]args){…}
方法,但是只有1个类是项目的主类,您应该通过在清单文件中声明它来决定哪个类是主类

阅读更多关于此的信息:

另外,我可以在一个.java文件中编写两个类吗

可以,只要文件中只有一个类且该类的名称与文件的名称相同,就可以:

java文件

package edu.home.bean;

public class TheClass {
    class SomeClass {
    }
}

class AnotherClass {
}
编辑:

当您没有定义类的公共访问权限时,它可能具有
默认
私有
访问权限,具体取决于声明的位置。在上面的示例中,
SomeClass
将具有
private
访问权限,并且只能通过
class
访问,而
另一个类可以从同一包中的任何类访问。这意味着,与
edu.home.bean
不同的包中的类不能访问另一个类

package edu.home.control;

public class ControlClass {
    //this line compiles fine
    private TheClass x;
    //compilation error, it can't access for being in a different package
    private AnotherClass y;
    //compilation error, it can't access because its scope works only in TheClass
    private SomeClass z;
}
我在Windows中使用Eclipse,它与Linux版本相同吗

Java的一个优点是,代码与平台无关(不像C或C++),因此,只要Java虚拟机(JVM)安装在要运行/开发Java项目的操作系统中,就可以将代码从Windows移植到Linux和viceversa

对于包,我的书告诉我包就是目录。因此,要指定文件所属的包,我是否只需要说“package my_pack”

是的,这本书是对的。当您有一个Java项目时,比如MyFirstJavaProject,您可以设置一个源文件夹以及该文件夹中的包。这些包将是源文件夹的子文件夹。例如:

Eclipse中的项目结构:

+ MyFirstJavaProject
  + src
    + edu.home.bean
    + edu.home.control
    + edu.home.gui
    + another.package


+ MyFirstJavaProject
  + src
    + edu
      + home
        + bean
          ... class files
        + control
          ... class files
        + gui
          ... class files
    + another
      + package
我是否需要创建一个像/src/my_pack这样的目录并将我的.java文件放在其中

您可以手动完成,也可以让IDE(在本例中为Eclipse)为您完成,就像在包中创建包和类一样简单

第三,什么是名称空间?它与包和类有什么关系

Java不使用名称空间,而是使用包来促进类的管理/关系。您可以从另一个包(第一种形式)导入类,或者使用具有完整包名的类(第二种形式)

第一种形式的示例:

package package1;

public class Package1Class {
}

package package2;

import package1.Package1Class;

public class Package2Class {
    private Package1Class x;

    public Package2Class (Package1Class x) {
        this.x = x
    }
}
第二种形式的示例:

package package1;

public class Package1Class {
}

package package2;

public class Package2Class {
    //look that there is not use of the import statement, however everytime you need
    //to call Package1Class, you should provide the full package name
    private package1.Package1Class x;

    public Package2Class (package1.Package1Class x) {
        this.x = x
    }
}

java中的规则是公共类名与.java文件名相同,而与任何IDE无关


如果一个.java文件中只有一个类的名称与公共类的名称相同,则可以有多个类。

如果一个.java文件中没有公共类,该怎么办?我的意思是,既然没有人是公共的,谁能访问这些类?对于两个都使用main方法的类,“一次可以调用另一个”是什么意思?你是说一个main方法可以调用另一个main,比如secondclass.main(),还是一个程序在编译后可以调用另一个要运行的程序?如果是前一种情况,我们只想编译第一个类,对吗?如果没有公共类,同一个包中的其他类可以访问它。一个main方法将包含SecondClass.main(args),它将调用另一个方法。您需要在某个时候编译这两个方法,以便.class文件存在。但是,既然两个主要方法都可以运行,并且都已编译,那么系统如何知道哪一个是真正的主要方法呢?这听起来像是C语言中的两个主要功能,系统可能会把它们混在一起。它也会运行你告诉它的那个。如果运行“JavaClassOne”,它将运行ClassOne中的main方法。如果您运行“java ClassTwo”,它将运行位于ClassTwo中的main方法。你看,每个类,即使在一个文件中有数百个,也会在自己的.class文件中编译。然后,通过指定java的名称来告诉java要运行哪一个。您指定的方法应具有
公共静态void main
方法。