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,这是编译时异常因此必须被捕获或处理但是这个错误也没有生成?请告诉我该怎么办?
答案 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”