异常:
程序生病了
Throwable
Error Exception
| |
Uncheck
Exception
Error:错误:一般是由虚拟机生成并脱出的,程序员无法解决
Exception: 异常
CheckException 检查时异常|编译时异常: 编译时期就会出现的异常
如果出现了编译时异常不处理,程序无法运行
RuntimeException 运行时异常 : 运行时期会出现的异常
所有的运行时异常都会直接或者间接的继承自RuntimeException,可通过增强程序的健壮性处理 if判断
常见的运行时异常:
1.空指针异常 NullPointerException
2.数组长度负数异常 NegativeArraySizeException
throw 制造异常
异常处理方式 *****
throws 异常抛出
try…catch 异常捕获
try{
可会出现异常的代码…
}catch(NullPointerException e){
如果出现这个异常,需要执行的代码
}catch(FileNotFoundException e){
…
}catch(Exception e){
…
}
…
finally{
无论是否出现异常,都会执行的代码
}
try中一旦出现异常,不会继续向下执行,会执行对应的catch中的内容
一个try中可以跟1~多个 catch,小范围catch放在放在上面,大范围的catch放下面
运行时异常可以使用增强程序的健壮性或者异常处理方式的两种,抛出或者捕获处理
编译时异常必须使用异常处理方式的两种,抛出或者捕获处理
自定义异常:(理解)
现在使用的都是java提供的异常类,可以自定义异常类
自定义的异常类必须直接或者间接的继承自Exception类
//自定义异常
public class Test112 {
public static void main(String[] args) {
Person ac=new Person();
//我们这里用try catch..,来处理异常
try {
//看看这个语句是否有异常,有的话执行catch里面的语句
ac.setAge(130);
} catch ( AgeException e) {
//捕捉异常,并且打印出来
e.printStackTrace();
}finally {
System.out.println(ac.getAge());
}
ac.age1();
}
}
//这里我们创建一个异常年龄
class AgeException extends Exception{
public AgeException(){
}
public AgeException(int age){
super(age+"年龄不合法");
}
}
//这里我们定义一个人的类
class Person{
//定义私有的成员变量
private String name;
private int age;
public Person(){
//空构造
}
//带参构造
public Person(int age){
super();
this.age=age;
}
//这里我们定义一个公用的给年龄赋值的方法,判断是否满足要求,不满足就抛出异常
public void setAge(int age) throws AgeException{
//当年龄小于0,或大于120岁时就会抛出我们创建的异常
if (age>0&&age<120) {
this.age=age;
}else {
throw new AgeException(age);
}
}
//这里是一个接收setAge的值的方法
public int getAge(){
return age;
}
//定义一个方法打印合法年龄
public void age1(){
System.out.println(age);
}
}
常用类: 常用的类
字符串 String : 不可变长的字符序列 ,Java 程序中的所有字符串字面值(如 “abc” )都作为此类的实例实现。
String : 不可变长的字符序列
StringBuilder : 可变长的字符序列 ,线程不安全,效率高
StringBuffer : 可变长的字符序列 , 线程安全的,效率较低
是字符数组形式存储的
关注的顺序:
1.类的作用|本身的特点
2.构造器–>创建对象
3.成员方法|静态方法
StringBuilder StringBuffer String区别
StringBuilder:单线程环境下大量操作字符串,效率较高
StringBuffer : 多线程环境系大量操作字符串,线程安全,同步
String : 表示少量操作字符串 ,简单,功能较多
可以相互转换
枚举类
使用enum关键字定义枚举
表示一种事物的多种可能|所有可能|所有情况
注意:
所有的枚举类都隐式继承自java.lang.Enum类
枚举中的所有成员|实例|字段 都是,默认public static final,都是当前类型的一个实例
包装类型: 基本数据类型的包装类
基本数据类型 包装类
byte — Byte
short — Short
int — Integer
long — Long
float — Float
double— Double
char — Character
boolean — Boolean
转换:
自动装箱: 基本—>包装
自动拆箱: 包装—>基本
//自动装箱
//自动拆箱
//基本数据类型
public class Packing {
public static void main(String[] args) {
double a=200.0;
Double b=200.0;
Double c=200.0;
//发生了自动拆箱
System.out.println(c==b);
int a1=129;
Integer a2=129;
//自动拆箱
System.out.println(a1==a2);
}
}
总结:
1.如果两个new Integer比较是否相等,肯定不相等,堆中的两个地址
2.如果一个Integer,一个new Integer肯定不相等,一个常量池,一个堆中的地址,肯定不相等
3.如果int与Integer|new Integer 都会发生自动拆箱,值相等就相等
4.如果是两个Integer,判断值是否在[-128,127]之间,之间就相等,否则不等