Exception和error

2 Throwable

Throwable类是所有错误或异常的超类。只有当对象是此类或其子类之一的实例时,才能通过JVM或者是通过throw语句抛出;另外catch子句中的参数类型也必须是该类型。

Throwable类及其子类有两个构造方法:

不带参数

带有 String 参数,此参数可用于生成详细消息。

Throwable包含了其线程创建时线程执行堆栈的快照。它还包含了给出有关错误更多信息的消息字符串。Java将可抛出(Throwable)的结构分为三种类型:

错误(Error)

运行时异常(RuntimeException)

被检查的异常(Checked Exception)

4 Exception

Exception类及其子类是Throwable的一种形式,它指出了合理的应用程序想要捕获的条件。对于可以恢复的条件使用被检查异常(Exception的子类中除了RuntimeException之外的其它子类),对于程序错误使用运行时异常。

4.1 ClassNotFoundException

当应用程序试图使用以下方法通过字符串名加载类时:

Class 类中的 forName 方法。

ClassLoader 类中的 findSystemClass 方法。

ClassLoader 类中的 loadClass 方法。

但是没有找到具有指定名称的类的定义,抛出该异常。

4.2 CloneNotSupportedException

当调用Object类中的clone方法复制对象,但该对象的类无法实现Cloneable接口时,抛出该异常。重写clone方法的应用程序也可能抛出此异常,指示不能或不应复制一个对象。

4.3 IOException

当发生某种I/O异常时,抛出此异常。此类是失败或中断的I/O操作生成的异常的通用类。

EOFException

当输入过程中意外到达文件或流的末尾时,抛出此异常。此异常主要被数据输入流用来表明到达流的末尾。注意:其他许多输入操作返回一个特殊值表示到达流的末尾,而不是抛出异常。

FileNotFoundException

当试图打开指定路径名表示的文件失败时,抛出此异常。在不存在具有指定路径名的文件时,此异常将由FileInputStream、FileOutputStream和RandomAccessFile构造方法抛出。如果该文件存在,但是由于某些原因不可访问,比如试图打开一个只读文件进行写入,则此时这些构造方法仍然会抛出该异常。

MalformedURLException

抛出这一异常指示出现了错误的URL。或者在规范字符串中找不到任何合法协议,或者无法解析字符串。

UnknownHostException

指示主机IP地址无法确定而抛出的异常。


4.4 RuntimeException

是那些可能在Java虚拟机正常运行期间抛出的异常的超类。可能在执行方法期间抛出但未被捕获的RuntimeException的任何子类都无需在throws子句中进行声明。Java编译器不会检查它。当程序中可能出现这类异常时,还是会编译通过。虽然Java编译器不会检查运行时异常,但是我们也可以通过throws进行声明抛出,也可以通过try-catch对它进行捕获处理。

ArithmeticException:当出现异常的运算条件时,抛出此异常。例如,一个整数“除以零”时,抛出此类的一个实例。

ClassCastException:当试图将对象强制转换为不是实例的子类时,抛出该异常。例如:Object x = new Integer(0);

LllegalArgumentException:抛出的异常表明向方法传递了一个不合法或不正确的参数。

IllegalStateException:在非法或不适当的时间调用方法时产生的信号。换句话说,即Java环境或Java应用程序没有处于请求操作所要求的适当状态下。

IndexOutOfBoundsException:指示某排序索引(例如对数组、字符串或向量的排序)超出范围时抛出。 应用程序可以为这个类创建子类,以指示类似的异常。

NoSuchElementException:由Enumeration的nextElement方法抛出,表明枚举中没有更多的元素。

NullPointerException:当应用程序试图在需要对象的地方使用null时,抛出该异常。这种情况包括:

调用null对象的实例方法。

访问或修改null对象的字段。

将null作为一个数组,获得其长度。

将null作为一个数组,访问或修改其时间片。

将null作为Throwable值抛出。

应用程序应该抛出该类的实例,指示其他对null对象的非法使用。

5 SOF(堆栈溢出 StackOverflow)

当应用程序递归太深而发生堆栈溢出时,抛出StackOverflowError错误。

程序中一旦出现死循环或者是大量的递归调用,在不断的压栈过程中,造成栈容量超过默认大小而导致溢出。我在8G的内存下,用eclipse进行递归调用测试,递归11410次后抛SOF异常

栈溢出的原因:

递归调用

大量循环或死循环

全局变量是否过多

数组、List、map数据过大


6 Android的OOM(Out Of Memory)

当内存占有量超过了虚拟机的分配的最大值时就会产生内存溢出(VM里面分配不出更多的page)。

一般出现情况:

加载的图片太多或图片过大时

分配特大的数组

内存相应资源过多没有来不及释放。

解决方法:

1. 在内存引用上做处理

软引用是主要用于内存敏感的高速缓存。在JVM报告内存不足之前会清除所有的软引用,这样以来GC就有可能收集软可及的对象,可能解决内存吃紧问题,避免内存溢出。什么时候会被收集取决于GC的算法和GC运行时可用内存的大小。

2. 对图片做边界压缩,配合软引用使用

3. 显示的调用GC来回收内存

if(bitmapObject.isRecycled()==false)//如果没有回收

bitmapObject.recycle();

4. 优化Dalvik虚拟机的堆内存分配

4.1 增强程序堆内存的处理效率

//在程序onCreate时就可以调用 即可

privatefinalstaticfloatTARGET_HEAP_UTILIZATION =0.75f;

VMRuntime.getRuntime().setTargetHeapUtilization(TARGET_HEAP_UTILIZATION);

4.2 设置堆内存的大小

privatefinalstaticintCWJ_HEAP_SIZE =6*1024*1024;

//设置最小heap内存为6MB大小

VMRuntime.getRuntime().setMinimumHeapSize(CWJ_HEAP_SIZE);

5 用LruCache和AsyncTask<>解决

从Cache中去取Bitmap,如果取到Bitmap,就直接把这个Bitmap设置到ImageView上面。如果缓存中不存在,那么启动一个Task去加载(可能从文件来,也可能从网络)。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 162,408评论 4 371
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 68,690评论 2 307
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 112,036评论 0 255
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,726评论 0 221
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 53,123评论 3 296
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 41,037评论 1 225
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 32,178评论 2 318
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,964评论 0 213
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,703评论 1 250
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,863评论 2 254
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,333评论 1 265
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,658评论 3 263
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,374评论 3 244
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,195评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,988评论 0 201
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 36,167评论 2 285
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,970评论 2 279

推荐阅读更多精彩内容