异常与常用类

异常

描述:程序出现了问题;程序一旦遇到异常,后面代码无法正常执行,并且同时控制台中展示异常的详细信息|细节问题,便于程序猿的调试

1. 异常体系

异常体系:都是类,所以首字母需要大写

​ Throwable(父类)
​ /
Error Exception(子类)

Error(错误):一般指由虚拟机生成并脱出的,无需程序猿解决处理

Exception(异常):阻碍程序的正常运行,异常如果不处理,程序无法正常执行,需要程序猿在代码层面上处理异常

2. 异常的分类

  1. RuntimeException:运行时异常:运行期间才会发生的异常
  2. CheckedException 编译时异常|检查时异常 : 编译期间发生的异常,不处理程序无法运行

3. *异常处理方案

所有的异常都可以通过异常处理方案来处理

运行时异常:一般通过增强程序健壮性的代码就可以解决 -> 即if判断;也可以通过异常处理方案来处理

编译时异常:只能通过异常处理方案来处理

1)异常处理方案

  1. 异常抛出(throws):将异常抛出到上一层,谁调用谁处理
  2. 异常捕获(try-catch):异常对象当前抓住,直接处理

2)try-catch语句

try {
    可能会出现异常的代码;
} catch (FileNotFoundException e) {
    e.printStackTrace();
} catch (NullPointerException e) {
    e.printStackTrace();
} catch (Exception e) {  --> 接盘侠
    System.out.println("出现了文件未找到异常, 捕获异常...");
    e.printStackTrace();
}finally{
    无论try中是否会出现异常,最终都会执行的代码
}

3)注意

1.异常一旦处理,不影响程序的继续执行
2.try中代码可能出现异常,可能不会出现异常

​ 如果没有出现异常,try{}中的代码执行完毕,try…catch结束
​ try中代码一旦异常,try后面的代码不会执行,直接执行catch的判断

​ 从上到下一次判断,判断当前的catch是否能够捕获出现的异常对象,如果能,执行后面 的{}中的代码
​ 如果不能匹配,继续向下判断,如果所有的都不鞥匹配,当前的异常对象没有处理,中止 程序的执行
3.一个try后面可以跟1~n个catch
4.如果一个异常已经通过catch处理不影响后面代码的执行
5.接收范围较大的异常的catch,需要定义在后面
6.finally 最终的
​ 无论try中是否会出现异常,finally中的代码肯定最后会执行
​ 一般会定义一些资源的关闭等代码

4. 常见的运行异常

NullPointerException 空指针异常
ArithmeticException 数学异常
ArrayIndexOutOfBoundsException 数组索引越界异常
NegativeArraySizeException 数组长度负数异常
ClassCastException 类型转换异常
NumberFormatException 转换格式异常

5.自定义异常

异常也是类,需要遵守类的规则与规范

需要直接或者间接的继承Exception类;如果是运行时期异常必须直接或者间接的继承RuntimeException

自定义异常:

class NameException extends Exception{
    public NameException(){}

    public NameException(String message){
        super(message);
    }
}

使用:if(判断不合法的语句)
	throw new NameException(name+"不合法");

NameException:按照见名知意的原则,按照需要自定义异常名

throw: 制造异常

常用类

学习API类型:
了解类的作用与特点
学习构造器
学习方法
成员
非静态
静态的

底层分析:
jdk11 ->使用字节数组存储字符串数据 private final byte[] value;
jdk8 -> 使用字符数组存储字符串数据 private final char[] value;

String字符串

String:不可变长字符序列,表示字符串,写在" "中

eg:“abc”,“123”,"张三"等

String str = “abc”; "abc"表示字符串常量,在方法区的字符串常量池中

new String() --------new创建对象,在堆中

常用类:

    String str = "jintiantianqizhenhaohahaha";
    String str2 = "Jintiantianqizhenhaohahaha";
常用类描述返回值
charAt(int index)返回指定索引处的 char值字符
codePointAt(int index)返回指定索引处的字符(Unicode代码点)数值(对应字符的ASCII值)
compareTo(String anotherString)按字典顺序比较两个字符串。数值(两个字符的ASCII差值)
compareToIgnoreCase(String str)按字典顺序比较两个字符串,忽略大小写差异。数值(ASCII差值,大小写不区分)
concat(String str)将指定的字符串连接到此字符串的末尾字符串(拼接)
contains(CharSequence s)当且仅当此字符串包含指定的char值序列时,才返回trueboolean值
equals(Object anObject)将此字符串与指定的对象进行比较boolean值(仅比较内容)
equalsIgnoreCase(String anotherString)将此 String与另一个 String比较,忽略了大小写同上,忽略大小写差异
endsWith(String suffix)测试此字符串是否以指定的后缀结尾boolean
copyValueOf(char[] data)【静态方法】String
int indexOf(String str)返回指定子字符串第一次出现的字符串中的索引。int
int indexOf(String str, int fromIndex)从指定的索引处开始,返回指定子字符串第一次出现的字符串中的索引int
int length()返回此字符串的长度。int

StringBuilder 与 StringBuffer

