如何使用Javac将类导入到Java程序中?
问题描述:
我正在使用终端和Javac来编译和运行我的java程序。单个程序工作正常。但是,当我想要将一个类导入到我的主Java程序中时,我收到错误。
源代码 - 我的课(Name.java)
public class Name {
//Fields
private String firstName;
private String familyName;
//Constructors
public Name() {
firstName = "";
familyName = "";
}
public Name(String firstName, String familyName) {
this.firstName = firstName;
this.familyName = familyName;
}
//Methods
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public void setFamilyName(String familyName) {
this.familyName = familyName;
}
public String getFirstName() {
return firstName;
}
public String getFamilyName() {
return familyName;
}
public String getFullName() {
if (firstName.equals("") && familyName.equals("")) {
return "";
} else {
return firstName + " " + familyName;
}
}
@Override
public String toString() {
return "Name:[firstName=" + firstName + ", familyName=" + familyName + "]";
}
}
主 - NameDemo.java
import Name;
public class NameDemo {
public static void main(String[] args) {
/*
* See below evidence of how arrays can store elements of a custom reference
* type that you create (Name in this case), as well as both existing
* reference types (e.g. String) or primitive types (e.g. int), that you have
* previously worked with.
*/
//declare array to hold four Name objects
Name[] friends = new Name[4];
//create Name object and assign reference into array
Name joe = new Name("Joe", "Bloggs");
friends[0] = joe;
//create Name objects and assign reference directly into array
friends[1] = new Name("Fred", "Perry");
friends[2] = new Name("Diti", "Hammond");
friends[3] = new Name("Bulsar", "Raymond");
//loop through each element
for(int i = 0; i < friends.length; i++) {
//use accessor method to output full name of each
System.out.println(friends[i].getFullName());
}
//declare boolean used as a flag
boolean exists = false;
//loop through each Name object using a for-each loop (you will see more on this when we cover ArrayLists)
for (Name nm : friends) {
//check family name
if (nm.getFamilyName().equals("Smith")) {
exists = true;
}
}
//output result of search
if (exists) {
System.out.println("There is a person with family name of Smith");
} else {
System.out.println("There is not a person with family name of Smith");
}
//Checking output of toString
System.out.println("\n" + joe.toString());
}
}
问题
这两个文件都在里面了相同的目录。除此之外,我已将该类导入到主程序源代码中。然后我继续尝试编译这两个。
import Name;
javac Name.java
javac NameDemo.java
NameDemo.java:4: error: '.' expected
import Name;
^
NameDemo.java:4: error: ';' expected
import Name;
^
2 errors
为什么会发生这种情况,我应该编译类?或者该类需要以.class还是.java结尾?以及这是导入的语法问题?
答
所以:
- 你应该下载IDE,我建议你的Eclipse。这会帮助你稍后编程。
- 您应该将每个文件的名称传递给javac。通过这种方式,javac将知道#2类的方法存在,并且不需要进行救援。
- 有没有需要导入 - 文件是在同一个包 - 这意味着,在同一目录中。 Javac希望你通过这种格式的东西:
import packagename.classname;
,而你只提供classname
。
类的字节码编译需要有扩展的.class,而类的源代码,就像你写的,需要有扩展的.java。
+0
Downvoter,小心告诉我我错了什么? –
答
请尝试使用以下命令。在文件所在的同一目录中。
javac * .java
+2
这不会帮助导入问题。 –
您无法从默认包中导入类。好消息是:你不需要,因为两个班都住在那里。简单地省略'import'语句。 – Marvin