可以理解为就是程序出错了,示例:
package javase.base.exception;
public class TestError {
public static void main(String[] args) {
int i = 3/0;
System.out.println(i);
}
}
报错信息:不能除以0
Exception in thread "main" java.lang.ArithmeticException: / by zero
at javase.base.TestError.main(TestError.java:5)
package javase.base.exception;
public class TestException {
public static void main(String[] args) throws Exception{
//主动制造异常
//模拟输入密码不正确,而向上抛出异常
try {
String password = "root";
if( !"admin".equals(password) ) {
//主动抛出错误
throw new Exception("password error.");
}
} catch (Exception e) { //捕获异常
//主动抛出错误
System.out.println(e.getMessage());
throw new Exception("密码错误! ");
}
//完美体现流程控制
//僵尸代码,不可能执行 Unreachable code
//System.out.println("完成了");
}
}
package javase.base.exception;
public class TestError {
public static void main(String[] args) {
try {
int i = 4/0;
System.out.println(i);
}catch(Exception e) {
System.out.println("出错啦," + e.getMessage());
}
}
}
public class TestFinally {
public static void main(String[] args) {
try { //try里面的代码必须执行
String name = "tony";
int i = 3/0; //抛出异常
} catch(Exception e) { //只有出现异常才执行
System.out.println(e.getMessage());
} finally { //死活都执行,对复杂对象释放资源
System.out.println("看我执行了吗?");
}
}
}
CloneNotSupportedException------克隆不支持异常
ParseException------------------解析异常
ArithmeticException--------------算术异常
ArrayIndexOutOfBoundsException---数组下标越界异常
ClassCastException---------------类型转换异常
NumberFormatException------------数字格式异常
3.自定义异常:
a. 如果要抛出的异常类不存在,可以自定义异常类,需继承Exception默认就是编译时异常,也可以继承RuntimeException默认是运行时异常。
b. 如果方法抛出多少个编译时异常就要捕获多少个编译时异常
c. try块里存放时可能出错的代码 catch块里是针对try里出错的代码进行吧捕获处理
d. 异常如果被抛出后面的代码不会执行
//自定义异常类---继承Exception默认就是编译时异常
//如果自定义异常类继承RuntimeException/子类默认就是运行时异常
class PathNotExitsException extends Exception{
/*//私有化属性---报错信息
privateStringmessage;*/
//有参构造
public PathNotExitsException(String message){
//this.message=message;
super(message);//调用父类的有参构造
}
/*publicStringgetMessage(){
returnmessage;
}*/
}
class FileNotExitsException extends Exception{
//
public FileNotExitsException(String message){
super(message);//调用父类的有参构造
}
}
public class ExceptionDemo2{
public static void main(String[] args){
//调用方法读取文件中的内容
try{//可能会出错的代码放到try块里
Stringresult=readFile(null);//参数就是文件的路劲
}catch(PathNotExitsExceptione){//把检测到的异常进行捕获处理
//e对象就是下面方法抛出的自定义异常类的对象
System.out.println(e.getMessage());
}catch(FileNotExitsExceptione){//多个抛出的异常可以多个catch进行捕获
System.out.println(e.getMessage());//父类的方法
}catch(NullPointerExceptione){//可以处理运行时异常
//打印异常报错信息的栈轨迹
e.printStackTrace();
}
//如果异常被捕获处理后面的代码继续执行
//代码执行到这块
System.out.println("读取完成");
}
//读取文件内容的方法
//如果方法上抛出多个异常时yong,分割
//方法抛出多少个编译时异常就要处理多少个编译时异常
public static StringreadFile(String path)throwsPathNotExitsException,FileNotExitsException,NullPointerException{
//读取文件内容
//传过来的文件路径可能为null
//判断参数是否为null
if(path==null){
throw new NullPointerException();//运行时异常可以处理也可以不处理
}
//要查找的盘符不存在---把问题的信息进行反馈
//把自定义异常类的对象往上抛出
if(path.startsWith("W"))//判断是否以W开头的盘符
throw new PathNotExitsException("亲,您路径不存在!!!");//编译时异常
//查找文件过程当中文件类型不对--把问题信息进行反馈
//判断文件后缀名是否是.txt
if(!path.endsWith(".txt")){//进判断说明后缀名不是.txt
//把异常类的对象进行返回
throw new FileNotExitsException("亲,您的文件后缀名不对!!!");//编译时异常
}
//把文件内容进行返回
//如果异常被抛出后面的代码都不会执行
return"文件的内容...";
}
}
1、判断条件:可以是直接的Boolean类型的值;或者是运算结果为Boolean值的表达式
2、执行流程:
先执行判断条件,
如果true:执行代码块
如果false:if语句结束
3、注意:
if后边没有{}也可以正常编译运行,但是if控制的代码只能是紧跟在if后边的第一行代码;
格式二: if(判断条件){
代码块1;
}else{
代码块2;
}
1、执行流程:
先执行判断条件,如果为true,则执行代码块1;如果为false,则执行代码块2;
格式三:if else if else
if(判断条件1){
代码块1;
}else if(判断条件2){
代码块2;
}else if(判断条件3){
代码块3;
}
…
else{
代码块n;
}
格式: switch(值){
case 值1: 代码块1;
break;
case 值2: 代码块2:
break;
… default:
代码块n;
break;
}
1、执行流程:
使用值和值1,值2….一一匹配,如果相等,则执行该值对应的case的代码块;如果代码块中包含了break,则执行break结束switch case语句;如果没有break,则先执行当前case对应的代码块,之后的case的代码块、default的代码块的内容均会一一执行(case穿透);
2、注意:
switch中可以匹配的值得类型 int(byte short char) 枚举 JDK1.7开始支持String类型
1、四要素:
初始化语句;判断条件;循环体;改变判断条件的语句;
2、分类:
格式:
初始化语句;
while(判断条件){
循环体;
改变判断条件的语句;
}
1、执行流程:
a.初始化语句
b.判断条件:boolean值
true:
循环体;改变判断条件的语句
重复步骤2
false:
循环结束
while(true){
}
注意: 该循环是死循环
格式:
初始化条件语句;
do{
循环体;
改变判断条件的语句;
}while(判断条件);
执行流程:
1、初始化条件语句;
2、循环体;
3、改变判断条件的语句;
4、判断条件
true:重复执行2-4
false:循环结束
do.while和while的区别:
do.while无论如何都会先执行一遍循环体;
while有可能循环体一次都不执行.
执行流程:
1.初始化条件语句;
2.判断条件:
true:循环体;改变判断条件的语句;重复步骤2
false:循环结束
for(;;){
System.out.println("hello");
}
**注意:**for()里的三个语句可以都为空,如果都为,循环是死循环
Break:
1.结束switch case
2.跳出循环
注意:
1.break默认跳出的是内层循环
continue
跳出本次循环,会跳过continue后面的语句,直接进行条件判断,进行下次循环
return主要功能
1、把方法的返回值进行返回
2、用于结束方法(void方法中也可以使用 return,但是只能单独使用)
本期给大家分享的就到此结束,下期给大家分享面向对象的内容,Java的一大核心,如果你读到我写的文章,觉得还不错,记得关注我哟,我每周都会给大家分享学习Java的干货,谢谢大家!!!