抛出异常并通过子类实现
我正在尝试创建一个名为 HashException 的 java.lang.RuntimeException 子类,并且必须修改 NumStream 以在 NumStream 类遇到哈希字符 (#) 时抛出它。不太确定如何实现这个,我有一些东西,它确实抛出了异常,但我想知道是否有一个更干净的方法来实现这个,或者即使我做得正确。
import java.io.*;
import java.lang.*;
class HashException extends java.lang.RuntimeException
{
public void write(int c)
{
if(c == 35) throw new RuntimeException("This is a Hash Tag!");
}
}
public class NumStream extends OutputStream
{
public void write(int c) throws IOException
{
StringBuffer sb = new StringBuffer();
HashException h = new HashException();
h.write(c);
switch(c)
{
case ' ': sb.append(" ");
break;
case '1': sb.append("One");
break;
case '2': sb.append("Two");
break;
case '3': sb.append("Three");
break;
case '4': sb.append("Four");
break;
case '5': sb.append("Five");
break;
case '6': sb.append("Six");
break;
case '7': sb.append("Seven");
break;
case '8': sb.append("Eight");
break;
case '9': sb.append("Nine");
break;
case '0': sb.append("Zero");
break;
default: sb.append(Integer.toString(c));
break;
}
System.out.print(sb);
}
public static void main(String[] args)
{
NumStream ns = new NumStream();
PrintWriter pw = new PrintWriter(new OutputStreamWriter(ns));
pw.println("123456789 and ! and # ");
pw.flush();
}
}
这是我的输出:
run:
Exception in thread "main" java.lang.RuntimeException: This is a Hash Tag!
at HashException.write(NumStream.java:8)
at NumStream.write(NumStream.java:19)
OneTwoThreeFourFiveSixSevenEightNine and ! and at java.io.OutputStream.write(OutputStream.java:116)
at sun.nio.cs.StreamEncoder.writeBytes(StreamEncoder.java:221)
at sun.nio.cs.StreamEncoder.implFlushBuffer(StreamEncoder.java:291)
at sun.nio.cs.StreamEncoder.implFlush(StreamEncoder.java:295)
at sun.nio.cs.StreamEncoder.flush(StreamEncoder.java:141)
at java.io.OutputStreamWriter.flush(OutputStreamWriter.java:229)
at java.io.PrintWriter.flush(PrintWriter.java:320)
at NumStream.main(NumStream.java:54)
Java Result: 1
I'm trying to create a subclass of java.lang.RuntimeException called HashException and I have to modify NumStream to throw it when my NumStream class encounters the hash character(#). Not too sure how to implement this, I have some stuff and it does throw the exception but I'm wondering if there's a cleaner way to implement this or even if I'm doing it correctly.
import java.io.*;
import java.lang.*;
class HashException extends java.lang.RuntimeException
{
public void write(int c)
{
if(c == 35) throw new RuntimeException("This is a Hash Tag!");
}
}
public class NumStream extends OutputStream
{
public void write(int c) throws IOException
{
StringBuffer sb = new StringBuffer();
HashException h = new HashException();
h.write(c);
switch(c)
{
case ' ': sb.append(" ");
break;
case '1': sb.append("One");
break;
case '2': sb.append("Two");
break;
case '3': sb.append("Three");
break;
case '4': sb.append("Four");
break;
case '5': sb.append("Five");
break;
case '6': sb.append("Six");
break;
case '7': sb.append("Seven");
break;
case '8': sb.append("Eight");
break;
case '9': sb.append("Nine");
break;
case '0': sb.append("Zero");
break;
default: sb.append(Integer.toString(c));
break;
}
System.out.print(sb);
}
public static void main(String[] args)
{
NumStream ns = new NumStream();
PrintWriter pw = new PrintWriter(new OutputStreamWriter(ns));
pw.println("123456789 and ! and # ");
pw.flush();
}
}
This is my output:
run:
Exception in thread "main" java.lang.RuntimeException: This is a Hash Tag!
at HashException.write(NumStream.java:8)
at NumStream.write(NumStream.java:19)
OneTwoThreeFourFiveSixSevenEightNine and ! and at java.io.OutputStream.write(OutputStream.java:116)
at sun.nio.cs.StreamEncoder.writeBytes(StreamEncoder.java:221)
at sun.nio.cs.StreamEncoder.implFlushBuffer(StreamEncoder.java:291)
at sun.nio.cs.StreamEncoder.implFlush(StreamEncoder.java:295)
at sun.nio.cs.StreamEncoder.flush(StreamEncoder.java:141)
at java.io.OutputStreamWriter.flush(OutputStreamWriter.java:229)
at java.io.PrintWriter.flush(PrintWriter.java:320)
at NumStream.main(NumStream.java:54)
Java Result: 1
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
检查可能应该在您的 numstream 类中。如果遇到哈希则抛出哈希异常。像这样:
您也可以在
HashException
类中声明 Exceptionmessage
:请注意,HashException 可能应该扩展
Exception
,而不是RuntimeException
。The check should probably be in your numstream class. If that encounters a hash then throw a hash exception. Like this:
You can also just declare the Exception
message
within theHashException
class:Note that HashException should probably extend
Exception
, notRuntimeException
.