java进阶
接口与抽象类辨析
接口
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| interface Animal { void makeSound(); void sleep(); }
class Dog implements Animal { @Override public void makeSound() { System.out.println("Bark"); }
@Override public void sleep() { System.out.println("Sleeping..."); } }
|
抽象类
1 2 3 4 5 6 7 8 9 10 11 12 13
| abstract class Animal { abstract void makeSound(); void sleep() { System.out.println("Sleeping..."); } }
class Dog extends Animal { @Override void makeSound() { System.out.println("Bark"); } }
|
抽象类:
可以包含属性、非抽象方法和抽象方法。
抽象类中的方法可以有具体实现。
可以为部分方法提供默认实现,子类可以选择继承或重写。
只支持单继承。 //一个类不能直接继承多个抽象类
接口:
通常只包含抽象方法(在 Java8 之后可以有默认方法和静态方法)。
所有方法都必须由实现类来具体实现。
可以多实现。 //接口可以被多个类实现
更侧重于定义行为规范。
二、内部类
成员内部类
定义在类内部,作为一个成员变量。
1 2 3 4 5
| public class OuterClass { class InnerClass { } }
|
静态内部类,使用static修饰
1 2 3 4 5
| public class OuterClass { static class StaticInnerClass { } }
|
局部内部类
1 2 3 4 5 6 7
| public class OuterClass { void someMethod() { class LocalInnerClass { } } }
|
匿名内部类
1 2 3 4 5 6 7 8 9 10 11
| public class OuterClass { void someMethod() { Runnable r = new Runnable() { @Override public void run() { System.out.println("匿名内部类"); } }; r.run(); } }
|
三、枚举
1.enum枚举是java中一中特殊的类,表示一组固定的常量值。这些常量通常是相关联的,并且其集合是有限的。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| package Enum;
public enum Enum_demo1 { WEIFUKUAN("未付款"), YIFAHUO("已发货"), WEIFAHUO("未发货");
private String name; Enum_demo1() {
} private Enum_demo1(String name) { this.name = name; } }
|
2.枚举成员
每一个枚举成员都有一个与之相关联的字符串值,这些值通过构造函数传给每一个成员。
3.当你定义一个枚举成员时,如 WEIFUKUAN(“未付款”),Java 会调用构造函数 Enum_demo1(String name),并将 “未付款” 赋值给枚举成员 WEIFUKUAN 的 name 属性。
这种方式允许每个枚举成员与一个具体的值(如字符串)相关联,便于在程序中根据具体场景使用这些枚举成员来表示对应的状态或信息。
4.获取name属性值
1 2
| Enum_demo1 status = Enum_demo1.WEIFUKUAN; System.out.println(status.getName());
|
四、泛型
五、多态
六、异常
自定义异常
自定义一个类继承Error(编译时异常)或者Exception(运行时异常)
demo1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| package Exception;
public class IllegalNameException extends Exception{ public IllegalNameException(){
}
public IllegalNameException(String message){ super(message); } }
|
异常声明方式
throws抛出多个异常;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| package Exception; import java.util.Scanner; public class Exception1 { public static void main(String[] args) throws IllegalNameException, IllegalAgeException { Scanner i = new Scanner(System.in); System.out.println("提供一个注册服务"); String name=i.next(); int age=i.nextInt(); UserService us=new UserService(); us.register(name,age); } }
class UserService { public void register(String username, int age) throws IllegalAgeException, IllegalNameException { UserDao userDao = new UserDao(); System.out.println("注册服务开启"); userDao.save(username,age);
} }
class UserDao { public void save(String name,int age) throws IllegalAgeException ,IllegalNameException{ System.out.println("用户"+name+"信息正在保存"); if(name.length()<6||name.length()>12){ throw new IllegalNameException(); } if(age<18){ throw new IllegalAgeException(); } System.out.println("用户"+name+"xinxi"); } }
|
try catch捕捉异常
七、I/O操作