Java基础知识扫盲
# 类型判断
# 获取类型
Object map = unifyDTO.getBody();
System.out.println(map.getClass().getName());
# 判断类型
Object body = testDto.getBody();
body instanceof String
1
2
3
4
5
6
7
2
3
4
5
6
7
# 注解
# 规范
public @interface Autowired
ElementType: 注解作用域
RetentionPolicy: 异常时机(它指定了注解在源代码、编译时和运行时的保留级别)
1. RetentionPolicy.SOURCE:源代码级别保留策略。注解仅在源代码中可见,不会被编译进字节码文件,也不会在运行时被保留。该保留策略通常用于提供编译时的辅助信息,对运行时没有任何影响。
2. RetentionPolicy.CLASS:字节码级别保留策略。注解在编译时会被保留在字节码文件中,但在运行时不可见。这是默认的保留策略,如果注解未显式指定保留策略,则默认为 CLASS。
3. RetentionPolicy.RUNTIME:运行时保留策略。注解在编译时会被保留在字节码文件中,并在运行时可以通过反射机制获取和解析注解。这种保留策略允许在运行时动态地读取和使用注解信息。
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
# 抽象类
- 抽象类不能被实例化,只能承接
- 如果有默认的实现和共享的方法或者状态时应该使用抽象类做基类
- 抽象类可以包含具体的方案实现,从而减少子类的代码实现
- 定义抽象方法强制子类实现特定的功能
# 接口
1. 一个类可以实现多个接口,但只能继承一个抽象类
1
- 使用不同的小接口(而不是汇总成一个大的接口),实现多继承
// 定义接口A
interface A {
void methodA();
}
// 定义接口B
interface B {
void methodB();
}
// 实现类实现接口A和接口B
class MyClass implements A, B {
@Override
public void methodA() {
System.out.println("Implementing methodA()");
}
@Override
public void methodB() {
System.out.println("Implementing methodB()");
}
}
public class InterfaceDemo {
public static void main(String[] args) {
MyClass myClass = new MyClass();
myClass.methodA();
myClass.methodB();
}
}
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
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
- 当需要定义一组公共的方法和行为规范,而不关心具体的实现细节时,可以使用接口。接口定义了一种契约,要求实现类提供指定的方法和功能
// 定义接口 Animal
// 抽象工厂产品族的理解
interface Animal {
void eat();
void sleep();
}
// 实现类实现 Animal 接口
class Cat implements Animal {
@Override
public void eat() {
System.out.println("Cat is eating.");
}
@Override
public void sleep() {
System.out.println("Cat is sleeping.");
}
}
class Dog implements Animal {
@Override
public void eat() {
System.out.println("Dog is eating.");
}
@Override
public void sleep() {
System.out.println("Dog is sleeping.");
}
}
public class InterfaceDemo {
public static void main(String[] args) {
Animal cat = new Cat();
cat.eat();
cat.sleep();
Animal dog = new Dog();
dog.eat();
dog.sleep();
}
}
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
35
36
37
38
39
40
41
42
43
44
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
35
36
37
38
39
40
41
42
43
44
- 接口继承
//
// 定义父接口
interface Animal {
void eat();
}
// 定义子接口,并继承父接口
interface Dog extends Animal {
void bark();
}
// 实现子接口
class Labrador implements Dog {
@Override
public void eat() {
System.out.println("Labrador is eating.");
}
@Override
public void bark() {
System.out.println("Labrador is barking.");
}
}
// 测试类
public class Main {
public static void main(String[] args) {
Labrador labrador = new Labrador();
labrador.eat(); // 调用继承自父接口的方法
labrador.bark(); // 调用子接口新增的方法
}
}
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
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
上次更新: 2023-07-23 19:24:26