第五章.java接口

发布于:2025-03-24 ⋅ 阅读:(21) ⋅ 点赞:(0)

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
      • 抛出运行时异常,可以不声明异常
      • 抛出非运行时异常,就必须声明
	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属性配置文件)
  • 输出日志
    在这里插入图片描述

网站公告

今日签到

点亮在社区的每一天
去签到