文章目录
1.引入
- 为什么使用接口
- 要求实现防盗门的功能
- 门有开和关的功能,锁有上锁和开锁的功能
- 将门定义为抽象类,锁定义为接口
- 防盗门继承门,实现锁的接口
**********************门***********************
package Interface;
public abstract class Men {
public abstract void open();//开
public abstract void close();//关
}
**********************锁***********************
package Interface;
public interface Suo {//接口
//接口中的方法不加特殊修饰符时都是抽象方法
// public abstract void shangsuo();//上锁
// public abstract void kaisuo() ;//开锁
void shangsuo();
void kaisuo() ;
//在接口里可以定义的内容,调用时都会变为静态常量
//变量就是静态常量
public static final String NAME_STRING="嘿嘿";
public static int age = 1;
public final int SCORE = 100;
public static void show() {
}
// public void show() {//报错,普通方法不可以写
//
// }
default void show1() {
//jdk1.8以后支持静态方法,及default修饰的普通方法
System.out.println("我是接口中的default修饰的方法方法");
}
public static void test() {
System.out.println("我是接口中的静态方法");
}
// default void test() {//必须加default
// System.out.println("jdk1.8以后接口支持默认修饰符实现方法");
// }
// public Suo() {
//报错
// //接口没有构造方法
// }
}
**********************防盗门***********************
package Interface;
public class Fdm extends Men implements Suo{//实现
@Override
public void open() {
}
@Override
public void close() {
}
@Override
public void shangsuo() {
// TODO Auto-generated method stub
}
@Override
public void kaisuo() {
// TODO Auto-generated method stub
}
}
**********************测试***********************
package Interface;
public class Test {
public static void main(String[] args) {
Suo.test();
Fdm fdm = new Fdm();
fdm.show1();
// Suo suo = new Suo();//报错//接口不能实例化
}
}
- 特点:
- interface
- 接口中的方法默认为抽象方法
- 接口不能实例化,没有构造方法
- 子类实现父类接口,子类必须重写所有抽象方法,除非子类是抽象方法
- 实现类必须实现接口的所有方法,除非这个类是抽象类
- 接口中的变量都是静态常量
- 类只能单根继承类,可以同时实现(implements)多个接口
- 接口可以同时继承多个接口
- jdk1.8以后支持default修饰的实现方法 静态方法
- 默认方法可以重写
- 接口的方法允许抽象方法 静态方法 默认方法 私有方法
**********************红外线***********************
package Interface;
public interface HonhWaiXian {
public void jiance();
}
**********************扫描仪***********************
package Interface;
public interface SaoMIaoYi {
public void saomiao();
}
**********************继承多个接口TT***********************
package Interface;
//接口可以同时继承多个接口,但是不能实现
public interface TT extends HonhWaiXian,SaoMIaoYi {
//public interface TT extends HonhWaiXian,SaoMIaoYi implements Suo {//报错
public void xuexi();
}
**********************类实现多个接口MyTT***********************
package Interface;
//类只能单根继承类,可以同时实现多个接口
//接口可以同时继承多个接口
public class MyTT implements TT,Suo {
@Override
public void jiance() {
}
@Override
public void saomiao() {
}
@Override
public void shangsuo() {
}
@Override
public void kaisuo() {
}
@Override
public void xuexi() {
}
}
- 如何使用接口
- 用程序实现USB接口
- 使用java接口实现
- 编写USB接口–>根据需求设计方法
- 实现USB接口–>实现所有方法
- 使用USB接口–>用多态的方式使用
2.异常
- 异常是指在程序的运行过程中所发生的不正常的事件,它会中断正在运行的程序
- 什么是异常处理
- java编程语言使用异常处理机制为程序提供了错误处理的能力
- java中如何进行异常处理:
- 捕获异常
- try:执行可能产生异常的代码
- catch:捕获异常
- finally:无论是否发生异常,代码总能执行
- 声明异常
-声明方法可能要抛出的各种异常 - 抛出异常
- 手动抛出异常
- 捕获异常
- 异常处理方法:
- 捕获异常
- 方法一:try-catch
格式:
(1.正常情况下)
public void method(){
try{
//代码段(此处不会产生异常)
}catch(异常类型ex){
//对异常进行处理的代码段
}
//代码段
}
package YiChang;
public class Student {
private int age;
public int getAge() {
return age;
}
// //自定义异常
public void setAge(int age) {
if(age < 0) {
//抛出异常时 抛出是运行是异常,可以不声明异常
//抛出非运行时异常,就必须声明
throw new MyException("年龄为复数");
}
this.age = age;
}
public void yc(int a, int b) {
try {
int c = a /b;//未出现异常,正常执行代码段
System.out.println("c:"+c);
} catch (Exception e) {//出现异常后执行代码段
System.out.println("出现了异常");
e.printStackTrace();
}
----------------------------------------------------------test----------------------
package YiChang;
public class YcTest {
public static void main(String[] args) {
Student student = new Student();
student.yc(10,0);
}
}
-----------------------------------------------------
异常是一种特殊的对象,类型为java.lang.Exception或其子类
(2.出现异常)
public void method(){
try{
//代码段(此处不会产生异常)
//产生异常的代码段
//代码段
}catch(异常类型ex){
//对异常进行处理的代码段
}
//代码段
}
工作原理:try--发生异常--->产生异常对象------>异常类型匹配---进入catch块-->catch
-----------------------------------------------------------------------
(3.异常类型不匹配)
catch()里面的内容
- 异常对象使用的方法
方法名 | 说明 |
---|---|
void printStatckTrace() | 输出异常的堆栈信息 |
String getMessage() | 返回异常信息描述字符串,是printStatckTrace()输出信息的一部分 |
try {
int c = a /b;//未出现异常,正常执行代码段
System.out.println("c:"+c);
} catch (Exception e) {//出现异常后执行代码段
System.out.println("出现了异常"+e.getMessage());
e.printStackTrace();
}
- 常见的异常类型
-
- 方法二:try-catch-finally
格式:
public void method(){
try{
//代码段(此处不会产生异常)
}catch(异常类型ex){
//对异常进行处理的代码段
}finally{
//代码段
}
//代码段
}
不执行finally的唯一情况:System.exit(1)
工作原理:try--发生异常--->产生异常对象------>异常类型匹配---进入catch块-->catch return--执行finally块--->finally--执行return退出方法----->catch return
--------------------------------------------------------------
public void yc(int a, int b) {
try {
int c = a /b;//未出现异常,正常执行代码段
System.out.println("c:"+c);
} catch (Exception e) {//出现异常后执行代码段
System.out.println("出现了异常"+e.getMessage());
e.printStackTrace();
System.exit(1);//不执行的唯一情况,结束程序,finally执行
return;//结束方法 finally还是会执行
}finally {
System.out.println("我是最终代码块片段");//不管是否异常都执行
}
- 多重catch块
- 引发多种类型的异常
- 排列catch语句的顺序:先子类在父类(Exception在最后)
- 发生异常时按顺序逐个匹配
- 只执行第一个与异常类型匹配的catch语句
- 引发多种类型的异常
- 可以出现多个catch(Exception在最后)
-每次只能进入一个
catch (InputMismatchException e) {
System.out.println("异常处理代码段-正处理输入异常");
}catch (ArithmeticException e) {
System.out.println("异常处理代码段-正处理算数异常");
}catch (Exception e) {
System.out.println("异常处理代码段-非上述异常");
}
-
- 声明异常
- 调用有异常声明的方法:要么try-catch 要么继承往外面声明
- 声明异常
package YiChang;
public class YcTest {
public static void main(String[] args) throws Exception {
Student student = new Student();
-
- 抛出异常 throw
- 抛出运行时异常,可以不声明异常
- 抛出非运行时异常,就必须声明
- 抛出异常 throw
public void setAge(int age) {
if(age < 0) {
//抛出异常时 抛出是运行是异常,可以不声明异常
throw new RuntimeException("年龄为复数");
}
this.age = age;
}
----------------------------------------------------------
public void setAge(int age) throws Exception {
if(age < 0) {
//抛出非运行时异常,就必须声明
throw new Exception("年龄为复数");
}
this.age = age;
}
异常的分类:
可以自定义异常:要么继承Exception要么继承RuntimeException(多用这个)
package YiChang;
public class MyException extends RuntimeException {
}
-
- 重写异常操作:
- 写个构造方法:生成父类的构造方法,让子类来用
- 重写一个getMmessage()方法,用来添加自己的描述
- 可以添加属性
package YiChang;
public class MyException extends RuntimeException {
//重写异常操作
//写个构造方法:生成父类的构造方法,让子类来用
//重写一个getMmessage()方法,用来添加自己的描述
//可以添加属性
private String method = "请查找设置方法是否数据出现问题";
public MyException() {
super();
// TODO Auto-generated constructor stub
}
public MyException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
super(message, cause, enableSuppression, writableStackTrace);
// TODO Auto-generated constructor stub
}
public MyException(String message, Throwable cause) {
super(message, cause);
// TODO Auto-generated constructor stub
}
public MyException(String message) {
super(message);
// TODO Auto-generated constructor stub
}
public MyException(Throwable cause) {
super(cause);
// TODO Auto-generated constructor stub
}
@Override
public String getMessage() {
//按照自己的要求来书写
return super.getMessage()+method;
}
}
-------------------------------------------------------------
package YiChang;
public class Student {
private int age;
public int getAge() {
return age;
}
// //自定义异常
public void setAge(int age) {
if(age < 0) {
//抛出异常时 抛出是运行是异常,可以不声明异常
//抛出非运行时异常,就必须声明
throw new MyException("年龄为复数");
}
this.age = age;
}
-------------------------------------------------------------
package YiChang;
public class YcTest {
public static void main(String[] args) throws Exception {
Student student = new Student();
// student.yc(10,0);
// student.yc2();
student.setAge(-110);
}
}
//
3.log4j日志工具
- log4j在eclipse中配置
- 项目下新建-Floder-命名(Lib)
- 将jar包放到Lib里面
- 右键选中jar包—Build Path—Add to Build Path—生成了一个Referenced Libraries(里面包含一个jar包)
- 配置日志信息
- 在src中复制一个log4j.properties文件(.properties属性配置文件)
- 输出日志