一、异常
1、什么是异常 :
程序生病了,非正常可以执行完毕|编译期间就检测出的问题
异常一旦出现: 1)程序无法执行 2)终止程序的继续执行,抛出异常的信息展示给程序猿
2、异常的体系 :
Throwable : 类是Java语言中所有错误和异常的超类。
/ \
Error Exception
Error : 一般是由虚拟机生成并脱出的,不由程序猿控制
Exception : 异常
CheckedException检查时异常|编译时异常 : 发生在程序需编译期间,如果程序猿不处理程序无法运行 ---->通过异常的处理方案(2种)
RuntimeException运行时异常 : 发生在程序运行期间,不处理程序终止执行 --->通过异常的处理方案(2种) | 增强程序健壮性if (推荐)
//使用if增强程序健壮性
String str = null;
if(str!=null){
System.out.println(str.length());
}
异常处理方案 : *****
1、 异常抛出 : throws 可以实现抛出多个异常,跑到上一层,由调用者解决处理
public class Class002_Exception {
public static void main(String[] args) throws FileNotFoundException {
test();
System.out.println("main结束");//不会执行
}
public static void test() throws FileNotFoundException {
InputStream is = new FileInputStream("D://test.txt");
}
}
2、 异常捕获 :
try{
//有可能出现异常的代码段;
}catch(异常类型 引用){
//捕获了对应类型异常后执行的代码;
}catch(异常类型 引用){
//捕获了对应类型异常后执行的代码;
}......
finally{
//无论是否出现异常都会执行的代码段...
//一般定义资源的关闭等代码;
}
如果try中的代码从上到下执行没有遇到异常,catch不会执行
如果try中代码一旦遇到异常,try后面的代码不再执行,从上到下执行catch判断哪一个catch所捕获的异常类型满足,执行对应的catch后的语句体
一个try后面可以接1~n个catch
接收异常类型范围较大的catch放在后面
3、自定义异常:
异常也是类,需要继承自异常体系
如果直接或者间接的继承自RuntimeException,当前异常类为运行时异常
如果直接继承自Exception,或者没有继承RuntimeException,继承了Exception其他子类,这样异常为一个编译时异常
throw制造异常
二、常用类
1、Object :
Object是Java中所有类的父类,Java中所有的类都会直接或者间接的继承自Object
如果显示的使用extends继承其他类,因为单继承机制,不会直接继承自Object,如果没有显示继承其他类,会默认继承自Object类
toString 方法: 返回对象的字符串表现形式
当输出一个对象的引用时,默认输出的是调用toString方法的返回值
Object类中的toString实现 :
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCod());
}
需求 : 想要输出对象的字符串表现形式时|引用时,输出的是对象所有的属性值---->子类中进行重写toString
class Person{
private String name;
private int age;
public Person() {
}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
//重写toString方法
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
equals : 比较两个对象是否相等,指示某个其他对象是否“等于”此对象。
equals与==之间的区别 :
共同点 : 比较两个数据是否相等
异同点 :
== 能够比较任意类型数据
equals 只能比较引用数据类型对象数据
比较规则 : == 基本数据类型比较数据值,引用数据类型对象数据比较地址值
equals :默认继承Object类比较为对象的地址值,默认通过==比较
重写equals->根据所有属性值进行比较是否相等
public boolean equals(Object obj) {
return (this == obj);
}
tips :
定义实现类,都要根据所有属性值进行重写toString与equals
实体类规范 : javabean
1.类是公共的
2.至少 提供一个空构造,根据需求提供带参
3.私有的属性
4.公共的访问方式
5.重写toString与equals
4、String类
String是什么 :
String类表示字符串。 Java程序中的所有字符串文字(例如"abc" )都实现为此类的实例。
字符串:
String : 不可变的字符序列(内容,长度,顺序)
StringBuilder : 可变的字符序列,线程不安全|不同步,效率较高
StringBuffer : 可变的字符序列,线程安全|同步的,效率较低
string类中的构造方法:
String(String original) 初始化新创建的String对象,使其表示与参数相同的字符序列; 换句话说,新创建的字符串是参数字符串的副本。
String s2 = new String("abc");
System.out.println(s2);
String(char[] value) 分配新的 String ,使其表示当前包含在字符数组参数中的字符序列。
char[] chars = {'中','国','a','b','c'};
String s3 = new String(chars);
System.out.println(s3);
String(char[] value, int offset, int count) 分配一个新的 String ,其中包含字符数组参数的子数组中的字符。
String s4 = new String(chars,2,3);
System.out.println(s4);