Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Aus wieviel Klassen darf in Java eine (Programm)besitzen?
Also der Standard-Classloader kann 2^31 Klassen verwalten. Man kann sich natürlich eigene schreiben, die mehr können. Oder man nimmt einfach ganz viele Classloader...
aber es kommt dann bestimmt zu einem problem beim compiler ,er weiß doch dann nicht wo er anfangen soll ,oder..?
denn ich hab ein programm mit 2 klassen geschrieben ,die eine klasse konnte lesen und bei der anderen klasse hat er bicht verstanden der compiler bzw stecken geblieben
denn ich hab ein programm mit 2 klassen geschrieben ,die eine klasse konnte lesen und bei der anderen klasse hat er bicht verstanden der compiler bzw stecken geblieben
denn ich hab ein programm mit 2 klassen geschrieben ,die eine klasse konnte lesen und bei der anderen klasse hat er bicht verstanden der compiler bzw stecken geblieben
Gute Tipps von Maki. Noch besser: mach dich ein wenig schlau im Umgang mit der IDE bzw. dem Compiler. Wenn dann Probleme auftreten, kannst du diese sicher sinnvoll formulieren. Dann erst mal Google, die Forensuche und die FAQs bemühen. Wenn das immer noch nicht hilfe (und damit kommt man schon weit!), dann bist du hier in guten Händen.
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
public class Test {
private static final String CURRENT_PATH = System.getProperty("user.dir");
private static final String CLAZZ_NAME = "A";
//same type!!
private static long classCounter = 0;
//max = Long.MAX - 1 : we need a final class to close the App!!!
private static final long MAX_CLASSES = 150000-1;
/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
File dir = new File(CURRENT_PATH +"/src/");
dir.mkdir();
for(double d = 0 ; d < MAX_CLASSES; d++) {
String content = createClass();
File file = createFile();
writeFile(file, content);
classCounter++;
}
String content = createFinalClass();
File file = createFile();
writeFile(file, content);
System.out.println(classCounter + " Classes created");
}
static File createFile() {
return new File(CURRENT_PATH +"/src/"+CLAZZ_NAME + classCounter + ".java");
}
static String createClass() {
String clazzName = CLAZZ_NAME + classCounter;
return
"public class " + clazzName +"{\n" +
"\tprivate Object object;" +
"\n"+
"\tpublic " + clazzName + "() { \n" +
"\t\tthis.object = new " + CLAZZ_NAME + (classCounter+1) + "();\n" +
"\t\tSystem.out.println(this.object);\n" +
"\t}" +
"\n"+
"\tpublic String toString() {" +
"\n\t\treturn \"" + clazzName + "\";\n\t }\n"+
"\tpublic static void main(String[] args) {\n" +
"\t\t" +clazzName + " inst = new " + clazzName + "();\n\t}\n"+
"}";
}
static String createFinalClass() {
String clazzName = CLAZZ_NAME + classCounter;
return
"public class " + clazzName +"{\n" +
"\n"+
"\tpublic " + clazzName + "() { \n" +
"\t\tSystem.out.println(\"This is the end\");\n" +
"\t}" +
"\n"+
"\tpublic String toString() {" +
"\n\t\treturn \"" + clazzName + "\";\n\t }\n"+
"\tpublic static void main(String[] args) {\n" +
"\t\t" +clazzName + " inst = new " + clazzName + "();\n\t}\n"+
"}";
}
static void writeFile(File file, String content) throws IOException {
BufferedWriter bw = new BufferedWriter(new FileWriter(file));
bw.write(content);
bw.flush();
bw.close();
}
}
xxx@xxx-desktop:/main/develop/test$ javac Test.java
xxx@xxx-desktop:/main/develop/test$ java Test
149999 Classes created
xxx@xxx-desktop:/main/develop/test$ cd src/
xxx@xxx-desktop:/main/develop/test/src$ javac A0.java
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOfRange(Arrays.java:3209)
at java.lang.String.<init>(String.java:216)
at java.lang.StringBuilder.toString(StringBuilder.java:430)
at sun.net.www.protocol.jar.Handler.parseContextSpec(Handler.java:120)
at sun.net.www.protocol.jar.Handler.parseURL(Handler.java:66)
at java.net.URL.<init>(URL.java:596)
at java.net.URL.<init>(URL.java:464)
at sun.misc.URLClassPath$JarLoader.checkResource(URLClassPath.java:671)
at sun.misc.URLClassPath$JarLoader.getResource(URLClassPath.java:756)
at sun.misc.URLClassPath.getResource(URLClassPath.java:168)
at java.net.URLClassLoader$1.run(URLClassLoader.java:192)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
at java.util.ResourceBundle$Control.newBundle(ResourceBundle.java:2383)
at java.util.ResourceBundle.loadBundle(ResourceBundle.java:1406)
at java.util.ResourceBundle.findBundle(ResourceBundle.java:1365)
at java.util.ResourceBundle.findBundle(ResourceBundle.java:1292)
at java.util.ResourceBundle.findBundle(ResourceBundle.java:1292)
at java.util.ResourceBundle.getBundleImpl(ResourceBundle.java:1234)
at java.util.ResourceBundle.getBundle(ResourceBundle.java:715)
at com.sun.tools.javac.util.Messages.add(Messages.java:66)
at com.sun.tools.javac.util.Messages.<init>(Messages.java:52)
at com.sun.tools.javac.main.Main.getLocalizedString(Main.java:447)
at com.sun.tools.javac.main.Main.resourceMessage(Main.java:421)
at com.sun.tools.javac.main.Main.compile(Main.java:364)
at com.sun.tools.javac.main.Main.compile(Main.java:279)
at com.sun.tools.javac.main.Main.compile(Main.java:270)
at com.sun.tools.javac.Main.compile(Main.java:69)
at com.sun.tools.javac.Main.main(Main.java:54)
xxx@xxx-desktop:/main/develop/test/src$ ls | wc -l
157367
xxx@xxx-desktop:/main/develop/test/src$
Auch dem javac kann man ja mehr Heap gönnen; mit javac -J-Xmx500m *.java sollte schon mehr möglich sein. Aber eigentlich war die Frage ja, aus wievielen Klassen ein Programm bestehen kann, und nicht, wieviele man gleichzeitig übersetzen kann.
Auch dem javac kann man ja mehr Heap gönnen; mit javac -J-Xmx500m *.java sollte schon mehr möglich sein. Aber eigentlich war die Frage ja, aus wievielen Klassen ein Programm bestehen kann, und nicht, wieviele man gleichzeitig übersetzen kann.
Schon klar.... sollte mehr ein realistische Beispiel sein. Bin zwar grad 32bit am auskitzeln mit 150'000 Klassen. Aber da tut sich grad noch nix..(P4 2.8 mit HT 40min++)...kann dauern.....wenn zu lang ..Ctrl-C oder kill -9 (sonst gibts ein edit)
EDIT:
also 150'000 kompiliernen scluckt er noch...2^31 ..hmm auf BigInt umstellen und testen...heut nicht mehr...
Vielleicht zeig ich euch was ich nicht so verstehe ,hab zwei klassen ein mal class Multitext und HelloText
bitte bombadiert mich nicht mit krassen fremdwörter ,wäre mir lieb
ich komm schon sehr gut zurecht mit programmieren ,nun bin ich ein punkt gelangt bei java , wo es um objekte klassen atribute methoden geht (Subklassen Superklassen ) und bin gutdabei ,habe da paar lücken und würde gern so verstehen mit dem compiler
Code:
public class MultiText {
public static void main (String[] args) {
HelloText engl = new HelloText();
HelloText germ = new HelloText();
germ.messageText = "Hallo, liebe Leute!";
HelloText cat = new HelloText();
cat.messageText = "Miau!";
engl.printText();
germ.printText();
engl.printText();
cat.printText();
engl.printText();
}
}
public class HelloText {
public String messageText = "Hello World!";
public void printText() {
System.out.println (messageText);
}
Wenn Du a) am Ende noch eine schließende geschweifte Klammer ergänzt und b) vor der zweiten Klasse das public entfernst, funktioniert es.
In einer Datei darf es immer nur eine als public markierte Klasse geben; ein Programm darf aber durchaus aus Klassen bestehen, die in unterschiedlichen Dateien definiert sind. Du kannst also auch die zweite Klasse in einer eigenen Datei (HelloText.java) speichern; dann darf sie ruhig public sein.
Mit Subklassen und Superklassen (also mit Ableitung) hat diese Beispiel allerdings wenig zu tun.
aha danke hat funktioniert ,ich hab was neues ausprobiert ,ich hab in einer klasse eine klasse reingepackt , also class HelloText in public class MultiText...Warum Funktioniert das Programm nicht mehr , der Compiler hat Probleme dann bei new HelloText (); bzw er kommt da nicht mehr weiter...
Code:
public class MultiText {
public static void main (String[] args) {
HelloText engl = new HelloText();
HelloText germ = new HelloText();
germ.messageText = "Hallo, liebe Leute!";
HelloText cat = new HelloText();
cat.messageText = "Miau!";
engl.printText();
germ.printText();
engl.printText();
cat.printText();
engl.printText();
class HelloText {
public String messageText = "Hello World!";
public void printText() {
System.out.println (messageText);
}
}
aha danke hat funktioniert ,ich hab was neues ausprobiert ,ich hab in einer klasse eine klasse reingepackt , also class HelloText in public class MultiText...Warum Funktioniert das Programm nicht mehr , der Compiler hat Probleme dann bei new HelloText (); bzw er kommt da nicht mehr weiter...
Code:
public class MultiText {
public static void main (String[] args) {
HelloText engl = new HelloText();
HelloText germ = new HelloText();
germ.messageText = "Hallo, liebe Leute!";
HelloText cat = new HelloText();
cat.messageText = "Miau!";
engl.printText();
germ.printText();
engl.printText();
cat.printText();
engl.printText();
class HelloText {
public String messageText = "Hello World!";
public void printText() {
System.out.println (messageText);
}
}
}
Du postest dann doch nur eine Variante. Mach Dir doch bitte mal die Mühe und poste a) was Deiner Meinung nach gehen sollte aber doch nicht geht und b) was Deiner Meinung nicht gehen sollte aber doch geht.