使用FileReader类、LineNumberReader类是否只能抛出IOException,不能抛出自定义类,请详细解释!

raymanhe 2004-08-27 11:04:10
如题!请高手指导!
...全文
151 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
fairness 2004-08-28
  • 打赏
  • 举报
回复
以上错误主要是由于:
1。FileReader fr = new FileReader(fileName);
要求捕捉FileNotFoundException,而你没有
2。lnr.close(); fr.close();
都要求捕捉IOException,而你的FancySrcException虽然继承自IOException,去不能代替IOException,就像男人继承自人,但男人却不能代替人一样。
改成这样就没问题了:
try {
FileReader fr = new FileReader("d:\\a.txt");
LineNumberReader lnr = new LineNumberReader(fr);
// ....
lnr.close();
fr.close();
}
catch (FancySrcException x1) {
System.out.println("Trouble1!");
}
catch (FileNotFoundException x2) {
System.out.println("Trouble2!");
}
catch (IOException x3) {
System.out.println("Trouble3!");
}
sysmaster 2004-08-28
  • 打赏
  • 举报
回复
Exception是通过throw抛出来的(在方法体内),如果你想抛出你自己的异常,那么你可以写你自己的类,在你的方法体中抛出。(你用到的两个类不是你写的,没有办法更改,不过你可以重写这两个类,加入你的异常就行了)
raymanhe 2004-08-28
  • 打赏
  • 举报
回复
高手去哪里,不是连版主都不会吧?
raymanhe 2004-08-27
  • 打赏
  • 举报
回复
我创建了一个异常FancySrcException,代码如下:
package fancysrcframe;

import java.io.IOException;

public class FancySrcException extends IOException {
public FancySrcException() {
}
public FancySrcException(String jljlj){
super(jljlj);
}
}

package fancysrcframe;

import java.io.*;
import java.awt.*;

class FancySrcCanvas
extends Canvas {
FancySrcCanvas() {
/* the content of the constructor
*/
}

// some method

private void paintText(Graphics g) {
try {
FileReader fr = new FileReader(fileName);
LineNumberReader lnr = new LineNumberReader(fr);
// ....
lnr.close();
fr.close();
}
catch (FancySrcException x) {
System.out.println("Trouble!" + x.getMessage());
}
}

}

但每次运行度出现如下异常:"FancySrcCanvas.java": unreported exception java.io.FileNotFoundException; must be caught or declared to be thrown at line 57, column 23
"FancySrcCanvas.java": unreported exception java.io.IOException; must be caught or declared to be thrown at line 62, column 17
"FancySrcCanvas.java": unreported exception java.io.IOException; must be caught or declared to be thrown at line 69, column 11

何解????
bradwoo8621 2004-08-27
  • 打赏
  • 举报
回复
在捕获到IOException以后, 可以进行再次包装. 例如
try {
// some operation about FileReader
} catch (IOException e) {
throw new MyException(e);
}

class MyException extends Exception {
public MyException(Throwable t) {
super(t);
}
}
再次包装以后与IOException有没有继承关系都无所谓了.
raymanhe 2004-08-27
  • 打赏
  • 举报
回复
我创建了一个异常FancySrcException,代码如下:
package fancysrcframe;

import java.io.IOException;

public class FancySrcException extends IOException {
public FancySrcException() {
}
public FancySrcException(String jljlj){
super(jljlj);
}
}

package fancysrcframe;

import java.io.*;
import java.awt.*;

class FancySrcCanvas
extends Canvas {
FancySrcCanvas() {
/* the content of the constructor
*/
}

// some method

private void paintText(Graphics g) {
try {
FileReader fr = new FileReader(fileName);
LineNumberReader lnr = new LineNumberReader(fr);
// ....
lnr.close();
fr.close();
}
catch (FancySrcException x) {
System.out.println("Trouble!" + x.getMessage());
}
}

}
lukan 2004-08-27
  • 打赏
  • 举报
回复
当然可以的
只要你的自定义类是继承自IOException的

62,634

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