第十二章 通过异常处理错误
在以前平时的编程中没有真正意思到异常处理的强大,只从有一个android的图片过大,内存溢出,使用了异常处理才得以解决问题,我对异常处理的一个大概可以用一句话来表达:就是让程序在错误中恢复,依然进行下去
.概念
在c语言中,只有一些约定俗称的错误处理模式,而没有同意的异常处理机制,这使得编程人员思想趋向于只要你不随便乱点,就不会出错,否则就不关我事了,对我来说,这种想法是不要得的,并不是人人都是程序员,你的应用应该是强壮的,而我个人也就非常喜欢强壮的程序,java的异常处理机制是基于c++上面的,异常处理的一个很重要的好处就是将问题处理的代码和正常程序的代码分离开,使得代码的阅读,编写与调试工作更加井井有条
.基本异常
举一个例子,比如说除法,除数不能为0,或者不能为某些值,但是你不知道怎么去解决它,可以说是你意料之外,那么这时候你就应该抛出一个异常,然后异常处理程序处理(原来的执行路径将会打断),首先要在堆上new 一个异常对象,然后在当前环境中弹出对这个对象的引用,然后就把这个引用交给异常处理程序
异常参数,标准的异常类都有两个构造器,一个是默认的,一个是接受字符串作为参数的,以便将相关信息放入异常对象的构造器中
throw,抛出异常的引用,能够抛出任意类型的throwable对象,它是异常类型的根类,错误的信息保存在异常对象内部,然后上一层环境通过这些信息来决定如何处理异常
.捕获异常
监控区域,也就是try块,
处理程序,也就是catch块,可以使用多个catch,这样就可以针对性的来解决异常
.异常处理理论模型
终止模型。很容易理解,。就是发生了错误,然后异常处理可能进行了一些错误记录,然后系统就被迫终止
恢复模型。其实我们平时用的操作系统用的就是恢复模型,因为不可能,因为我们的误操作就要重启吧,可以在while里面加try,然后知道准确而至,这种虽然好,但是耦合度高,复杂性大,因为错误是千万种的,对于大型程序来说,维护与编写,无疑是噩梦
.自定义异常
必须从已有的异常类继承
throws,这个是为方法声明异常,当方法中有抛出异常时,必须声明,否则不能通过(runtimeexception及子类可以不用)注意:不建议在异常处理中放入过多的操作,耦合度会增加
printstatictrace()方法,打印从方法调用处直到异常抛出处
.异常与记录日志
这个非常重要,为什么呢。特别来说,我平时使用软件的时候,它都会将异常记录打印在一个文件上,然后你可以选择提交,这样帮助他们修复软件,在cam360里面就是这样
可以使用java.util.logging
.异常说明
throws ,因为源码不会与程序库一起发布
技巧:可以先声明异常,占个位置,然后不抛出异常,等以后有空再不上去
.捕获所有异常
exception放在最后
fillinstacktrace()可以使抛出点重置
.重新抛出异常
有两种,第一种是把原先的异常处理了,然后再抛出,第二种是把原先的异常处理,再新建一个异常抛出(原先的异常已解决),。。。使用throw e
.异常链
防止异常被屏蔽,可使用initcause
.java标准异常
throwable类可以被用来表示任何可以作为异常被抛出的类,且分为两种类型(继承),error,exception
runtimeexception称为不受检查异常,很难控制,只有代码的时候注意点
.finally清理
恢复状态的时候需要使用,无论是return,break,continue,都会使用finally
缺陷:在finally中使用throw,原先异常丢失,在finally中return根本不会报异常
.异常的限制
这样的异常实在繁琐
可能要等到以后自己成长了,才真正能体会到
注:
android 监听应用程序异常,输出异常日志log3--在一个activity中模拟异常:
.异常的限制
1)打开Terminal
2)输入python
3)print(u'\u6027\u611f\u597d\u83b1\u575e\u5973\u661f\u7ecf\u5178\u88f8\u7167'.encode('utf8'))
‘\u6027\u611f\u597d\u83b1\u575e\u5973\u661f\u7ecf\u5178\u88f8\u7167’为要转化的编码;
【翻译】(82)多媒体与照相机
see
http://developer.android.com/guide/topics/media/index.html
原文见
http://developer.android.com/guide/topics/media/index.html
-------------------------------
Multimedia and Camera
多媒体与照相机
-------------------------------
Topics
主题
* Media Playback 媒体回放
* JetPlayer JetPlayer
* Camera 照相机
* Audio Capture 音频捕捉
Key classes
关键类
MediaPlayer
JetPlayer
Camera
MediaRecorder
AudioManager
SoundPool
See also
另见
Android Supported Media Formats Android支持的媒体格式
JetCreator User Manual JetCreator用户手册
-------------------------------
The Android multimedia framework includes support for capturing and playing audio, video and images in a variety of common media types, so that you can easily integrate them into your applications. You can play audio or video from media files stored in your application's resources, from standalone files in the file system, or from a data stream arriving over a network connection, all using the MediaPlayer or JetPlayer APIs. You can also record audio, video and take pictures using the MediaRecorder and Camera APIs if supported by the device hardware.
Android多媒体框架包含对捕捉和播放各种通用媒体类型(注:并不是所有Android设备都支持某种多媒体格式,取决于硬件和系统版本)的音频、视频和图片的支持,使你可以轻松地集成它们进你的应用程序。你可以播放来自存储在你的应用程序的资源中的媒体文件中的音频或视频,来自文件系统中的单独文件,或者来自通过网络连接到达的数据流,所有都使用MediaPlayer或JetPlayer的API。你还可以使用MediaRecorder和Camera的API记录音频、视频和照相,如果设备的硬件支持的话。
The following topics show you how to use the Android framework to implement multimedia capture and playback.
以下主题向你展示如何使用Android框架实现多媒体捕捉和回放。
Media Playback
媒体回放(注:播放)
How to play audio and video in your application.
如何在你的应用程序中播放音频和视频。
JetPlayer
JetPlayer(注:JET是用于小型嵌入式设备上的一种交互式音乐播放器和交互式音乐引擎,以MIDI格式的音轨实时响应游戏播放事件和用户交互,由SONiVOX提供。SONiVOX是隶属Sonic网络公司,是OHA开放手机联盟的软件开发商之一,见http://zh.wikipedia.org/wiki/%E5%BC%80%E6%94%BE%E6%89%8B%E6%8C%81%E8%AE%BE%E5%A4%87%E8%81%94%E7%9B%9F和http://www.openhandsetalliance.com/press_releases.html)
How to play interactive audio and video in your application using content created with JetCreator.
如何在你的应用程序中使用用JetCreator创建的内容来播放交互式(注:互动)音频和视频。
Camera
照相机
How to use a device camera to take pictures or video in your application.
如何在你的应用程序中使用一个设备照相机照相或录视频。
Audio Capture
音频捕捉
How to record sound in your application.
如何在你的应用程序中录音。
Except as noted, this content is licensed under Apache 2.0. For details and restrictions, see the Content License.
除特别说明外,本文在Apache 2.0下许可。细节和限制请参考内容许可证。
Android 4.0 r1 - 16 Apr 2012 17:06
-------------------------------
Portions of this page are modifications based on work created and shared by the Android Open Source Project and used according to terms described in the Creative Commons 2.5 Attribution License.
此页部分内容,是基于Android开源项目所创建和共享的工作,并且根据知识共享2.5署名许可证描述的条款来使用的修改版。
(本人翻译质量欠佳,请以官方最新内容为准,或者参考其它翻译版本:
* ソフトウェア技術ドキュメントを勝手に翻訳
http://www.techdoctranslator.com/android
* Ley's Blog
http://leybreeze.com/blog/
* 农民伯伯
http://www.cnblogs.com/over140/
* Android中文翻译组
http://androidbox.sinaapp.com/
)