Java编程关键知识点深度解析
立即解锁
发布时间: 2025-08-18 02:31:37 阅读量: 6 订阅数: 20 


Java编程入门与进阶指南
### Java 编程关键知识点深度解析
#### 1. 注解相关知识
- **标记注解**:标记注解是不接受参数的注解。
- **注解的应用范围**:注解并非只能应用于方法,任何类型的声明都可以有注解。从 JDK 8 开始,类型使用也可以有注解。
#### 2. 泛型
泛型在 Java 中非常重要,它能创建出具有以下特性的代码:
- **类型安全**:确保在编译时就能发现类型相关的错误。
- **可重用**:提高代码的复用性,减少重复编写。
- **可靠**:增强代码的稳定性。
下面是一些泛型相关的关键问题及解答:
|问题|解答|
| ---- | ---- |
|能否使用基本类型作为类型参数?|不能,类型参数必须是对象类型。|
|如何声明一个名为 FlightSched 的类,它接受两个泛型参数?|代码示例:`class FlightSched<T, U> { }`|
|将 FlightSched 的第二个类型参数修改为必须扩展 Thread 类型。|代码示例:`class FlightSched<T, U extends Thread> { }`|
|将 FlightSched 修改为其第二个类型参数必须是第一个类型参数的子类。|代码示例:`class FlightSched<T, U extends T> { }`|
|泛型中的 `?` 是什么,有什么作用?|`?` 是通配符参数,它可以匹配任何有效类型。|
|通配符参数能否有边界?|可以,通配符可以有上界或下界。|
|声明一个名为 MyGen() 的泛型方法,它有一个类型参数,有一个该类型参数类型的参数,并返回该类型参数的对象。|代码示例:`class MyGen<T> { T MyGen(T param) { return param; } }`|
|给定一个泛型接口,展示如何声明一个名为 MyClass 的类来实现该接口。|假设接口为 `interface IGenIF<T> { T method(); }`,则实现类为 `class MyClass<T> implements IGenIF<T> { @Override public T method() { return null; } }`|
|如何创建一个泛型类 Counter<T> 的原始类型对象?|直接使用类名,不指定类型,如 `Counter counter = new Counter();`|
|类型参数在运行时是否存在?|不存在。所有类型参数在编译时都会被擦除,并替换为适当的类型转换,这个过程称为类型擦除。|
|将之前的解决方案转换为泛型,并创建一个名为 IGenStack 的栈接口,泛型定义 push() 和 pop() 操作。|代码示例:`interface IGenStack<T> { void push(T item); T pop(); }`|
|`< >` 是什么?|是钻石操作符。|
|如何简化代码?|可以使用钻石操作符进行简化。从 JDK 10 开始,对于局部变量声明,还可以使用局部变量类型推断进行简化。|
以下是泛型使用的流程图:
```mermaid
graph TD
A[开始] --> B[定义泛型类或方法]
B --> C{使用类型参数}
C -- 是 --> D[进行类型操作]
D --> E[编译时类型擦除]
E --> F[运行时类型转换]
F --> G[结束]
C -- 否 --> G
```
#### 3. Lambda 表达式和方法引用
- **Lambda 操作符**:Lambda 操作符是 `->`。
- **函数式接口**:函数式接口是只包含一个抽象方法的接口。
- **函数式接口和 Lambda 表达式的关系**:Lambda 表达式为函数式接口中定义的抽象方法提供实现,函数式接口定义了目标类型。
- **Lambda 表达式的两种类型**:
- **表达式 Lambda**:指定单个表达式,其值由 Lambda 表达式返回。
- **块 Lambda**:包含一段代码,其值由 return 语句指定。
以下是一些 Lambda 表达式和方法引用相关的示例:
- 展示一个 Lambda 表达式,当一个数字在 10 到 20 之间(包含 10 和 20)时返回 true。
```java
MyTest test = (num) -> num >= 10 && num <= 20;
```
- 创建一个可以支持上述 Lambda 表达式的函数式接口,名为 MyTest,其抽象方法为 testing()。
```java
@FunctionalInterface
interface MyTest {
boolean testing(int num);
}
```
- 创建一个块 Lambda 来计算一个整数值的阶乘,并使用 NumericFunc 作为函数式接口进行演示。
```jav
```
0
0
复制全文
相关推荐








