在这篇文章中,我们将为您详细介绍是“throwable”的良好做法的内容。此外,我们还会涉及一些关于-1-6java异常简单介绍java异常异常体系Throwable分类throws和throw异常处
在这篇文章中,我们将为您详细介绍是“ throwable”的良好做法的内容。此外,我们还会涉及一些关于-1-6 java 异常简单介绍 java异常 异常体系 Throwable 分类 throws和throw 异常处理 自定义异常、7.6 Throwable的几个常见方法、Android-Throwable: A WebView method was called on thread ''JavaBridge''.、angularjs – Angular TypeScript:$watchCollection,“controller as”的良好做法的知识,以帮助您更全面地了解这个主题。
本文目录一览:- 是“ throwable”的良好做法
- -1-6 java 异常简单介绍 java异常 异常体系 Throwable 分类 throws和throw 异常处理 自定义异常
- 7.6 Throwable的几个常见方法
- Android-Throwable: A WebView method was called on thread ''JavaBridge''.
- angularjs – Angular TypeScript:$watchCollection,“controller as”的良好做法
是“ throwable”的良好做法
过去,我使用以下方法读取大量代码:
public Object doSomething() throws Throwable { ...}
这样做是惯例吗?
优点和缺点是什么?
throws Trowable
在我看来,这就像完成异常的“ Agent Orange”方式
编辑
处理方法中的预期异常
引发意外异常(一对一)
不在乎错误
那是路要走吗?
答案1
小编典典你不应该扔Throwable
。这就是为什么。
Throwable是可抛出的事物层次结构的顶部,由Exceptions
and组成Errors
。由于Errors
根据定义是由不可挽救的条件引起的,因此将它们包括在方法声明中是没有意义的。剩下的只是Exception
。
您应该throws Exception
改为声明您的方法。
注意,范围越窄throws
越好。
声明你的方法是throws Exception
,那么你的方法不会产生异常,而是调用作为一个声明其他代码throwsException
,你想例外渗透调用堆栈。
如果您的方法是 生成 异常,则声明一个较小的范围,例如throws IOException, MyProcessingException
,等等
-1-6 java 异常简单介绍 java异常 异常体系 Throwable 分类 throws和throw 异常处理 自定义异常
getMessage()•获取异常信息,返回字符串。toString()•获取异常类名和异常信息,返回字符串。printStackTrace()•获取异常类名和异常信息,以及异常出现在程序中的位置。返回值void。printStackTrace(PrintStream s)•通常用该方法将异常内容保存在日志文件中,以便查阅。
try
{
需要检测的代码;
}
catch
(异常类 变量){
异常处理代码;
}
finally
{
一定会执行的代码;
}
Finally代码块控制的语句体一定会执行
只有一种情况不会被执行。就是在之前执行了System.exit(0)。
主要用于释放资源
例:
Class DemoException extends Exception
{
DemoException(String message)
{
super(message);
}
}
7.6 Throwable的几个常见方法
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
/*
* 在try里面发现问题后,jvm会帮我们生成一个异常对象,然后把这个对象抛出,和catch里面的类进行匹配。
* 如果该对象是某个类型的,就会执行该catch里面的处理信息。
*
* 异常中要了解的几个方法:
* public String getMessage():异常的消息字符串
* public String toString():返回异常的简单信息描述
* 此对象的类的 name(全路径名)
* ": "(冒号和一个空格)
* 调用此对象 getLocalizedMessage()方法的结果 (默认返回的是getMessage()的内容)
* printStackTrace() 获取异常类名和异常信息,以及异常出现在程序中的位置。返回值void。把信息输出在控制台。
*/
public class ExceptionDemo {
public static void main(String[] args) {
String s = "2014-11-20";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try {
Date d = sdf.parse(s); // 创建了一个ParseException对象,然后抛出去,和catch里面进行匹配
System.out.println(d);
} catch (ParseException e) { // ParseException e = new ParseException();
// ParseException
// e.printStackTrace();
// getMessage()
// System.out.println(e.getMessage());
// Unparseable date: "2014-11-20"
// toString()
// System.out.println(e.toString());
// java.text.ParseException: Unparseable date: "2014-11-20"
e.printStackTrace();
//跳转到某个指定的页面(index.html)
}
System.out.println("over");
}
}
Android-Throwable: A WebView method was called on thread ''JavaBridge''.
错误详情:
01-30 03:36:52.441 12000-12048/cn.h5 D/@@@: e.ttt:java.lang.RuntimeException: java.lang.Throwable: A WebView method was called on thread ''JavaBridge''. All WebView methods must be called on the same thread. (Expected Looper Looper (main, tid 1) {18b9c7c8} called on Looper (JavaBridge, tid 481) {789820c}, FYI main Looper is Looper (main, tid 1) {18b9c7c8})
当出现以上错误后,处于阻塞状态,无任何效果,出现此错误的原因是:
webView.loadUrl("javascript:show(" + json + ")");
解决方法:
runOnUiThread(new Runnable() {
@Override
public void run() {
webView.loadUrl("javascript:show(" + json + ")");
}
});
angularjs – Angular TypeScript:$watchCollection,“controller as”的良好做法
然而,对于我正在研究的CRUD屏幕,我发现自己偏离了这一点.因此我可以利用$watchCollection /检查更改等我发现自己使用了优秀的章节@baSarat here所建议的模式.即,在视频中(在Angular中以“控制器为”语法之前)@ baSarat在名为vm的$scope上创建一个表示控制器的变量.与在视图中使用“controller as vm”的方式相同,您仍然可以使用vm.myProperty / vm.myFunction()样式语法与模型进行交互.
所以,控制器看起来像这样:
module controllers { "use strict"; interface sageEditRouteParams extends ng.route.IRouteParamsService { id: number; } interface sageEditScope extends ng.IScope { vm: SageEdit; } class SageEdit { log: loggerFunction; sage: sage; title: string; private _hasChanges: boolean; static $inject = ["$routeParams","$scope","common","datacontext"]; constructor( private $routeParams: sageEditRouteParams,private $scope: sageEditScope,private common: common,private datacontext: datacontext ) { this.sage = undefined; this.title = "Sage Edit"; this.log = common.logger.getLogFn(controllerId); $scope.vm = this; $scope.$watchCollection("vm.sage",(newSage: sage,oldSage: sage) => { if (newSage && oldSage) { this._hasChanges = true; } }); this.activate(); } // Prototype methods activate() { var id = this.$routeParams.id; var dataPromises: ng.IPromise<any>[] = [this.getSage(id)]; this.common.activateController(dataPromises,controllerId) .then(() => { this.log("Activated Sage Edit View"); this.title = "Sage Edit: " + this.sage.name; }); } getSage(id: number) { return this.datacontext.sage.getById(id).then(data => { this.sage = data; this._hasChanges = false; }); } get hasChanges(): boolean { return this._hasChanges; } } var controllerId = "sageEdit"; angular.module("app").controller(controllerId,SageEdit); }
这样的观点:
<sectionng-controller="sageEdit"> <section> <div> <div> <buttonng-click="vm.cancel()" ng-disabled="!vm.canSave"> <i></i>Cancel </button> <buttonng-click="vm.save()" ng-disabled="!vm.canSave"> <i></i>Save </button> <span ng-show="vm.hasChanges"https://www.jb51.cc/tag/dis/" target="_blank">dissolve-animation ng-hide"> <i></i> </span> </div> <div> <div data-cc-widget-header title="{{vm.title}}"></div> <div> <div> <label>Name</label> <inputng-model="vm.sage.name" /> </div> <div> <label>Username</label> <inputng-model="vm.sage.userName" /> </div> <div> <label>Email</label> <inputtype="email" ng-model="vm.sage.email" /> </div> </div> </div> </div> </section> </section>
我把它放在一起似乎工作得很好,但我想把它放在那里并得到一些其他观点.在那儿:
>这种方法有任何缺点
>任何原因这都是个坏主意
>更好的选择?
我做了一点挖掘,但没有找到任何结论.
解决方法
对于
$scope.$watchCollection("vm.sage",oldSage: sage) => {
您还可以轻松实现重构:
$scope.$watchCollection(()=>this.sage,oldSage: sage) => {
在某些情况下,当您尝试观看foo.bar之类的内容时,foo仍未定义,您可以使用安全包装函数safeWatch(()=> this.foo.bar):
function safeWatch<T extends Function>(expression: T) { return () => { try { return expression(); } catch (e) { return null; } }; }
控制器与$scope.vm
Fron源代码:
https://github.com/angular/angular.js/blob/36831eccd1da37c089f2141a2c073a6db69f3e1d/src/ng/controller.js#L95
这正是角度为你做的事情. ie $scope.vm = instance(其中vm == indentifier)所以它们是等价的
关于是“ throwable”的良好做法的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于-1-6 java 异常简单介绍 java异常 异常体系 Throwable 分类 throws和throw 异常处理 自定义异常、7.6 Throwable的几个常见方法、Android-Throwable: A WebView method was called on thread ''JavaBridge''.、angularjs – Angular TypeScript:$watchCollection,“controller as”的良好做法等相关知识的信息别忘了在本站进行查找喔。
本文标签: