day005-异常
1、 异常概念
1.1 异常的继承体系
异常的根类:java.lang.Throwable,其下有两个子类:
Java.lang.Error
Java.util.Exception 这个就是我们平常说的异常
Exception:是指程序在执行过程中或编译过程中出现了问题,导致了JVM的停止。异常产生后程序员可以通过代码方法纠正,使程序继续运行。
Error:严重错误,无法通过处理的错误。
错误出现了,一般都是改代码。异常出现了,可以处理也可以不处理。
Throwable中打印异常常用方法:
public void printStackTrace() //将此throwable和其追溯打印到标准错误流。
1.2 异常分类
l 编译时异常:checked异常。在编译时期,就会检查。如果没有处理异常,则编译失败。(如日期格式化异常)
l 运行时异常:runtime异常。在运行时,检查异常。在编译时期,运行时异常不会被编译器检测(如数学异常)
2、异常处理
2.1 JVM处理
把异常的名称、原因、位置等信息输出在控制台,并结束程序的运行。
注意:异常一旦发生其后来的代码不会继续执行。
2.2手动处理
l 抛出处理:将问题标识出来,报告给调用者。
l 捕获处理:Java中对异常有针对性的语句进行捕获,可以对出现的异常进行指定方式的处理。
2.2.1 捕获处理格式
try{
编写可能出现异常的代码
}
catch(异常类型 e){
处理异常的代码
//记录日志、打印异常信息、继续抛出异常
}
l try代码块:
··· a)存放可能出现异常的代码块,只要有一行出现一行,后面的语句将不会执行。
b)try代码块内只会出现一个异常
l catch代码块:
a)出现了异常之后要执行的代码,如果try代码块的代码没有出现异常,则catch模块不会执行
b)异常出现后,最多只有一个catch语句执行。
C)子类异常要求在父类异常上面处理
l finally代码块的作用:
try、catch之后,都会执行的代码。只要进入了try,都会执行finally里面的语句。
作用:不管是否出异常,最后一定要执行的操作,一般用于释放资源。
2.2.2抛出处理:
l throw关键字:将异常对象抛出,抛给方法调用者,并结束当前方法的运行。
l throws关键字:用来声明异常,将异常标识处理告诉方法调用者该方法可能会出现异常有哪些。
a)throw和throws关键字的使用格式:
throw关键字:throw new 异常类名(“异常信息”)
throws关键字:修饰符 返回值类型 方法名() throws 异常类名1, 2, ,3 …n
b)throw和throws关键字的使用格式:
throw关键字:用在方法体内
throws关键字:用在方法声明上
3.编译时异常和运行时异常
l 编译时异常:除了运行时异常的异常都是编译时异常
l 运行时异常:只要是RunTimeException类及其子类都属于运行时异常
3.1编译时异常特点:
方法体中抛出的异常如果是编译时异常,则要求必须处理。
方法声明上抛出的异常如果是编译时异常,则要求方法调用者必须要处理。
3.2运行时异常特点:
方法体中抛出的异常如果是编译时异常,可以处理也可以不处理。
方法声明上抛出的异常如果是编译时异常,方法调用者可以处理也可以不处理。
3.3 为什么运行时异常不一定需要处理,是一个宽松管理规范?
运行时异常可以通过程序员的良好编程习惯来避免,所以不要求一定要处理异常。
4.多线程
4.1 进程、线程的概念
l 什么是进程
正在运行中的程序就是一个进程。
l 什么是线程
线程是进程中的一个独立的执行路径。
l 进程和线程的关系:
工厂:可以比喻为进程。
工人:可以比喻为线程。
4.2进程、线程的作用
l 进程的作用
用来封装线程的,为线程执行任务(代码)提供资源(内存空间)
每一个进程之间的内存空间是独立的,互不干扰
l 线程的作用:
用来执行代码
l 并行、并发的作用
并行:同一个时间点执行
并发:同一个时间段执行
4.3 Thread类概述
一个该类的对象就代表一个线程对象(相当于一个工人)
4.3.1创建线程的方式:
创建一个类继承Thread类
重写run方法:将线程任务写在run()方法体内
调用start()方法,开启线程干活
4.3.2继承Thread类创建多线程的例子:
package com.yangzhihui.level03.test02;
import java.util.Random;
public class ThreadDemo {
public
static void main(String[] args) {
MyThread
myThread01 = new MyThread("线程1:");
MyThread
myThread02 = new MyThread("线程2:");
myThread01.start();
myThread02.start();
}
}
class MyThread extends Thread {
public
MyThread(String name) {
super(name);
}
@Override
public void
run() {
Random
random = new Random();
int sum
= 0;
for (int
i = 0; i < 30; i++) {
int
num;
num
= random.nextInt(901) + 100;
sum
+= num;
System.out.println(Thread.currentThread().getName() + num);
}
System.out.println("10个100~1000随机数的和是:" + Thread.currentThread().getName() + sum);
}
}
day005-异常的更多相关文章
- alias导致virtualenv异常的分析和解法
title: alias导致virtualenv异常的分析和解法 toc: true comments: true date: 2016-06-27 23:40:56 tags: [OS X, ZSH ...
- ASP.NET Core应用的错误处理[2]:DeveloperExceptionPageMiddleware中间件如何呈现“开发者异常页面”
在<ASP.NET Core应用的错误处理[1]:三种呈现错误页面的方式>中,我们通过几个简单的实例演示了如何呈现一个错误页面,这些错误页面的呈现分别由三个对应的中间件来完成,接下来我们将 ...
- 记一次tomcat线程创建异常调优:unable to create new native thread
测试在进行一次性能测试的时候发现并发300个请求时出现了下面的异常: HTTP Status 500 - Handler processing failed; nested exception is ...
- 使用JSONObject.fromObject的时候出现“There is a cycle in the hierarchy”异常 的解决办法
在使用JSONObject.fromObject的时候,出现“There is a cycle in the hierarchy”异常. 意思是出现了死循环,也就是Model之间有循环包含关系: ...
- SignalR代理对象异常:Uncaught TypeError: Cannot read property 'client' of undefined 推出的结论
异常汇总:http://www.cnblogs.com/dunitian/p/4523006.html#signalR 后台创建了一个DntHub的集线器 前台在调用的时候出现了问题(经检查是代理对象 ...
- [C#] C# 知识回顾 - 你真的懂异常(Exception)吗?
你真的懂异常(Exception)吗? 目录 异常介绍 异常的特点 怎样使用异常 处理异常的 try-catch-finally 捕获异常的 Catch 块 释放资源的 Finally 块 一.异常介 ...
- [C#] C# 知识回顾 - 学会处理异常
学会处理异常 你可以使用 try 块来对你觉得可能会出现异常的代码进行分区. 其中,与之关联的 catch 块可用于处理任何异常情况. 一个包含代码的 finally 块,无论 try 块中是否在运行 ...
- [C#] C# 知识回顾 - 学会使用异常
学会使用异常 在 C# 中,程序中在运行时出现的错误,会不断在程序中进行传播,这种机制称为“异常”. 异常通常由错误的代码引发,并由能够更正错误的代码进行 catch. 异常可由 .NET 的 CLR ...
- [C#] C# 知识回顾 - 异常介绍
异常介绍 我们平时在写程序时,无意中(或技术不够),而导致程序运行时出现意外(或异常),对于这个问题, C# 有专门的异常处理程序. 异常处理所涉及到的关键字有 try.catch 和 finally ...
- 基于AOP的MVC拦截异常让代码更优美
与asp.net 打交道很多年,如今天微软的优秀框架越来越多,其中微软在基于mvc的思想架构,也推出了自己的一套asp.net mvc 框架,如果你亲身体验过它,会情不自禁的说‘漂亮’.回过头来,‘漂 ...
随机推荐
- 前端PostJosn,后端转化相应的类
/// <summary> /// JsonPost特性类 /// </summary> [AttributeUsage(AttributeTargets.Method, In ...
- http简单请求 -- 复杂请求
- 【研究】CVE-2015-1635-HTTP.SYS远程执行代码漏洞(ms15-034)
1.1.1 漏洞描述 在2015年4月安全补丁日,微软发布的众多安全更新中,修复了HTTP.sys中一处允许远程执行代码漏洞,编号为:CVE-2015-1635(MS15-034 ).利用HTTP. ...
- Java Web编程
一.二.三有空补 四. Web应用的安全 1. CSS攻击,跨站脚本攻击 跨站脚本,顾名思义,就是恶意攻击者利用网站漏洞往Web页面里插入恶意代码,一般需要以下几个 条件: (1)客户端访问的网站 ...
- Python学习 day06
一.== 和 is == 比较的是值 is 比较的是地址 id() -- 返回对象的内存地址 例: 赋值操作是将地址赋给变量 Python 中会实现创建一个小型的整形池,范围为 [-5,25 ...
- 在CentOS 7上搭建私有Docker仓库
Hub IP:10.0.2.6 操作系统:CentOS 7 64位 Docker版本:1.12.5Client IP:10.0.2.4 操作系统:CentOS 7 64位 Docker版本:1.12. ...
- java中构造函数的特点
构造函数的名字必须和类名完全相同,构造函数不能有 返回值,就是void 也不要写,构造函数不可以被子类继承 构造函数可以重载但是不可以被子类覆盖. 简单的例子 class A{ A(){ } A(in ...
- 数据库~大叔通过脚本生成poco实体
今天在做开发时,需要把表映射成实体,又没有EF这种工具,就从网上下了一个工具,但使用时觉得太重了,所以就自己写了一个,基于mysql的. 功能:输入表名,得到这个表的poco实体 SELECT COL ...
- MYSQL系列-Mysql存储引擎选择
MYSQL系列-Mysql存储引擎选择 //查看当前数据库支持的存储引擎 show engines \G; 创建表的时候可以通过engine=MyISAM指定存储引擎 MyISAM: .MYISAM不 ...
- [實現DDD] 第10章 聚合(1)設計原則
聚合只是將一些實體(Entity)與值對象(Value Object)聚集起來的對象樹嗎?? 有些途徑可能使我們設計出不正確的聚合模型, 如:可能為了對象組合上的方便而將聚合設計的很大;也可能設計的聚 ...