这篇文章包括这段代码:
public static string SerializeDTO(DTO dto) {
try {
XmlSerializer xmlSer = new XmlSerializer(dto.GetType());
StringWriter sWriter = new StringWriter();
xmlSer.Serialize(sWriter, dto);
return sWriter.ToString();
}
catch(Exception ex) {
throw ex;
}
}
Run Code Online (Sandbox Code Playgroud)
本文的其余部分看起来很合理(对于菜鸟),但是try-catch-throw会抛出一个WtfException ... 这不完全等同于根本不处理异常吗?
人机工程学:
public static string SerializeDTO(DTO dto) {
XmlSerializer xmlSer = new XmlSerializer(dto.GetType());
StringWriter sWriter = new StringWriter();
xmlSer.Serialize(sWriter, dto);
return sWriter.ToString();
}
Run Code Online (Sandbox Code Playgroud)
或者我错过了C#中错误处理的基本内容?它与Java几乎相同(减去已检查的异常),不是吗?......也就是说,他们都改进了C++.
Stack Overflow问题重新抛出无参数捕获和不执行任何操作之间的区别?似乎支持我的观点,即try-catch-throw是一个无操作.
编辑:
只是为了总结未来发现这个主题的人...
不要
try {
// Do stuff that might throw an …Run Code Online (Sandbox Code Playgroud) try {
} catch (ex: MyException1, MyException2 ) {
logger.warn("", ex)
}
Run Code Online (Sandbox Code Playgroud)
要么
try {
} catch (ex: MyException1 | MyException2 ) {
logger.warn("", ex)
}
Run Code Online (Sandbox Code Playgroud)
结果,编译错误:Unresolved reference: MyException2.
如何在Kotlin上同时捕获许多例外?
在以前的java版本中,重新抛出异常被视为抛出catch参数的类型.
例如:
public static void test() throws Exception{
DateFormat df = new SimpleDateFormat("yyyyMMdd");
try {
df.parse("x20110731");
new FileReader("file.txt").read();
} catch (Exception e) {
System.out.println("Caught exception: " + e.getMessage());
throw e;
}
}
Run Code Online (Sandbox Code Playgroud)
在Java 7中,如果声明异常,则可以更精确地了解抛出的异常final:
//(doesn't compile in Java<7)
public static void test2() throws ParseException, IOException{
DateFormat df = new SimpleDateFormat("yyyyMMdd");
try {
df.parse("x20110731");
new FileReader("file.txt").read();
} catch (final Exception e) {
System.out.println("Caught exception: " + e.getMessage());
throw e;
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题:文档说我需要声明异常final.但如果我不这样做,上面的代码仍然编译和工作.我错过了什么吗?
参考文献:
我现在已经看过这种模式了几次:
bool success = false;
try
{
DoSomething();
success = true;
}
finally
{
if (!success)
Rollback();
}
Run Code Online (Sandbox Code Playgroud)
而且我一直在想:为什么这比使用catch回滚更好?
try
{
DoSomething();
}
catch
{
Rollback();
throw;
}
Run Code Online (Sandbox Code Playgroud)
确保更改在失败时回滚的两种方法之间有什么区别?
我有类似的东西.
void func() {
try {
//socket disconnects in middle of ..parsing packet..
} catch(Exception ex) {
if(!ex.getMessage().toString().equals("timeout") || !ex.getMessage().toString().equals("Connection reset")) {
debug("Exception (run): " + ex.getMessage());
ex.printStackTrace();
}
}
Run Code Online (Sandbox Code Playgroud)
为什么当我得到连接重置异常或超时异常时,它仍然在条件内.我尝试没有toString,没有运气.
public WHATTOWRITEHERE test()
{
try
{
transaction.begin();
code which may trigger exception
transaction.commit();
return true;
}
catch (javax.script.ScriptException ex)
{
transaction.rollback();
return ex.getMessage();
}
}
Run Code Online (Sandbox Code Playgroud)
打算执行某些操作,如果没有,则返回,true如果没有(发生错误),string则应返回此错误消息.它可以用Php但不能用Java
编辑:考试不能到外面,它必须在这里处理.
java ×3
c# ×2
exception ×2
try-catch ×2
final ×1
java-7 ×1
kotlin ×1
string ×1
transactions ×1
try-finally ×1