Java异常和后置条件

Java异常和后置条件,java,class,exception,return,computer-science,Java,Class,Exception,Return,Computer Science,以下哪些异常会发生,哪些异常会发生? //前提条件:a不为空 public String sampleClass(ArrayList<String> a, int b) { String t; int u; for (u = 0; u <= a.size(); u++) { t = (String)(a.get(u)); if (t.length() == b) { return t;

以下哪些异常会发生,哪些异常会发生?

//前提条件:a不为空

public String sampleClass(ArrayList<String> a, int b) {
    String t;
    int u;
    for (u = 0; u <= a.size(); u++) {
        t = (String)(a.get(u));
        if (t.length() == b) {
            return t;
        }
    }
    return null;
}
publicstringsampleclass(arraylista,intb){
字符串t;
国际大学;

对于(u=0;u如果我们不知道doSomething是如何调用的,那么您的问题就没有意义了。根据具体情况,您可以得到几乎所有的例外情况:

在某些情况下,您不会得到任何异常。例如:

ArrayList<String> a = new ArrayList<>();
a.add("");
doSomething(a,0);

D和E都不可能(只有在使用数组且代码不包含任何可能引发异常的特定算术运算时,D才可能发生)。

下面是一个完全可运行的示例,它向您展示了a、B、C,并且没有异常发生

如果不说明ArrayList包含什么,就无法完全回答这个问题

public class Test {
    public static void main(final String... args) {
        try {
            Test.throwNullPointer();
        } catch (final Throwable e) {
            System.out.println(e);
        }

        try {
            Test.throwIndexOutOfBoundsException();
        } catch (final Throwable e) {
            System.out.println(e);
        }

        try {
            Test.throwClassCastException();
        } catch (final Throwable e) {
            System.out.println(e);
        }

        try {
            Test.noException();
            System.out.println("No Exception");
        } catch (final Throwable e) {
            System.out.println(e);
        }
    }

    public static void throwNullPointer() {
        final ArrayList<String> a = new ArrayList<>();
        a.add("a");
        a.add(null);
        a.add("c");
        Test.doSomething(a, 0);
    }

    public static void throwIndexOutOfBoundsException() {
        final ArrayList<String> a = new ArrayList<>();
        a.add("a");
        a.add("b");
        a.add("c");
        Test.doSomething(a, 0);
    }

    public static void throwClassCastException() {
        final ArrayList<String> a = new ArrayList<>();
        Test.doNaughtyStuff(a);
        Test.doSomething(a, 0);
    }

    private static void doNaughtyStuff(final ArrayList a) {
        a.add(new Object());
    }

    public static void noException() {
        final ArrayList<String> a = new ArrayList<>();
        a.add("");
        Test.doSomething(a, 0);
    }

    public static String doSomething(final ArrayList<String> a, final int b) {
        String t;
        int u;
        for (u = 0; u <= a.size(); u++) {
            t = a.get(u);
            if (t.length() == b) {
                return t;
            }
        }
        return null;
    }
}

如果由于从0迭代到a,仅当列表a不包含长度为B的字符串,我会选择答案B。size(),包含在内。如果列表A包含空元素,则它也可以是A。如果您试图将字符串以外的任何内容添加到列表A,则它也可以是答案C。答案D和E在此方法中不太可能出现。您可以通过将原始列表强制转换到列表,从而导致ClassCastException。这样,您可以添加非字符串对象,而不会完全令人讨厌编译器。但是您会收到很多警告。这仍然会创建ArrayList。运算符会推断泛型。类似于ArrayList l=new ArrayList();l.add(1);doSomething((ArrayList)l),0);我测试了它并得到了异常。这是我消息的最后一个片段。在我发送该评论时,它不在那里。因此,这是我的错误。D也不应该作为列表出现。get抛出IndexOutOfBoundsException,并且我认为没有其他代码可以抛出显示的ArrayIndexOutOfBoundsException。
doSomething(new ArrayList<>(),0)
ArrayList a = new ArrayList();
a.add(new Object());
doSomething(a,0);
public class Test {
    public static void main(final String... args) {
        try {
            Test.throwNullPointer();
        } catch (final Throwable e) {
            System.out.println(e);
        }

        try {
            Test.throwIndexOutOfBoundsException();
        } catch (final Throwable e) {
            System.out.println(e);
        }

        try {
            Test.throwClassCastException();
        } catch (final Throwable e) {
            System.out.println(e);
        }

        try {
            Test.noException();
            System.out.println("No Exception");
        } catch (final Throwable e) {
            System.out.println(e);
        }
    }

    public static void throwNullPointer() {
        final ArrayList<String> a = new ArrayList<>();
        a.add("a");
        a.add(null);
        a.add("c");
        Test.doSomething(a, 0);
    }

    public static void throwIndexOutOfBoundsException() {
        final ArrayList<String> a = new ArrayList<>();
        a.add("a");
        a.add("b");
        a.add("c");
        Test.doSomething(a, 0);
    }

    public static void throwClassCastException() {
        final ArrayList<String> a = new ArrayList<>();
        Test.doNaughtyStuff(a);
        Test.doSomething(a, 0);
    }

    private static void doNaughtyStuff(final ArrayList a) {
        a.add(new Object());
    }

    public static void noException() {
        final ArrayList<String> a = new ArrayList<>();
        a.add("");
        Test.doSomething(a, 0);
    }

    public static String doSomething(final ArrayList<String> a, final int b) {
        String t;
        int u;
        for (u = 0; u <= a.size(); u++) {
            t = a.get(u);
            if (t.length() == b) {
                return t;
            }
        }
        return null;
    }
}
java.lang.NullPointerException
java.lang.IndexOutOfBoundsException: Index: 3, Size: 3
java.lang.ClassCastException: java.lang.Object cannot be cast to java.lang.String
No Exception