@MRsunhuimin
2019-07-24T11:20:33.000000Z
字数 4991
阅读 577
java基础
(1)普通类可以被实例化,普通类有方法体
(2) 抽象类不能被实例化,抽象类没有方法体
(1)抽象类中可以没有抽象方法,但包含了抽象方法的类必须被定义为抽象类
(2)如果子类没有实现父类的所有抽象方法,子类必须被定义为抽象类
(3)没有抽象构造方法,也没有抽象静态方法
(4)抽象类中可以有非抽象的构造方法,创建子类的实例时可能调用
(5)抽象类不能实例化对象,抽象类本身也不能被实例化,只能被继承
(6)抽象类使用abstract来修饰
(1)接口是一种“能力”
(2)在程序设计时,关心实现类有何能力,而不关心实现细节;面向接口的约定而不考虑接口的具体实现。
(1)接口不可以被实例化
(2)实现类必须实现接口的所有方法
(3)实现类可以实现多个接口,使用implements,多个接口用逗号隔开
(4)接口中的变量都是静态常量,即 public static final
(1)接口中的成员变量默认都是public static final的,必须显示初始化;
(2)接口中的方法默认都是public static的;
(3)接口没有构造方法,不能被实例化;
(4)一个接口不能实现另一个接口,但可以继承多个其他接口;
(5)一个类必须实现接口抽象方法(implements),除非这个类也是抽象类
//阅读代码,找出错误public interface MyInterface {public MyInterface(); //F(接口没有构造方法)public void method1(); //Tpublic void method2(){ } //F(方法默认都public static)private void method3(); //F(private错误)void method4(); //Tint method5(); //Tint TYPE = 1; //T}
相同点:
(1)都代表系统的抽象层
(2)都不能被实例化
(3)都能包含抽象方法
(4)用于描述系统提供的服务,不必提供具体实现
不同点:
(1)在抽象类中可以为部分方法提供默认实现,而接口中只能包含抽象方法
(2)抽象类便于复用,接口便于代码维护
(3)一个类只能继承一个直接的父类,但可以实现多个接口
使用原则:
(1)接口做系统与外界交互的窗口
(2)接口提供服务
(3)接口本身一旦制定,就不允许随意修改
(4)抽象类可完成部分功能实现,还有部分功能可作为系统的扩展点
(1)属性全都是全局静态常量
(2)方法都是全局抽象方法
(3)无构造方法
异常是指在程序的运行过程中所发生的不正常的事件,它会中断正在运行的程序
Java的异常处理是通过5个关键字来实现的:try、catch、finally、throw、throws
第一种情况 :正常public void method(){try {// 代码段(此处不会产生异常)} catch (异常类型 ex) {// 对异常进行处理的代码段}// 代码段}
第二种情况:出现异常public void method(){try {// 代码段 1// 产生异常的代码段 2// 代码段 3} catch (异常类型 ex) {// 对异常进行处理的代码段4}// 代码段5}异常是一种特殊的对象,类型为java.lang.Exception或其子类异常处理过程:try代码块————————>发生异常后产生异常对象————————>异常类型匹配———————>(进入)catch代码块——————>程序继续执行
第三种情况:异常类型不匹配public void method(){try {// 代码段 1// 产生异常的代码段 2// 代码段 3} catch (异常类型 ex) {// 对异常进行处理的代码段4}// 代码段5}异常处理过程:try代码块————————>发生异常后产生异常对象————————>异常类型匹配———————>程序中断运行(不进入catch代码块)
| 方法 | 说明 |
|---|---|
| void printStackTrace() | 输出异常的堆栈信息 |
| String getMessage() | 返回异常信息描述字符串,是printStackTrace()输出信息的一部分 |
| Exception | 异常层次结构的父类 |
| ArithmeticException | 算术错误情形,如以零作除数 |
| ArrayIndexOutOfBoundsException | 数组下标越界 |
| NullPointerException | 尝试访问 null 对象成员 |
| ClassNotFoundException | 不能加载所需的类 |
| IllegalArgumentException | 方法接收到非法参数 |
| ClassCastException | 对象强制类型转换出错 |
| NumberFormatException | 数字格式转换异常,如把"abc"转换成数字 |
在try-catch块后加入finally块
1. 无论是否发生异常都执行
2. 不执行的唯一情况:catch代码块中存在System.exit(1)
3. 通常用于释放资源
//存在return的try-catch-finally块public void method(){try {// 代码段 1// 产生异常的代码段 2} catch (异常类型 ex) {// 对异常进行处理的代码段3return;}finally{// 代码段 4}}异常处理过程:try代码块————————>发生异常后产生异常对象————————>异常类型匹配———————>进入catch代码块————————>进入并执行finally块————————>返回catch代码块————————>执行return退出方法
引发多种类型的异常:
1. 排列catch 语句的顺序:先子类后父类
2. 发生异常时按顺序逐个匹配
3. 只执行第一个与异常类型匹配的catch语句
try-catch-finally结构中try语句块是必须的,catch、finally语句块均可选,但两者至少出现之一
| throw | throws |
|---|---|
| 生成并抛出异常 | 声明方法内抛出了异常 |
| 位于方法体内部,可作为单独语句使用 | 必须跟在方法参数列表后面,不能单独使用 |
| 抛出一个异常对象,且只能是一个 | 声明抛出异常类型,可以跟多个异常 |
public void method(){try {// 代码段} catch (Exception e) {e.printStrackTrace();//输出异常throw new Exception("这是一个自定义的异常");}}
过程:
定义异常类————————>编写构造方法,继承父类的实现————————>实例化自定义异常对象————————>使用throw抛出
1. 异常处理与性能
2. 异常只能用于非正常情况
3. 不要将过于庞大的代码块放在try中
4. 在catch中指定具体的异常类型
5. 需要对捕获的异常做处理
1. 异常分为Checked异常和运行时异常
1.1 Checked异常必须捕获或者声明抛出
1.2 运行时异常不要求必须捕获或者声明抛出
2. try-catch-finally中存在return语句的执行顺序
3. finally块中语句不执行的情况
4. throw和throws关键字的区别
墨盒:彩色、黑白
纸张类型:A4、B5
墨盒和纸张都不是打印机厂商提供的
打印机厂商要兼容市场上的墨盒、纸张
分析:
纸 -----接口 抽象方法 [输出纸张大小]
A4纸 实现纸 输出A4
B5纸 实现纸 输出B5
墨盒 ----接口(抽象) 抽象方法 [输出墨盒颜色]
黑白墨盒 实现墨盒 输出黑白
彩色墨盒 实现墨盒 输出彩色
打印机
纸接口 a ;
墨盒接口 b ;
打印方法
package com.hz.printer_interface;/** 纸张*/public interface Paper {public abstract String paperSize () throws Exception;}
package com.hz.printer_interface;/** 墨盒*/public interface InkBox {public abstract String boxColor() throws Exception;}
package com.hz.printer_interface;/** A4纸*/public class A4paper implements Paper {@Overridepublic String paperSize() throws Exception{return("A4纸");}}
package com.hz.printer_interface;/** B5纸*/public class B5paper implements Paper {@Overridepublic String paperSize() throws Exception{return ("B5纸");}}
package com.hz.printer_interface;/** 彩色墨盒*/public class coloursBox implements InkBox {@Overridepublic String boxColor() throws Exception{return ("彩色墨盒");}}
package com.hz.printer_interface;/** 黑白墨盒*/public class bwBox implements InkBox {@Overridepublic String boxColor() throws Exception{return ("黑白墨盒");}}
package com.hz.printer_interface;/** 打印机*/public class printer {private Paper paper;private InkBox inkbox;public Paper getPaper() {return paper;}public void setPaper(Paper paper) {this.paper = paper;}public InkBox getInkbox() {return inkbox;}public void setInkbox(InkBox inkbox) {this.inkbox = inkbox;}/** 定义一个show()方法用于输出结果* 定义当前类的对象调用接口的方法,用于传结果*/public void show() throws Exception{System.out.println("使用"+this.inkbox.boxColor()+"墨盒在"+this.paper.paperSize()+"纸张上打印");}}
package com.hz.printer_interface;public class print_test {public static void main(String[] args) throws Exception{try {printer pr = new printer();/** 使用彩色墨盒墨盒在A4纸纸张上打印* 用接口new实现(类)*/Paper p = new A4paper();InkBox i = new coloursBox();pr.setInkbox(i);pr.setPaper(p);pr.show();//调用show方法输出/** 使用黑白墨盒墨盒在B5纸纸张上打印*/Paper p1 = new B5paper();InkBox i1 = new bwBox();pr.setInkbox(i1);pr.setPaper(p1);pr.show();} catch (Exception e) {e.printStackTrace();//输出异常}}}