我读到在catch块中,我可以使用"throw"重新抛出当前异常.或"扔前";
来自:http://msdn.microsoft.com/en-us/library/ms182363%28VS.80%29.aspx
"要保留原始堆栈跟踪信息的异常,请使用throw语句而不指定异常."
但是当我尝试这个时
try{
try{
try{
throw new Exception("test"); // 13
}catch (Exception ex1){
Console.WriteLine(ex1.ToString());
throw; // 16
}
}catch (Exception ex2){
Console.WriteLine(ex2.ToString()); // expected same stack trace
throw ex2; // 20
}
}catch (Exception ex3){
Console.WriteLine(ex3.ToString());
}
Run Code Online (Sandbox Code Playgroud)
我得到三个不同的堆栈.我期待第一个和第二个跟踪是相同的.我究竟做错了什么?(或理解错误?)
System.Exception:在c:\ Program.cs中的ConsoleApplication1.Program.Main(String [] args)上测试:第13行System.Exception:在c:\ Program中的ConsoleApplication1.Program.Main(String [] args)进行测试. cs:第16行System.Exception:在c:\ Program.cs中的ConsoleApplication1.Program.Main(String [] args)进行测试:第20行
当我使用kryo反序列化ArrayList对象时,我得到一个NullPointerException.
Caused by: java.lang.NullPointerException
at java.util.ArrayList.ensureExplicitCapacity(ArrayList.java:215)
at java.util.ArrayList.ensureCapacity(ArrayList.java:199)
at com.esotericsoftware.kryo.serializers.CollectionSerializer.read(CollectionSerializer.java:96)
at com.esotericsoftware.kryo.serializers.CollectionSerializer.read(CollectionSerializer.java:22) at com.esotericsoftware.kryo.Kryo.readObject(Kryo.java:679)
at com.esotericsoftware.kryo.serializers.ObjectField.read(ObjectField.java:106)
Run Code Online (Sandbox Code Playgroud)
我可以看到StdInstantiatorStrategy在不调用其构造函数的情况下创建了一个ArrayList,而其中一个字段未初始化导致异常.
文档说首先应该调用无参数构造函数,如果没有可用的话,应该使用StdInstantiatorStrategy来进行字段初始化.
我究竟做错了什么?