Java 基础知识(3)(抽象类/IO/异常)

1 抽象类

抽象 实际存在的,具体的现实生活中的事务叫做对象,而抽象就是将他们的共有信息提取出来做一个描述。比如说:“猫” 是一个对象,具体存在。“ 动物”,”宠物“等等就是猫可以抽象出来的东西,而抽象出来的东西又可以代表一个部分,你可以理解抽象出来的东西,但是不能用来具体对应上现实存在的事物。

1.1抽象类与普通类

(1) 抽象不是具体的概念,抽象类不能被实例化,而普通类可以进行实例化调用。
(2) 关于继承,普通类和抽象类都可以被继承,但是对于抽象类来说,如果继承抽象类的类也是抽象类,就和普通类一样。否则就必须重写继承的方法。

1.2抽象类与接口

接口是方法的抽象,抽象类是对事物本质的抽象。
接口只能有抽象方法和不可变常量抽象类可以有具体的方法和属性
抽象类主要用来抽象类别,而接口用来抽象功能
抽象类实现接口时,接口的方法在抽象类中可以被实现也可以不被实现,而普通实现接口必须实现所有接口方法
抽象类的功能要远超过接口,但是,定义抽象类的代价高。因为高级语言来说(从实际设计上来说也是)每个类只能继承一个类

1.3 抽象类不可以使用final修饰

因为抽象类就是用来被继承的,使用了final就不可被继承了

2 Java I/O

**定义:**数据流的输入和输出,主要有两大类:字节流和字符流。字节流可以处理任何类型的数据,如图片,视频等,字符流只能处理字符类型的数据。I/O流是单向传输的
分类:
根据数据处理的不同类型分为:字节流和字符流

·读写单位的不同:字节流以字节(8bit)为单位。字符流以字符为单位,根据码表映射字符,一次可能读多个字节。
·处理对象不同:字节流可以处理任何类型的数据,如图片、avi等,而字符流只能处理字符类型的数据。

根据数据流向不同分为:输入流和输出流

对于输入流只能进行读操作。
对于输出流只能进行鞋操作。

3 异常分类及常见异常

3.1分类

在这里插入图片描述
Throwable类继承Object()类,有两个重要的子类,Error(错误)和Execption(异常)
Error 是程序无法处理的错误,表示运行应用程序中较严重问题。大多数错误与代码编写者执行的操作无关,而表示代码运行时 JVM(Java 虚拟机)出现的问题。例如: Virtual MachineError: Java虚拟机运行错误 ,OutOfMemoryError 内存不足。

Exception程序本身可以处理的异常,Execption有一个重要的子类RuntimeException NullPointerException (空指针异常)IndexOutOfBoundsException(数组越界)ArithmaticException(除零错误)等。

3.2 throw和throws

throws总是出现在一个函数头中,用来标明该成员函数可能抛出的各种异常。对大多数Exception子类来说,Java 编译器会强迫你声明在一个成员函数中抛出的异常的类型。如果异常的类型是Error或 RuntimeException, 或它们的子类,这个规则不起作用, 因为这在程序的正常部分中是不期待出现的。 如果你想明确地抛出一个RuntimeException,你必须用throws语句来声明它的类型。 方法抛出异常
throw总是出现在函数体中,用来抛出一个异常。程序会在throw语句后立即终止,它后面的语句执行不到,然后在包含它的所有try块中(可能在上层调用函数中)从里向外寻找含有与其匹配的catch子句的try块
语句抛出异常
throw要么和try-catch-finally语句配套使用,要么与throws配套使用。但throws可以单独使 用,然后再由处理异常的方法捕获。

3.3 try-catch-final

try语句用大括号{}指定了一段代码,该段代码可能会抛弃一个或多个例外 ,可以内嵌
** catch语句的参数类似于方法的声明,包括一个例外类型和一个例外对象。例外类型必须为Throwable类的子类,它指明了catch语句所处理的例外类型,例外对象则由运行时系统在try所指定的代码块中生成并被捕获,大括号中包含对象的处理,其中可以调用对象的方法。
** finally

try所限定的代码中,当抛弃一个例外时,其后的代码不会被执行。通过finally语句可以指定一块代码。无论try所指定的程序块中抛弃或不抛弃例外,也无论catch语句的例外类型是否与所抛弃的例外的类型一致,finally所指定的代码都要被执行,它提供了统一的出口。通常在finally语句中可以进行资源的清除工作。如关闭打开的文件等。
注意: 但有一点值得注意,那就是尽量不要从try区段中返回(调用return),因为只要有finally区段存在,它就一定会被执行,那么如果你在finally区段中又调用了一次return语句,则try区段中的返回值将会被遮掩,使得方法调用者得到的是finally区段中的返回值

    public static void main(String[] args){
   		 int n=1,m=0;
   		 int k;
    	try {
       		 k = n/m;
       		 System.out.println("K的值是:"+k);
   		 }catch (RuntimeException e){
       		 System.out.println("除0");
   		 }finally {
        	System.out.println("finally");
   	 }
}

结果:

除0
finally

3.4 try-catch-final哪个可以省略

public static void main(String[] args){
    int n=1,m=0;
    int k;
    try {
        k = n/m;
        System.out.println("K的值是:"+k);
    }catch (RuntimeException e){
        System.out.println("除0");
    }
}
结果是:除0
    public static void main(String[] args){
    int n=1,m=0;
    int k;
    try {
        k = n/m;
        System.out.println("K的值是:"+k);
    } finally {
        System.out.println("finally");
    }
}
结果是:finally
Exception in thread "main" java.lang.ArithmeticException: / by zero
at Execption.ExecptionMain.main(ExecptionMain.java:13)
    public static void main(String[] args){
    int n=1,m=0;
    int k;
    try {
        k = n/m;
        System.out.println("K的值是:"+k);
    }
}
直接报错;

所以结果是:可以省略catch或者finally,但是不能同时省略两者。

3.4 final,finally和finalize的区别

final 用于申明属性,方法和类,表示属性不可变,方法不可以被覆盖,类不可以被继承。
finally 是异常处理语句结构中,表示总是执行的部分。  
finallize 表示是object类一个方法,在垃圾回收机制中执行的时候会被调用被回收对象的方法。允许回收此前未回收的内存垃圾。所有object都继承了 finalize()方法

发布了54 篇原创文章 · 获赞 13 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/liutaiyi8/article/details/101626899
今日推荐