Xamarin System.Exception与Java.Lang.Exception之间需要主要的地方

转载请注明出处:http://blog.csdn.net/supluo/article/details/42101569

Xamarin可以用c#来开发Android应用程序,这个就不用多说了。

说说用c#来开发android和用Java来开发android两者之间在异常处理上面需要注意的地方:

见以下简短的代码:

button.Click += delegate {

try

{

throw new System.Exception("抛出SystemException");

}

catch (Java.Lang.Exception ex)

{

Text.Text = "捕获Java.lang..Exception:" + ex.Message;

}

};

button2.Click += delegate

{

try {

throw new Java.Lang.Exception("抛出Java.lang.");

}

catch (Exception ex) {

Text.Text = "捕获System.Exception:" + ex.Message;

}

};

代码很简单,我相信大家都看的懂,使用xamarin来开发android的有可能是原本就会c#,因此想通过这个转向移动平台,还有的是本身会java,但是工作需求需要转向C#来开发。

说这些的原因,主要是想引出,在java开发android这个广为人知的平台上,大家都知道,在java中异常的基类是Java.Lang.Exception,而在c#中是System.Exception,大家在开发过程中可能会误解为最终所有c#相关的会全部转换为Java相关的(因为习惯了android是Java来开发的),因此可能会误解为Java.Lang.Exception = System.Exception,至少可能在效果上认为两者具有相等性.

但是经过测试,两者在效果上有很大区别,上面的示例代码中,第一个按钮的事件捕获不了异常,而第二个按钮的事件能够捕获异常,第一个按钮会抛出UncaughtException,看到这个大家可能会有点诧异,在实践过程中,我们明明就抓了异常,但是有些时候还是会抛出一些未捕获的异常,我想其中一个原因就是因为这个,至少我曾犯这样的错误,因为在引用明明空间的时候,我们可能把java的异常类命名空间using进来了,因此程序中的Exception就默认为Java.Lang.Exception,而catch 这个异常,并不能捕获System.Exception,终于知道原因了,高兴!至少经过我测试实践是这个样子,我认为这样产生的原因,也是在于平台的差异性和中间解释层以及开发者以往的经验造成的。对此我也明白了为什么在Application的子类中设置了Java.Lang.Thread.DefaultUncaughtExceptionHandler却并不能捕获到程序未处理的异常,偶尔却能获取,原因应该就是它只能捕获java.lang.exception及其子类类别的异常!

时间: 2024-08-02 09:57:22

Xamarin System.Exception与Java.Lang.Exception之间需要主要的地方的相关文章

junit test 报错,java.lang.Exception: No tests found matching [{ExactMatcher:fDisplayName=esopCreateTest],

java.lang.Exception: No tests found matching [{ExactMatcher:fDisplayName=esopCreateTest], {ExactMatcher:fDisplayName=esopCreateTest(com.cmcc.open.ss.util.EsopSynWebServiceActionTest)], {LeadingIdentifierMatcher:fClassName=com.cmcc.open.ss.util.EsopSy

spring boot配置spring-data-jpa的时候报错CannotCreateTransactionException: Could not open JPA EntityManager for transaction; nested exception is java.lang.NoSuchMethodError

F:\java\jdk8\jdk1.8.0_211\bin\java.exe -ea -Didea.test.cyclic.buffer.size=1048576 "-javaagent:D:\软件\IntelliJ IDEA 2019.2.2\lib\idea_rt.jar=7513:D:\软件\IntelliJ IDEA 2019.2.2\bin" -Dfile.encoding=UTF-8 -classpath "D:\软件\IntelliJ IDEA 2019.2.2

oracle10g登录em后,提示“java.lang.Exception: Exception in sending Request :: null”

出现错误时登录企业管理器时出现的界面 出现这种错误一般是因为没有设置时区,一般默认的是agentTZRegion=GMT,也就是GMT.所以大家只要设置了这个东西,然后重新启动dbconsole就可以了.下面是设置以及重新启动dbconsole的全过程. 第一步,在Oracle安装目录中找打这个文件emd.properties(以往大家都是找不到这个文件在哪里),D:\oracle\product\10.2.0\db_1\PC-20111014FOHC_orcl\sysman\config,我的

?--Porg.springframework.beans.MethodInvocationException: Property 'username' threw exception; nested exception is java.lang.NullPointerException

使用BoneCP作为连接池,在启动Tomcat报出以下异常: 一月 02, 2016 2:12:17 下午 org.apache.tomcat.util.digester.SetPropertiesRule begin警告: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to 'org.eclipse.jst.jee.server:mynewdpi' did not find a

java.lang.Exception: Socket bind failed: [730048]

严重: Error initializing endpoint java.lang.Exception: Socket bind failed: [730048] ?????????×???(Э?é/???????/???)????í?? at org.apache.tomcat.util.net.AprEndpoint.init(AprEndpoint.java:576) at org.apache.coyote.http11.Http11AprProtocol.init(Http11AprP

java.lang.Exception: Socket bind failed

1.错误描述 严重: Failed to initialize end point associated with ProtocolHandler ["http-apr-8080"] java.lang.Exception: Socket bind failed: [730048] ?????????×???(Э?é/???????/???)????í?? at org.apache.tomcat.util.net.AprEndpoint.bind(AprEndpoint.java:4

启动tomcat报错 java.lang.Exception: Socket bind failed

严重: Error initializing endpointjava.lang.Exception: Socket bind failed: [730048] ?????????×???(Э?é/???????/???)????í?? at org.apache.tomcat.util.net.AprEndpoint.init(AprEndpoint.java:647) at org.apache.coyote.http11.Http11AprProtocol.init(Http11AprPr

jedis:exception is java.lang.VerifyError: Bad type on operand stack

项目中需要用到缓存,经过比较后,选择了redis,客户端使用jedis连接,也使用到了spring提供的spring-data-redis.配置正确后启动tomcat,发现如下异常: ============================================================================= Caused by: org.springframework.beans.factory.BeanCreationException: Error creati

spring quartz:Instantiation of bean failed; nested exception is java.lang.IncompatibleClassChangeErr

spring 调度类初始化失败,分析是jar包冲突,日志如下: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'scheduler' defined in file [D:\InstallApplication\apache-tomcat-7.0.23\wtpwebapps\campaign\WEB-INF\classes\spring\applicationConte