我们如何定义一个扩展java.lang类的Exception类的类

时间:2014-02-19 07:19:50

标签: java exception-handling abstract-class extends throw

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.*;

public class sentence {
    public static void main() throws IOException {
        InputStreamReader br = new InputStreamReader(System.in);
        BufferedReader in = new BufferedReader(br);
        System.out.println("Enter a sentence.");
        String a = in.readLine();
        String ar[] = new String[10000];
        int k = 0;
        try {
            if (a.length() == 0) {
                throw new NullError();
            }
            if ('a' < a.charAt(0) && a.charAt(0) < 'z') {
                throw new CaseError();
            }
            if (a.charAt(a.length() - 1) != '.') {
                throw new FullStopError();
            }
            int countuppercase = 0;
            String s1 = "";
            for (int i = 0; i < a.length(); i++) {
                char c = a.charAt(i);
                if (1 < countuppercase) {
                    throw new CaseError();
                }
                if (c != ' ' && c != '.') {
                    s1 = s1 + c;
                } else {
                    ar[k] = s1;
                    k++;
                    s1 = "";
                }
            }
        } catch (NullError e) {
            System.out.println("You can't enter an empty string.");
        } catch (CaseError e) {
            System.out
                    .println("You have used the upper case and lower case properly.");
        } catch (FullStopError e) {
            System.out.println("You have forgot to use the full stop.");
        }
        for (int i = 0; i < k - 1; i++) {
            String tmp = "";
            for (int j = i; j < k - 1; j++) {
                if (ar[j].length() > ar[j + 1].length()) {
                    tmp = ar[j];
                    ar[j] = ar[j + 1];
                    ar[j + 1] = tmp;
                }
            }
        }
        for (int i = 0; i < k; i++) {
            System.out.print(ar[i]);
            if (i < (k - 1)) {
                System.out.print(" ");
            } else
                System.out.print(".");
        }
    }
}

class NullError extends Exception// If someone asks me what is name or purpose
                                    // of defining this class what should I
                                    // tell?
{
    public NullError() {
    }
}

class CaseError extends Exception {
    public CaseError() {
    }
}

class FullStopError extends Exception {
    public FullStopError() {
    }
}

例如,如果我写这段代码。

扩展Exception类的类的名称是什么,它被称为抽象类,它的用途是什么?

这段代码按照字母数量的递增顺序排列句子中的单词,我实现了一些强制抛出的自定义异常,例如没有完全停止。 要抛出一个新的异常,我们需要定义一个具有相同名称的单独类。我不明白这个类的名称是什么,它是一个抽象类,什么是目的,因为我只是为类定义一个空构造函数。

3 个答案:

答案 0 :(得分:0)

不,这不叫做抽象类

扩展Exception的类可以称为用户定义的已检查异常。您可以在http://docs.oracle.com/javase/tutorial/essential/exceptions/creating.html

找到有关此主题的更多信息

只是为了让您知道,抽象类与异常完全不同且无关。有关该问题的更多信息:http://docs.oracle.com/javase/tutorial/java/IandI/abstract.html

希望有所帮助! :)

答案 1 :(得分:0)

您所编写的是一个自定义异常,它是用户定义的异常。这些是与您的业务逻辑相关的例外。可以从业务逻辑中抛出这些异常类。当存在具有抛出这些异常的方法的公共类时,这些是有用的。使用这些公共方法的其他类可以选择捕获异常并根据异常执行操作,例如记录它,或者您可以再次抛出相同的异常。

这种方式使用用户定义的异常有助于模块化类的开发人员不必担心如何处理异常。异常的处理将在类调用抛出签名的方法中。

您无法看到用户定义的异常的重要性,因为您只有一个类而且您正在抛出甚至捕获异常。

答案 2 :(得分:0)

创建自定义/自我例外:

public class customException extends Exception { 
  String message = "Your Custom Exception"
 public customException() {
    super(message);
}

}

它是一个扩展父类(Exception)的普通类。 强行抛出并捕获自定义异常:

try
{
   throw new customException();
}     

catch (customException e) 
{
   System.out.println(e);
}

您的代码将打印您的例外。

抽象类:不是它不是抽象类。该文档定义了抽象类:http://docs.oracle.com/javase/tutorial/java/IandI/abstract.html