2016-04-13 23 views
-5
public class CompileTest{ 
    public static void main(String args[]){ 
     Class.forName("string"); 
     System.out.println("Inside main"); 
     OutputStream o=new ByteArrayOutputStream(); 
    } 
} 

Dies ist mein Code, wenn ich das kompilieren dannunerwartetes Ergebnis in Java

C:\Users\MOHD RASHID\Documents\java>javac CompileTest.java 

CompileTest.java:8: error: incompatible types: ByteArrayOutputStream cannot be converted to OutputStream 
OutputStream o=new ByteArrayOutputStream(); 

erzeugt wird, aber nicht erzeugt werden sollte und forName() -Methode throw ClassNotFoundException die Zeitausnahme ist kompilieren und damit gefangen werden müssen oder handle aber dieser Fehler wird auch nicht erzeugt? Bitte sag mir, was soll ich tun?

+0

Für Ihren zweiten Teil der Frage (in Bezug auf den OutputStream) importieren Sie die richtigen Klassen? Du kompilierst Code und läufst gut, wenn ich den Aufruf 'Class.forName' in try/catch umgehe. –

+0

Ich kann Ihr Problem nicht reproduzieren. Hast du vielleicht deine eigene 'OutputStream' oder' ByteArrayOutputStream' Klasse erstellt? Auch dieser Code wird nicht aus anderen Gründen kompiliert: Sie behandeln keine Ausnahmen, die möglicherweise aus 'Class.forName' stammen. – Pshemo

+1

Welche Pakete importieren Sie? Bei der Fehlermeldung sieht es so aus, als ob Sie OutputStream oder ByteArrayOutputStream irgendwo definiert haben und nicht die Java-Standardjets –

Antwort

2
Class.forName("string") 

Dies würde werfen könnte eine ClassNotFoundException wenn keine Klasse mit dem Namen Zeichenfolge gefunden werden. Vielleicht meintest du String.

Trotzdem ClassNotFoundException ist eine geprüfte Ausnahme und jede Methode, die eine überprüfte Ausnahme auslöst, sollte in einen try-catch-Block gehüllt werden und die entsprechende Ausnahme behandelt werden. Eine andere Option besteht darin, zu deklarieren, dass main() stattdessen diese geprüfte Ausnahme auslöst.

Es sollte keine Fehler für die folgende Zeile sein, solange Ihre Importe nicht in Konflikt zu tun oder wenn der falsche Output oder ByteArrayOutputStream importiert wird:

OutputStream o=new ByteArrayOutputStream(); 
3

Ihr Compiler-Fehler aufgrund der Tatsache, wahrscheinlich ist, dass Der in Ihrem Code angezeigte Typ OutputStream ist etwas anderes als java.io.OutputStream. Überprüfen Sie Ihre Importanweisungen, und wenn Sie ein OutputStream in einem anderen Paket sehen, ändern Sie es in java.io.OutputStream. Dann sollte dein Code kompilieren. Und es wird auch die ClassNotFoundException zur Laufzeit werfen, da string keine gültige Klasse ist (sollte java.lang.String sein).

0

Ihre Fehlermeldung ist der Schlüssel.

error: incompatible types: ByteArrayOutputStream cannot be converted to OutputStream 

Wenn Sie die eingebauten Klassen verwendet hätte, wäre die Nachricht

error: incompatible types: java.io.ByteArrayOutputStream cannot be converted to java.io.OutputStream 

Hinweis lesen: Es gibt keinen Paketnamen anzeigt, dass Sie Ihre eigenen Implementierungen haben und Ihre ByteArrayOutputStream erstreckt sich nicht oder setzen Ihre Output

0

Danke ... mein Problem wurde gelöst. Tatsächlich gab es eine andere Klasse ByteArrayOutputStream im selben Ordner ('Java' in meiner Verzeichnisstruktur). Und statt auf java.io.OutputStream zuzugreifen, ist die Klasse ByteArrayOutputStream im selben Ordner zugänglich. Und diese Klasse erweitert OutputStream nicht. Aus diesem Grund wird der Fehler "ByteArrayOutputStream kann nicht in OutputStream konvertiert werden" angezeigt Class.forName(); zeigt nicht die Ausnahme "ClassNotFoundException muss abgefangen oder als geworfen erklärt werden"

Verwandte Themen