2016-07-10 14 views
1

Das ist mein Java-Code:Wie einzelne Java-Datei mit mehreren Top-Level-Klassen kompilieren

import java.io.*; 
import java.util.*; 
public class student 
{ 
    String name; 
    int age; 
    float cgpa; 
} 
public class getdata 
{ 
    public static void main(String args[]) 
    { 
     int n; 
     Scanner in=new Scanner(System.in); 
     n=in.nextInt(); 
     student[] s=new student[n]; 
     for(int i=0;i<n;i++) 
     { 
      s[i]=new student(); 
      s[i].name=in.nextLine(); 
      s[i].age=in.nextInt(); 
      s[i].cgpa=in.nextFloat(); 
     } 
     System.out.println(); 
     System.out.println("Name\tAge\tCGPA\n"); 
     for(int i=0;i<n;i++) 
     { 
      System.out.println(s[i].name+"\t"+s[i].age+"\t"+s[i].cgpa+"\n"); 
     } 
    } 
} 

Wenn ich das Programm zu kompilieren, gibt es den Fehler, dass jede Klasse in einer anderen Datei sein sollte. Wie kann ich das ohne Fehler kompilieren? (Ich weiß, das ist nicht die beste Praxis, aber ich brauche diese in der gleichen Datei zu tun.)

+0

Was ist der Dateiname, es zu kompilieren verwenden? – VatsalSura

+4

Sie können nur eine öffentliche Top-Level-Klasse in einer Java-Datei haben. –

Antwort

2

Die allgemeine Regel ist, dass Sie nur eine öffentliche Klasse in einer Java-Datei haben können.

Wenn Sie möchten, dass es von überall sichtbar ist (dies basiert auf Ihrem Kommentar), können Sie die Klasse als statisch public innerhalb der getdata deklarieren. überall für Instanziierung

public class getdata { 
    public static class user { 
    //class definition here 
    } 
} 

nun Ihre Benutzerklasse zur Verfügung:

Es wird so etwas wie dieses.

+0

Aber wir wären nicht in der Lage, die zweite Klasse zu verwenden im Programm, wenn es "privat" oder "geschützt" ist. Recht? – VatsalSura

+2

Es muss nicht privat oder geschützt sein. Sie können es beispielsweise als statisch statisch deklarieren. Auf diese Weise wird es von überall zugänglich sein. –

1

Machen Sie die Klasse Student eine innere Klasse:

import java.io.*; 
import java.util.*; 
public class getdata 
{ 
    public static void main(String args[]) 
    { 
     int n; 
     Scanner in=new Scanner(System.in); 
     n=in.nextInt(); 
     student[] s=new student[n]; 
     for(int i=0;i<n;i++) 
     { 
      s[i]=new student(); 
      s[i].name=in.nextLine(); 
      s[i].age=in.nextInt(); 
      s[i].cgpa=in.nextFloat(); 
     } 
     System.out.println(); 
     System.out.println("Name\tAge\tCGPA\n"); 
     for(int i=0;i<n;i++) 
     { 
      System.out.println(s[i].name+"\t"+s[i].age+"\t"+s[i].cgpa+"\n"); 
     } 
    } 
    public static class student 
    { 
     String name; 
     int age; 
     float cgpa; 
    } 

} 

Dateiname getdata.java sein muss. Und lies über die Java-Namenskonvention. Klassennamen sollten mit Großbuchstaben beginnen.

+1

und machen Sie es zu einer [static nested] (https://docs.oracle.com/javase/tutorial/java/javaOO/nested.html) Klasse ('public static class student') oder sonst wird es nicht kompiliert :) – zapl

+0

Bitte halten Sie sich an die [Java Namenskonventionen] (http://www.oracle.com).com/technetwork/java/codeconventions-135099.html) und starten Klassen mit einem Großbuchstaben. Warum dies auch für @AlexanderPetrov das OP gesagt werden kann Ich werde es auf Ihren Beitrag kommentiert, da Sie bei SO den höchsten Ruf hier auf SO haben und deshalb wahrscheinlich besser hätte wissen müssen –

0

können Sie erstellen eine .class-Datei und führen Sie dann einfach Klasse, die Sie wollen

javac FileName.java

java fileName_containsMainMethod

EDIT Klasse kann nicht öffentlich

zB kompilieren die folgende Klasse Betrachten wird als Name Test.java gespeichert und enthält zwei Klassen unter single Name Test .java

class A 
{ 
public static void main(String[] a) 
{ 
System.out.println("Hello from A"); 
} 
} 

class B 
{ 
public static void main(String[] a) 
{ 
System.out.println("Hello from B"); 
} 
} 

Nun ist diese Sie ausführen müssen javac Test.java

Folgendes tun, um Ausgabe von Class A

java A

Um Ausgabe von Klasse zu erhalten B

java B

HINWEIS aus öffentlichem Zugriffsmodifikator entfernen class

+0

Fehler wird während der Kompilierung itslef geworfen –

Verwandte Themen