什么时候构造函数抛出异常?(或者在目标C的情况下:什么时候初始化者返回nil是正确的?)
在我看来,如果对象不完整,构造函数应该失败 - 因此拒绝创建对象.即,构造函数应该与其调用者签订合同,以提供一个功能和工作对象,可以在其上有意义地调用方法?这合理吗?
我在Oracle的Java教程中尝试过这两个例子.它们都编译得很好,但在运行时,都会出现这个错误:
Exception in thread "main" java.lang.NoClassDefFoundError: graphics/shapes/Square
at Main.main(Main.java:7)
Caused by: java.lang.ClassNotFoundException: graphics.shapes.Square
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 1 more
Run Code Online (Sandbox Code Playgroud)
我想我可能将Main.java文件放在错误的文件夹中.这是目录层次结构:
graphics
? Main.java
? shapes
| ? Square.java
| ? Triangle.java
? linepoint
| ? Line.java
| ? Point.java
? spaceobjects
| ? Cube.java
| ? RectPrism.java
Run Code Online (Sandbox Code Playgroud)
这是Main.java:
import graphics.shapes.*;
import graphics.linepoint.*
import graphics.spaceobjects.*;
public class Main {
public static void main(String …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用Java的ThreadPoolExecutor类来运行具有固定数量线程的大量重量级任务.每个任务都有许多地方,在这些地方可能因异常而失败.
我已经进行了子类化,ThreadPoolExecutor并且我已经覆盖了该afterExecute方法,该方法应该在运行任务时提供任何未捕获的异常.但是,我似乎无法使其发挥作用.
例如:
public class ThreadPoolErrors extends ThreadPoolExecutor {
public ThreadPoolErrors() {
super( 1, // core threads
1, // max threads
1, // timeout
TimeUnit.MINUTES, // timeout units
new LinkedBlockingQueue<Runnable>() // work queue
);
}
protected void afterExecute(Runnable r, Throwable t) {
super.afterExecute(r, t);
if(t != null) {
System.out.println("Got an error: " + t);
} else {
System.out.println("Everything's fine--situation normal!");
}
}
public static void main( String [] args) {
ThreadPoolErrors threadPool = new …Run Code Online (Sandbox Code Playgroud) java multithreading exception executorservice threadpoolexecutor
出于某种原因,看起来构造函数委派在以下代码段中不起作用:
function NotImplementedError() {
Error.apply(this, arguments);
}
NotImplementedError.prototype = new Error();
var nie = new NotImplementedError("some message");
console.log("The message is: '"+nie.message+"'")
Run Code Online (Sandbox Code Playgroud)
运行这个给出The message is: ''.有关为什么,或者是否有更好的方法来创建新Error子类的任何想法?是否存在我不知道apply的本机构Error造函数的问题?
我有一个主程序调用的函数:
try:
someFunction()
except:
print "exception happened!"
Run Code Online (Sandbox Code Playgroud)
但是在函数执行过程中它会引发异常,因此会跳转到该except部分.
我怎样才能确切地看到发生了什么someFunction()导致异常发生?
在保持我同事的代码甚至是自称是高级开发人员的人的同时,我经常看到以下代码:
try
{
//do something
}
catch
{
//Do nothing
}
Run Code Online (Sandbox Code Playgroud)
或者有时他们将日志信息写入日志文件,如下面的try catch块
try
{
//do some work
}
catch(Exception exception)
{
WriteException2LogFile(exception);
}
Run Code Online (Sandbox Code Playgroud)
我只是想知道他们所做的是最佳做法吗?这让我感到困惑,因为在我看来,用户应该知道系统会发生什么.
请给我一些建议.
在Java(或任何其他具有已检查异常的语言)中,在创建自己的异常类时,如何确定是应该选中还是取消选中它?
我的直觉是,如果调用者能够以某种富有成效的方式恢复,那么将调用一个已检查的异常,其中未经检查的异常对于不可恢复的情况更多,但我会对其他人的想法感兴趣.
我尝试将对象添加到List<String>实例,但它会抛出一个UnsupportedOperationException.有谁知道为什么?
我的Java代码:
String[] membersArray = request.getParameterValues('members');
List<String> membersList = Arrays.asList(membersArray);
for (String member : membersList) {
Person person = Dao.findByName(member);
List<String> seeAlso;
seeAlso = person.getSeeAlso();
if (!seeAlso.contains(groupDn)){
seeAlso.add(groupDn);
person.setSeeAlso(seeAlso);
}
}
Run Code Online (Sandbox Code Playgroud)
错误消息:
java.lang.UnsupportedOperationException
java.util.AbstractList.add(Unknown Source)
java.util.AbstractList.add(Unknown Source)
javax.servlet.http.HttpServlet.service(HttpServlet.java:641)
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
我知道print(e)(其中e是异常)打印发生的异常但是,我试图找到相当于Java的python,e.printStackTrace()它确切地追踪它发生的行的异常并打印出它的整个痕迹.
有谁能告诉我相当于e.printStackTrace()Python?
我有记录的代码Exception.Message.但是,我读了一篇文章,说明最好使用它Exception.ToString().使用后者,您可以保留有关错误的更重要信息.
这是真的,继续更换所有代码记录Exception.Message是否安全?
我也在为log4net使用基于XML的布局.是否Exception.ToString()可能包含无效的XML字符,这可能会导致问题?
exception ×10
java ×5
.net ×2
c# ×2
python ×2
arraylist ×1
constructor ×1
javascript ×1
list ×1
packages ×1
stack-trace ×1
try-catch ×1