今天,我们将重现Java中的包不存在错误,以了解该错误及其原因。 此外,我们还将借助代码示例了解其解决方案。
Java中不存在包的演示
示例代码(Students.java 文件):
package name;
public class Students implements Comparable<Students>{
private String studentFirstName;
private String studentLastName;
public Students(String studentFirstName, String studentLastName){
this.studentFirstName = studentFirstName;
this.studentLastName = studentLastName;
}
public String getStudentFirstName() {
return studentFirstName;
}
public void setStudentFirstName(String studentFirstName) {
this.studentFirstName = studentFirstName;
}
public String getStudentLastName() {
return studentLastName;
}
public void setStudentLastName(String studentLastName) {
this.studentLastName = studentLastName;
}
/**
*
* @param other
* @return
*/
@Override
public int compareTo(Students other) {
int compareResults = this.studentLastName
.compareTo(other.studentLastName);
if(compareResults == 0){
if(this.studentFirstName.chars().count() ==
other.studentFirstName.chars().count()) {
compareResults = 0;
return compareResults;
}
else if(this.studentFirstName.chars().count() >
other.studentFirstName.chars().count()){
compareResults = 1;
return compareResults;
}
else{
compareResults = -1;
return compareResults;
}
}
else{
return compareResults;
}
}
}
示例代码(StudentMain.java 文件):
import names.Students;
public class StudentMain {
public static void main(String[] args) {
Students student1 = new Students ("Ali", "Ashfaq");
Students student2 = new Students ("Ali", "Ashfaq");
System.out.println("Comparison 1: " + student1.compareTo(student2));
Students student3 = new Students ("Ali", "Ashfaq");
Students student4 = new Students ("Zoya", "Ashfaq");
System.out.println("Comparison 2: " + student3.compareTo(student4));
Students student5 = new Students ("Mehr-un-nissa", "Ashfaq");
Students student6 = new Students ("Hina", "Ashfaq");
System.out.println("Comparison 3: " + student5.compareTo(student6));
}
}
我们有一个目录 Desktop/java/stuff/com/name ,除了包含 main()
方法的文件外,所有 .java 文件都位于该目录中。 对于上面的代码示例,我们在 Desktop/java/stuff/com/name 目录中拥有 Students.java,而具有 main()
方法的 StudentMain.java 位于 Desktop/java/stuff/com 目录中。
同样重要的是要注意,我们已将 Desktop/java/stuff 设置为我们的 CLASSPATH
。
让我们理解代码来找出错误及其原因。
上面的代码比较学生的姓氏并将结果存储在compareResults变量中。 该结果进一步用于比较他们的名字。 如何?
如果姓氏匹配,结果将为 true,意味着 0。因此,它会跳转到 if 条件并评估名字中的字符数是否匹配。
名字比较的结果基于以下条件:
- 如果 this.count 等于 other.count,则结果将为 0。
- 如果 this.count 大于 other.count,则结果将为 1。
- 如果 this.count 小于 other.count,则结果将为 -1。
但是,当我们尝试编译该程序时,它会出现以下错误。
C:\Users\MEHVISH ASHIQ\Desktop\java\stuff\com>javac StudentMain.java
StudentMain.java:1: error: package names do not exist
import names.Students;
这意味着什么?为什么我们会面临这个问题? 此错误意味着我们尝试导入的包不存在。
造成这种情况的原因可能有多种,下面列出了所有原因:
我们导入了不正确的包,或者在导入包时可能出现一些拼写错误。
重新检查所有文件是否位于正确的子目录中。
如果我们将 CLASSPATH
设置为 Desktop/java/stuff,则使用包名称定义的文件; 必须位于 Desktop/java/stuff/com/name 目录中。 您可以查看此内容以了解如何设置 CLASSPATH。
确保所有 Java 源文件都位于正确的子目录中。 我们还必须确保 Java 源文件编译在 Desktop/java/stuff/com/name 目录中。
为什么? .class 文件必须位于 CLASSPATH 中。 请记住,.java 文件不需要位于 CLASSPATH
中,而是位于 SOURCEPATH 中,而 .class 文件是在我们使用 javac 命令编译文件时生成的。
如果我们没有正确使用内置包,我们也会收到此错误。 请看下面的代码:
示例代码:
public class Test{
public static void main(String[] args){
/*
Solution: This line must be as follows:
System.out.println("Hi!");
*/
system.out.println("Hi!");
}
}
错误描述:
Test.java:3: error: package system does not exist
system.out.println("Hi!");
^
1 error
Resolve Package Does Not Exist Error in Java
示例代码(Students.java 文件):
package name;
public class Students implements Comparable<Students>{
private String studentFirstName;
private String studentLastName;
public Students(String studentFirstName, String studentLastName){
this.studentFirstName = studentFirstName;
this.studentLastName = studentLastName;
}
public String getStudentFirstName() {
return studentFirstName;
}
public void setStudentFirstName(String studentFirstName) {
this.studentFirstName = studentFirstName;
}
public String getStudentLastName() {
return studentLastName;
}
public void setStudentLastName(String studentLastName) {
this.studentLastName = studentLastName;
}
/**
*
* @param other
* @return
*/
@Override
public int compareTo(Students other) {
int compareResults = this.studentLastName
.compareTo(other.studentLastName);
if(compareResults == 0){
if(this.studentFirstName.chars().count() ==
other.studentFirstName.chars().count()) {
compareResults = 0;
return compareResults;
}
else if(this.studentFirstName.chars().count() >
other.studentFirstName.chars().count()){
compareResults = 1;
return compareResults;
}
else{
compareResults = -1;
return compareResults;
}
}
else{
return compareResults;
}
}
}
示例代码(StudentMain.java 文件):
import name.Students;
public class StudentMain {
public static void main(String[] args) {
Students student1 = new Students ("Ali", "Ashfaq");
Students student2 = new Students ("Ali", "Ashfaq");
System.out.println("Comparison 1: " + student1.compareTo(student2));
Students student3 = new Students ("Ali", "Ashfaq");
Students student4 = new Students ("Zoya", "Ashfaq");
System.out.println("Comparison 2: " + student3.compareTo(student4));
Students student5 = new Students ("Mehr-un-nissa", "Ashfaq");
Students student6 = new Students ("Hina", "Ashfaq");
System.out.println("Comparison 3: " + student5.compareTo(student6));
}
}
由于在 StudentMain.java 文件中导入了错误的包,我们得到了包不存在错误。 我们导入的是 import name.Students;
,而它必须是 import name.Students;
。
您可能会看到下面的所有命令,包括我们如何设置 CLASSPATH
。
输出:
C:\Users\MEHVISH ASHIQ>cd Desktop/java/stuff
C:\Users\MEHVISH ASHIQ\Desktop\java\stuff>set classpath=.;
C:\Users\MEHVISH ASHIQ\Desktop\java\stuff>cd com/name
C:\Users\MEHVISH ASHIQ\Desktop\java\stuff\com\name>javac Students.java
C:\Users\MEHVISH ASHIQ\Desktop\java\stuff\com\name>cd..
C:\Users\MEHVISH ASHIQ\Desktop\java\stuff\com>javac StudentMain.java
C:\Users\MEHVISH ASHIQ\Desktop\java\stuff\com>java StudentMain
Comparison 1: 0
Comparison 2: -1
Comparison 3: 1