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

标签 java linux javac

简介

我正在使用终端和 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)需要以 .class 或 .java 结尾?以及这是导入的语法问题吗?

最佳答案

所以:

  1. 您应该下载IDE,我建议您使用Eclipse。这将有助于您以后编程。
  2. 您应该将每个 文件的名称传递给javac。这样 javac 就会知道类 #2 中的方法存在并且不需要退出。
  3. 不需要导入 - 文件在同一个包中 - 也就是说,在同一个目录中。 Javac 希望您以这种格式传递一些内容:import packagename.classname; 而您只提供了 classname

作为编译字节码的类需要具有扩展名.class,而像您编写的源代码中的类需要具有扩展名.java

关于java - 如何使用 Javac 将类导入到 java 程序中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46862038/

相关文章:

java - 我可以阻止 javac 从我们的第三方 jar list 访问类路径吗?

Android 从命令行构建 .jar 失败

java - 如何按属性对自定义对象的 vector (即其他自定义对象的映射)进行排序?

Java:可以调用未知参数的函数

java - 如何将 Stream<int[]> 转换为 Stream<Integer>

java - 如何在java中打印PDF文件而不进行打印预览

linux - 不安全字符串处理函数的完整列表及其更安全的 linux 替代品

linux - 无法在 redhat linux 服务器上安装 git

java - linux spring 工具套件(eclipse)从终端启动而不是从桌面启动

java - 如何编译为目标 Java 1.0