2017-10-21 103 views
0

PrésentationComment importer une classe dans un programme Java en utilisant Javac?

J'utilise le terminal et Javac pour compiler et exécuter mes programmes java. Les programmes individuels fonctionnent bien. Cependant, lorsque je veux importer une classe dans mon programme Java principal, je reçois des erreurs.

Code source - ma classe (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 + "]"; 
} 
} 

Main - 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()); 

} 

} 

Le problème

Les deux fichiers sont à l'intérieur du même répertoire. En plus de cela, j'ai importé la classe dans le code source du programme principal. Je vais ensuite essayer de compiler les deux.

import Nom;

javac Name.java 
javac NameDemo.java 
NameDemo.java:4: error: '.' expected 
import Name; 
     ^
NameDemo.java:4: error: ';' expected 
import Name; 
      ^
2 errors 

Pourquoi ce produit, suis-je censé compiler la classe? ou la classe doit-elle se terminer par .class ou .java? ainsi que ceci est-ce un problème de syntaxe avec l'importation?

+1

Vous ne pouvez pas importer des classes du package par défaut. Bonne nouvelle: vous n'en avez pas besoin car les deux classes y résident. Il suffit d'omettre l'instruction 'import'. – Marvin

Répondre

0

Alors:

  1. Vous devez télécharger IDE, je vous recommande Eclipse. Cela vous aidera à programmer plus tard.
  2. Vous devez transmettre les noms de TOUS les fichiers à javac. De cette façon, javac saura que la méthode de la classe 2 existe et qu'il n'y a pas besoin de renflouer.
  3. Il est NO besoin d'importer - les fichiers sont dans le même paquet - ce qui signifie, dans le même répertoire. Javac voulait que vous passiez quelque chose dans ce format: import packagename.classname; pendant que vous fournissiez seulement classname.

classe comme bytecode compilé doit avoir l'extension .class, tandis que la classe dans le code source comme vous avez écrit, doit avoir l'extension .java.

+0

Downvoter, attention à me dire ce que je me suis trompé? –

-1

Essayez avec la commande suivante. Dans le même répertoire que les fichiers.

javac * .java

+2

Cela ne va pas aider avec le problème d'importation. –