gpt4 book ai didi

java - StackTraceElement 用于跟踪异常

转载 作者:行者123 更新时间:2023-12-01 14:37:28 24 4
gpt4 key购买 nike

这个问题有点难以解释,很抱歉问了这么长的问题!

我有方法indexOf(String node),它在字符串数组中查找并返回索引位置,如果在数组中找不到节点字符串,则抛出异常。

该方法在addEdge(String node1, String node2)中用于调用addEdge(int index1, int index2)。

protected String[] nodes;
protected boolean[][] adjacencyMatrix;

protected int indexOf(String node) throws GraphException {
for (int i = 0; i < nodes.length; i++) {
if (node.equals(nodes[i])) {
return i;
}
}
System.out.println("Exception in indexOf(String node)");
throw new GraphException();
}

public void addEdge(int index1, int index2) throws GraphException {
if ((index1 != index2) && (index1 < this.nodes.length) && (index2 < this.nodes.length)) {
this.adjacencyMatrix[index1][index2] = true;
this.adjacencyMatrix[index2][index1] = true;
} else {
System.out.println("Exception in addEdge(int index1, int index2)");
throw new GraphException();
}
}

public void addEdge(String node1, String node2) throws GraphException {
try {
this.addEdge(this.indexOf(node1), this.indexOf(node2));

} catch (GraphException e) {
System.out.println("Exception in addEdge(String node1, String node2)");
throw new GraphException();
}
}

出于测试目的,我使用 myArray = {"foo", "foo2", "bar"} 实现了一个数组。现在,当我尝试某些事情来引发异常时,例如:

try {
addEdge("foo", "foobar");

} catch (GraphException e) {
for (StackTraceElement st : e.getStackTrace()) {
System.out.println("Method: " + st.getMethodName() + " Line: " + st.getLineNumber());
}
}

控制台输出是:

Exception in indexOf(String node)
Exception in addEdge(String node1, String node2)
Method: addEdge Line: 169
Method: main Line: 221

好的,问题是这样的:

显然,该异常一定是第一次在indexOf(String node)中抛出,因为节点数组中没有匹配的“foobar”字符串。

这解释了第一个 .println: indexOf(String node) 中的异常

那么,堆栈错过抛出异常的第一个位置是否有原因?

我希望堆栈中出现这样的内容:

Method: indexOf Line: 58
Method: addEdge Line: 169
Method: main Line: 221

谢谢!

最佳答案

您的异常在 addEdge(string, string) 中被捕获并重新抛出,因此这就是堆栈跟踪的开始位置。

如果您想保留实际的启动堆栈跟踪,则必须修改GraphException,以便它也可以携带之前的异常:

throw new GraphException (e);

关于java - StackTraceElement 用于跟踪异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16348285/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com