字符串缓冲区的下,效率相对String更快,建议使用此类优先于StringBuffer因为在大多数实现中它会更快。
String 不可变长的字符序列,对字符串做少量改动的时候推荐使用
StringBuilder 可变长字符序列 , 线程不安全 ,单线程下大量操作字符串推荐使用
StringBuffer 可变长字符序列 , 线程安全的 ,多线程下大量操作字符串推荐使用

执行效率: StringBuilder > StringBuffer > String

StringBuilder 与 StringBuffer(方法差不多,以StringBuilder为例)

方法名描述
StringBuilder()构造一个字符串构建器,其中不包含任何字符,初始容量为16个字符
StringBuilder(int capacity)构造一个字符串构建器,其中没有字符,并且具有 capacity参数指定的初始容量–>能够确定容量的情况下可以选择使用
StringBuilder append(boolean b)将 boolean参数的字符串表示形式追加到序列中
StringBuilder delete(int start, int end)删除此序列的子字符串中的字符。 结束索引不包含
StringBuilder insert(int offset, String str)将字符串插入此字符序列
StringBuilder reverse()导致此字符序列被序列的反向替换

String 与 StringBuilder|StringBuffer 相互转换:

StringBuilder(String str)

​ 构造一个初始化为指定字符串内容的字符串构建器。

String(StringBuffer buffer)

​ 分配一个新字符串,其中包含当前包含在字符串缓冲区参数中的字符序列。

String(StringBuilder builder)

​ 分配一个新字符串,其中包含当前包含在字符串构建器参数中的字符序列。

扩容机制: int newCapacity = (oldCapacity << 1) + 2; 原容量的2倍+2

Math(静态工厂)

方法描述
static double ceil(double a)向上取整
static double floor(double a)向下取整
static double max(double a, double b)返回两个 double值中较大的 double
static double pow(double a, double b)返回第一个参数的值,该值是第二个参数的幂(求一个数的次方)
static double random()随机数,返回带有正号的 double值,大于或等于 0.0且小于 1.0
static long round(double a)返回与参数最接近的 int ,并将关系四舍五入为正无穷大。 -->小数点后1位四舍五入
static double sqrt(double a)返回 double值的正确舍入正平方根(开平方)

基本数据类型和其包装类

引用数据类型的作用:

  1. 包装类是类,类中可以定义成员,增强使用能力(成员变量,成员方法…)

  2. 类似集合,要求只能存储引用数据类型的数据

  3. 基本数据类型与引用数据类型的默认值(null)

基本数据类型的优势:

​ 基本数据类型比引用数据类型更节省内存空间,存在性能优势

基本数据类型与其对应的包装类:

基本数据类型对应引用数据类型
byteByte
shortShort
intInteger
longLong
floatFloat
doubleDouble
charCharacter

自动拆装箱:
自动装箱 : 基本—> 包装
自动拆箱 : 包装—> 基本

比较:

使用 == :

​ 基本数据类型->数据值

​ 引用数据类型->地址值

1.两个基本数据类型int比较,只要数据值相等就相等

2.两个new Integer()比较,肯定不相等,因为new每个对象堆内存中地址不同

3.Integer与new Integer()比较肯定不相等.因为new不同的地址

4.基本数据类型int与Integer|new Integer比较,如果数据值相等肯定相等,因为包装类会发生自动拆箱,然后比较数据值

5.两个Integer比较,在缓冲区范围[-128,127]之间就相等,同一个缓冲区对象,否则返回new Integer()

public static void main(String[] args) {
    int i1 = 127;
    int i2 = 127;
    //Integer.valueOf(127)  Integer缓冲区对象能够表示的数据范围:[-128,127]
    Integer i3 = 127;
    Integer i4 = 127;
    Integer i5 = new Integer(127);
    Integer i6 = new Integer(127);
    Integer i7 = 128;
    Integer i8 = 128;

    System.out.println(i1==i2);  //true
    System.out.println(i3==i4);  //true
    System.out.println(i1==i3);  //true
    System.out.println(i5==i6);  //false
    System.out.println(i1==i6);  //true
    System.out.println(i3==i6);  //false
    System.out.println(i7==i8);  //false
}

Enum枚举类

枚举类 : 当能够确定一种事物的所有可能,一个类型的所有对象的时候
是类,定义枚举类型 enum
java中所有的枚举类型都会隐式的继承自java.lang.Enum, 这是所有Java语言枚举类型的公共基类。
枚举类中的字段,就为做当前枚举类型的一个实例存在,默认被 public static final修饰

可以配合switch使用

Date日期

Date类表示特定的时刻,精度为毫秒

Date对象并对其进行初始化,使其表示分配时间,测量 Date到毫秒

方法:

SimpleDateFormat 格式日期转换器

SimpleDateFormat simple = new SimpleDateFormat();  --> 默认格式
SimpleDateFormat simple = new SimpleDateFormat("yyyy-MM-dd  HH:mm:ss");----->自定义格式

format() 日期对象转换字符串

simple.format(date)

parse() 字符串转为日期对象

String datestr = "2021-06-10  17:22:53";
simple.parse(datestr)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值