java

时间:2016-04-13 17:25:25

标签: java

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

这是我编译时的代码

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();
生成了

但是不应该生成forName()方法抛出ClassNotFoundException,这是编译时异常因此必须被捕获或处理但是这个错误也没有生成?请告诉我该怎么办?

4 个答案:

答案 0 :(得分:3)

您的编译错误可能是因为您的代码中显示的OutputStream类型不是java.io.OutputStream。检查您的导入语句,如果您在其他包中看到OutputStream,请将其更改为java.io.OutputStream。然后你的代码应该编译。它还会在运行时抛出ClassNotFoundException,因为string不是有效的类(应该是java.lang.String)。

答案 1 :(得分:2)

Class.forName("string")

如果找不到具有名称字符串的类,则会抛出ClassNotFoundException。也许你的意思是String。

无论如何,ClassNotFoundException是一个经过检查的异常,任何抛出已检查异常的方法都应该包装在try-catch块中,并且应该处理相应的异常。另一个选择是声明main()会抛出这个检查过的异常。

只要您的导入不冲突或导入了错误的OutputStream或ByteArrayOutputStream,就不会出现以下行的错误:

OutputStream o=new ByteArrayOutputStream(); 

答案 2 :(得分:0)

您的错误消息是线索。

error: incompatible types: ByteArrayOutputStream cannot be converted to OutputStream

如果您使用了内置类,则会显示消息

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

注意:没有包名称表明您有自己的实现,而ByteArrayOutputStream没有扩展或实现您的OutputStream

答案 3 :(得分:0)

谢谢...我的问题已经解决。实际上在同一个文件夹中有另一个类ByteArrayOutputStream(我的目录结构中的'java')。而不是访问java.io.OutputStream,可以访问同一文件夹中的类ByteArrayOutputStream。此类不扩展OutputStream这就是显示错误“ByteArrayOutputStream无法转换为OutputStream”的原因。并且由于此错误,语句的Class.forName();不显示异常“必须捕获或声明抛出ClassNotFoundException”