一 抽象类
使用abstract修饰符就变成了抽象类和抽象方法
-
抽象方法只有方法声明,没有方法体.
-
继承抽象类的子类,都要必须实现抽象类的抽象方法,除非子类也是抽象类.
-
抽象方法声明一";"结尾.
-
构造方法 静态成员方法不能被声明为抽象方法
Java的类是单继承的,但是接口可以是多继承的
抽象类特点:
-
不能new这个抽象类,只能靠子类去实现它:抽象类起到约束(框架作用)!!!
-
抽象类可以写普通方法,但是抽象方法必须在抽象类中.
抽象方法的作用 不仅使子类具有相同的行为能力,还能实现运行时多态:“一直声名,多种实现”.
二 接口(重点)
关键词 : interface
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pK2scIdP-1626442433132)(C:\Users\77647\AppData\Roaming\Typora\typora-user-images\image-20210716063331744.png)]
2.1 接口
package com.oop2;
public interface Calchulator {//关键词 : interface
public abstract void add(int x);//抽象方法,默认修饰符为public abstract
void pow(int y);
void multiple(int x,int y);
}
2.2 实现类
Package com.oop2;
public class Calimp implements Calchulator{//类Calimp 实现 Calchulator接口
@Override
public void add(int x) {//与之前学的抽象类类似,需要实现接口定义的抽象方法
}
@Override
public void pow(int y) {
}
@Override
public void multiple(int x, int y) {
}
}
2.3 接口与抽象类
相同点:
都起到约束作用
不同点:
- 接口约束它的实现类,而抽象类约束它的子类
- 子类只能继承一个父类,所以一个子类只能被一个抽象类约束.
- 而实现类可以实现多个接口,这是相比于抽象类的优势.
2.4 总结
- 接口起到约束作用
- 定义一些方法,让不同的人实现
- 接口中的方法默认修饰符为 public abstract
- 接口中成员变量必须为常量,且必须赋值,默认修饰符为 public static final,不能声明为实列成员变量
- 接口不能被实列化,因为接口不是类,它是没有构造方法的
- implements 实现多个接口
- 实现类必须实现接口中的方法
三 内部类
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kXm5RBfc-1626442433138)(C:\Users\77647\AppData\Roaming\Typora\typora-user-images\image-20210716103759372.png)]
四 内部类
内部类分为 : 成员内部类 静态内部类 局部内部类 匿名内部类
4.1 成员变量类
两个类套娃
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yTfVfFa9-1626442433140)(C:\Users\77647\AppData\Roaming\Typora\typora-user-images\image-20210716133610354.png)]
4.2 静态内部类
里面的类加static修饰
4.3 局部内部类
在方法中定义的类,类似于局部变量(在方法中定义的量)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bj1ZGyym-1626442433143)(C:\Users\77647\AppData\Roaming\Typora\typora-user-images\image-20210716134332583.png)]
4.4 匿名内部类
五 异常机制
4.1 try-catch-finally
Exception : 异常
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jXoEIwSz-1626442433144)(C:\Users\77647\AppData\Roaming\Typora\typora-user-images\image-20210716105635243.png)]
错误Error比Exception要严重得多
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QQb9Wxew-1626442433145)(C:\Users\77647\AppData\Roaming\Typora\typora-user-images\image-20210716110557171.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dypq1Rh9-1626442433146)(C:\Users\77647\AppData\Roaming\Typora\typora-user-images\image-20210716110615667.png)]
package com.oop2;
public class Main {
public static void main(String[] args) {
int a=10;
int b=0;
try{
System.out.println(a/b);//存在潜在异常的语句
}
catch(ArithmeticException e){//(异常类 异常对象),异常类填Throwable也可以
System.out.println("出现异常,程序b不能为0");//捕获异常对象并要进行的操作
}
finally{
System.out.println("程序结束!");//无论是否抛出异常,是否捕获到异常,最后都要执行的语句;当然,可以没有finally
}
}
}
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Hg6E3TxM-1626442433147)(C:\Users\77647\AppData\Roaming\Typora\typora-user-images\image-20210716120445404.png)]
选中可能出现异常的语句,按 ctrl+alt+t 自动生成 try-catch-finally 语句
package com.oop2;
public class Main {
public static void main(String[] args) {
int a=10;
int b=0;
try {//使用ctrl+alt+t自动生成的捕获异常的语句
System.out.println(a/b);
} catch (Exception e) {
e.printStackTrace();//打印栈信息
} finally {
}
}}
java.lang.ArithmeticException: / by zero//结果
at com.oop2.Main.main(Main.java:8)
假设要捕获多个异常,需要用到多个catch语句.每个catch语句从小到大排序.
throw 主动抛出异常一般用在方法里
package com.oop2;
public class Abs {
public void set(int month){
if(month>12){
throw new ArithmeticException("月份错误");
}
}}
//结 果
Exception in thread "main" java.lang.ArithmeticException: 月份错误
at com.oop2.Abs.set(Abs.java:6)
at com.oop2.Main.main(Main.java:5)
方法抛出异常,并且无法解决时,需要用 throws 声明
package com.oop2;
public class Abs {
public void set(int month)throws ArithmeticException{//该方法无法解决这个异常,将抛出
if(month>12){
throw new ArithmeticException("月份错误");
}
}}
//结 果
Exception in thread "main" java.lang.ArithmeticException: 月份错误
at com.oop2.Abs.set(Abs.java:6)
at com.oop2.Main.main(Main.java:5)
六 包机制
命令行生成javadoc文档 : javadoc -encoding UTF-8 -charset UTF-8 HelloWordl.java
- @auther : 作者
- @Version : 当前代码更新到第几版
- @Since : 当前代码可以运行的最早java版本
- @Param : 代码中的参数
- @return : 返回的值
- @throws : 抛出的一些异常
命令行传参 : java HelloWorld hello fenggang upup