Java异常处理
语法
语法格式:
1 | try{ |
代码中可以有多个catch来捕获不同类型的Exception,从上至下必须是子到父的关系,也就是说越明显的异常最先捕获,最后的异常才有Exception来捕获;finally里面的代码是程序最后执行的地方。
高升对finally的解译: *
finally的作用是上面的try代码块出现异常了,会中转执行跳转的catch块,这个时候如果有其他逻辑不管是否异常都要继续执行,就写到finally里面
自定义异常
在很多的情况下java内部定义的异常可能不满足目前场景,需要我们自己去定义一个异常类来处理,自定义的异常类必须是继承父类或者Exception的。
DrunkException.java
1 | package com.exceptiontest; |
异常链
在业务场景当中,我们可能会对某个服务进行处理,服务里面的异常和外部对服务的异常处理应该这样处理:
1 | package com.exceptiontest; |
前车之鉴
- 处理运行时异常时,采用逻辑去合理规避同时辅助try-catch处理
- 在多重catch块后面,可以加一个catch(Exception) 来处理可能会被遗漏的异常
- 对于不确定的代码,也可以加上try-catch,处理潜在的异常
- 尽量去处理异常,切忌只是简单的调用printStackTrace()去打印输出 (例如可以回滚)
- 具体如何处理异常,要根据不同的业务需求和异常类型去决定
- 尽量添加finally语块去释放占用的资源
Java中的字符串
概述与语法
在Java中字符串属于引用类型,字符串被作为String类型的对象处理,String类位于java.lang包中。
创建String对象:
1 | String s1 = "xiexiang"; |
字符串的不变性
String 对象创建后则不能被修改,是不可变的,所谓的修改其实是创建了新的对象,所指向的内存空间不同。
1 | String name1 = "xiexiang"; |
每次 new 一个字符串就是产生一个新的对象,即便两个字符串的内容相同,使用 ”==” 比较时也为 ”false” ,如果只需比较内容是否相同,应使用 ”equals()” 方法, System.out.println(name3.equals(name4));
字符串处理的常用方法
“==” 和 equals() 的区别
- ==: 判断两个字符串在内存中首地址是否相同,即判断是否是同一个字符串对象
- equals(): 比较存储在两个字符串对象中的内容是否一致
Java中的StringBuilder类及常用方法
概述:String是一个不可变的类,而StringBuilder是一个可变类。
StringBuilder对象用来储存字符串,并对其做了追加和插入的操作,这些操作只是修改了str对象的值,而没有创建新的对象,这就是StringBuilder和String最大的区别。
StringBuilder常用方法
方法 | 说明 |
---|---|
StringBuilder append(参数) | 追加内容到当前的StringBuilder对象的末尾 |
StringBuilder insert(位置,参数) | 将内容插入到StringBuilder对象的指定位置 |
String toString() | 将StringBuilder对象转换为String对象 |
int length() | 获取字符串的长度 |
1 | package com.string; |
Java中的包装类
概述:比如int、float、double、boolean、char等都属于基本数据类型是不具备对象的特性的,也不能条用方法、功能简单;为了让基本数据类型也具有对象的特性,java为每个基本数据类型都提供了一个包装类,这样就可以像操作对象那样操作基本数据类型。
基本类型 | 对应的包装类 |
---|---|
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
char | Character |
boolean | Boolean |
语法:
1 | int age = 19; //定义一个int基本数据类型 |
我们以Integer为例看下包装类里面的常用方法:
方法名 | 说明 | 返回值 |
---|---|---|
byteValue() | 将该Integer转为byte类型 | byte |
doubleValue() | 转为double类型 | double |
floatValue() | 转为float类型 | float |
intValue() | 转为int类型 | int |
longValue() | 转为long类型 | long |
parseInt(String s) | 将字符串转换为int类型 | static int |
toString() | 转为字符串类型 | String |
valueOf(String s) | 将字符串传唤为Integer类型 | static Integer |
1 | int age = 18; |
基本数据类型与包装类的转换 (装箱与拆箱)
在JDK1.5引入自动装箱和拆箱的机制后,包装类和基本类型之间的转换就轻松了。
装箱:把基本类型转换成包装类,使其具有对象的性质,又可分为手动装箱和自动装箱;
1 | int age = 18; //定义一个int的基本类型 |
拆箱:和装箱相反,把包装类对象转换成基本类型的值,又可分为手动拆箱和自动拆箱;
1 | Integer j = new Integer(90); //定义一个Integer包装类 |
基本数据类型与字符串之间的转换
基本类型转字符串
基本类型转换为字符串有三种方法:
1、使用基本类型的包装类的toString()方法;
2、使用String类的 valueOf()方法;
3、用一个空字符串加上基本类型,得到的就是基本类型数据对应的字符串;
1 | //将基本类型转换成字符串 |
字符串转基本类型
字符串转基本类型有两种方法:
1、调用包装类的parseXxx静态方法;
2、调用包装类的 valueOf()方法转换成基本类型
1 | //将字符串转换成基本类型 |
使用Date和SimpleDateFormat类表示时间
开发中我们可以用import java.util.Date这个类获取当前的时间。
1 | Date time = new Date(); |
这种方式并不是我们想要的结果,这个时候就需要用到import java.text.SimpleDateFormat这个类来对日期时间进行格式化。
1、使用format()方法将日期转换为指定格式的文本
1 | Date time = new Date(); |
2、使用parse()方法将文本转换为日期
1 | String date = "4018年06月18日 12:34:45"; |
代码中的”yyyy年MM月dd日 HH:mm:ss”指定了字符串的日期格式,调用parse()方法将文本转换为日期。
需要注意:
- 1、调用SimpleDateFormat对象的parse()方法时可能会出现转换异常,即parseException,因此需要进行异常处理。
- 2、使用Date类时需要导入java.util.Date包,使用SimpleDateFormat时需要导入 java.text.SimpleDateFormat 包
Calendar 类的应用
java.util.Calendar类是一个抽象类,可以通过调用getInstance()静态方法获取一个Calendar对象,此对象已由当前日期时间初始化,即默认为当前时间,如 Calendar c = Calendar.getInstance();
如何获取年月日时分秒?
1 | Calendar c = Calendar.getInstance(); |
调用 Calendar 类的 getInstance() 方法获取一个实例,然后通过调用 get() 方法获取日期时间信息,参数为需要获得的字段的值, Calendar.YEAR 等为 Calendar 类中定义的静态常量。
Calendar类提供了getTime()方法,用来获取Date对象,完成Calendar和Date的转换,还可以通过getTimeInMillis()方法,获取此Calendar的时间值,以毫秒为单位。
1 | // 创建Calendar对象 |
Math类操作数据
Math类位于java.lang包中,包含用于执行基本数学运算的方法,Math类的所有的方法都是静态方法,所以使用该类中的方法时,可以直接使用类名.方法名。
常用的方法:
方法名 | 说明 | 返回值 |
---|---|---|
round | 返回四舍五入后的整数 | long |
floor | 返回小于参数的最大整数 | double |
ceil | 返回大于参数的最小整数 | double |
random | 返回[0,1)之前的随机数浮点数 | double |
1 | package com.string; |