抽象类:实现一个更严谨的多态
abstract:抽象的
(方法)想法:暂时无法实现,抽象的
abstract 自定义类型{//图纸,模型
属性
方法----->抽象
}
public abstract class Phone{//手机设计师已经想要在手机中添加拍照功能
public void call(){}
public void sendMsg(){}
public abstract void takePhoto();//功能没有实现,代表存在缺陷。
}
采用抽象类实现多态的步骤:
1. 将父类的多态方法改为抽象方法(abstract:抽象方法不能有大括号方法体)
2. 将父类改为抽象类(abstract)
**
抽象类不能实例化
接口:
interface:一组功能的规范
**
1.接口中所有的方法都是抽象方法,默认使用public abstract修饰
2.所有的属性都是常量,默认使用public static final修饰
3.接口不能实例化,接口中没有构造方法
比较
抽象类: 可以有构造方法,可以存着非抽象方法,只能被单继承,is a的关系
接口:没有构造方法,不能有非抽象方法,一个类可以实现多个接口,has a的关系
单例模式
单一实例
为了保证只有一个对象(调用构造方法调用出来),也就是不能轻易让别人直接访问我的构造方法,
那么就可以使用private关键字修饰构造方法,就会导致一个对象都出来,提供一个public类型get方法访问构造方法创建出对象(此时通过get创建出多个对象出来),
问题来了?通过调用get可以获得类的对象,但是此时前提是对象.get,name对象从哪里来?
我们可以吧这个get方法变成static,能通过类名.get
现在,我们需要处理的是调用get,怎么保证只创建一个对象呢?
//方式一:饿汉式
private static Student stu = new Student();
private Student(){
}
private static Student getStu(){
return stu;
}
//方式二:懒汉式
private static Student stu = null;
private Student(){
}
private static Student getStu(){
if(stu==null){
stu = new Student();
}
return stu;
}
异常
java的异常处理室通过5个关键字来实现的:try,catch,finally,throw,throws
捕获异常:
try{执行可能产生异常的代码
}catch{捕获异常
}finally{无论代码是否发生异常,代码总能执行
}
声明异常:
throws:声明方法可能要抛出的各种异常
抛出异常:
throw:手动抛出异常
处理异常的两种方式:
-
1.try_catch_finally处理
-
2.异常的抛出,一般是声明方法时提出 throws 异常类型1,异常类型2
-
Exception:异常类的父类
-
可以使用的组合:try—catch/try_finally/try_catch_catch
public static void main(String[] args) { try{//对可能发生异常的代码块进行监控 int[]arr = new int[5]; System.out.println(arr[5]); }catch(Exception e){//e就是发生异常时所产生的异常对象 //对发生的异常进行捕获 e.printStackTrace();//默认打印异常的堆栈信息 }finally{//程序try语句中代码无论是否发生异常,都会执行 //一般用于资源的关闭 System.out.println("这里是finally语句块"); } //程序后续的核心操作 System.out.println("核心操作..."); System.out.println("程序结束"); }
-
排列catch语句的顺序:先子类后父类
-
发生异常时按顺序逐个匹配
-
只会执行第一个与异常类型匹配的catch语句
手动抛出异常:
throw new Exception();//括号里写发生了什么异常
log4j记录日志:
- log4j是一个非常优秀的开源日志记录工具
- 控制日志的输出级别
- 控制日志信息输送的目的地是控制台,文件等
- 控制每一条日志的输出格式
使用log4j进行异常信息的记录
使用步骤:
- 1.将log4j.xxx.jar先复制到工程某个目录下,然后通过budi path将此jar文件引入到工程的路径下
- 2.将写好的log4j.propertices配置文件放到工程的src目录下
- 3.在java类中创建log对象,调用方法进行日志信息的打印
public static Logger log = Logger.getLogger("TestException");
public static void main(String[] args) {
try{
log.info("这是一个普通的日志信息");
int[]arr = new int[5];
System.out.println(arr[5]);
}catch (Exception e){
log.error("此处出现异常");
e.printStackTrace();
}
}