如何使用Javac将类导入到Java程序中?

问题描述:

介绍如何使用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结尾?以及这是导入的语法问题?

+1

您无法从默认包中导入类。好消息是:你不需要,因为两个班都住在那里。简单地省略'import'语句。 – Marvin

所以:

  1. 你应该下载IDE,我建议你的Eclipse。这会帮助你稍后编程。
  2. 您应该将每个文件的名称传递给javac。通过这种方式,javac将知道#2类的方法存在,并且不需要进行救援。
  3. 没有需要导入 - 文件是在同一个包 - 这意味着,在同一目录中。 Javac希望你通过这种格式的东西:import packagename.classname;,而你只提供classname

类的字节码编译需要有扩展的.class,而类的源代码,就像你写的,需要有扩展的.java

+0

Downvoter,小心告诉我我错了什么? –

请尝试使用以下命令。在文件所在的同一目录中。

javac * .java

+2

这不会帮助导入问题。 –