前言:
眼前你们对“java文件后缀名获取”可能比较重视,各位老铁们都想要了解一些“java文件后缀名获取”的相关资讯。那么小编同时在网上网罗了一些有关“java文件后缀名获取””的相关内容,希望各位老铁们能喜欢,兄弟们一起来了解一下吧!原文4.8.4 在包中增加类
要想将类放入包中,就必须将报名放在源文件的开头,即放在定义这个包中各个类的代码之前。例如,程序4-8 中的文件Employee.java 开头是这样的:
package com.horstmann.corejavapublic class Employee{ // ... 类代码}
如果没有在源文件中放置package 语句,那么这个原文件中的类就属于无报名(unnamed package)。无名包没有包名。到目前为止,我们定义的所有类都在无名包中。
将源文件放到与完整包名匹配的子目录中。例如,com.horstmann.corejava包中的所有源文件应该放置在子目录 com/horstmann/corejava中(Windows 中则是 com\horstmann\corejava)。编译器将类文件也放在相同的目录结构中。
程序清单4-7 和程序清单4-8 中的程序分别放在两个包中:PackageTest 类属于无名包;Employee 类属于 com.horstmann.corejava 包。因此,Employee.java 文件必须在子目录 com/horstmann/corejava中。换句话说,目录结构如下所示:
. (baseDirectory) 当前根目录
—PackageTest.java
—PackageTest.class
—com/
———horstmann/
————————corejava/
————————————Employee.java
————————————Employee.class
要想编译这个程序,只需要切换到基目录,并运行以下命令
javac PackageTest.java
编译器就会自动地查找文件 com/horstmann/corejava/Employee.java 并进行编译
下面看一个更加实际的例子。在这里没有使用无名包,而是将类分别放在不同的包中(com.horstmann.corejava 和 com.mycompany)
. (baseDirectory) 当前根目录
—com/
———horstmann/
————————corejava/
————————————Employee.java
————————————Employee.class
———mycompany/
—————————PayrollApp.java
—————————PayrollApp.class
在这种情况下,仍然要从基目录编译和运行类,即包含com目录的目录:
javac com/mycompany/PayrollApp.java
java com.mycompany.PayrollApp
再次强调,编译器处理文件(带有文件分隔符和扩展名 .java的文件),而Java解释器加载类(带有 . 分隔符)
提示:从下一章开始,我们将对源代码使用包。这样一来,就可以为各章建立一个IDE项目,而不是各小节分别建立项目。
警告:编译器在编译源文件的时候不检查目录结构。例如,假设一个源文件开头有以下指令
package com.mycompany;
即使这个源文件不在于子目录 com/mycompany 下,这个文件也可以编译。如果它不依赖于其他包,就可以通过编译而不会出现编译错误。但是,最终的程序将无法运行,除非先将所有类文件转移到正确的位置上。如果包与目录不匹配,虚拟机就找不到这些类。
程序清单 4-7 PackageTest.java
import com.horstmann.corejava.*;// the Employee class is defined in that packageimport static java.lang.System.*;/** * This program demonstrates the use of packages. * @version 1.11 2004-02-19 * @author Cay Horstmann */public class PackageTest{ public static void main(String[] args) { // because of the import statement, we don't have to use // com.horstmann.corejava.Employee here var harry = new Employee("Harry Hacker", 50000, 1989, 10, 1); harry.raiseSalary(5); // because of the static import statement, we don't have to use System.out here out.println("name=" + harry.getName() + ",salary=" + harry.getSalary()); }}
程序清单 4-8 PackageTest/com/horstmann/corejava/Employee.java
package com.horstmann.corejava;// the classes in this file are part of this packageimport java.time.*;// import statements come after the package statement/** * @version 1.11 2015-05-08 * @author Cay Horstmann */public class Employee{ private String name; private double salary; private LocalDate hireDay; public Employee(String name, double salary, int year, int month, int day) { this.name = name; this.salary = salary; hireDay = LocalDate.of(year, month, day); } public String getName() { return name; } public double getSalary() { return salary; } public LocalDate getHireDay() { return hireDay; } public void raiseSalary(double byPercent) { double raise = salary * byPercent / 100; salary += raise; }}
标签: #java文件后缀名获取