JDK1.5特性—— 泛型 自动装箱拆箱 增强for循环 不定参数 枚举 反射 注解

本文深入探讨Java泛型的特性和规则,解析反射机制如何实现类和对象的动态操作,以及注解如何增强代码的元信息。涵盖泛型的使用、反射的获取方式和应用,及注解的定义与使用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

泛型

不定参数:语法糖

枚举

反射:低耦合,高内聚

注解

JDK1.5 自动装箱  自动拆箱  


泛型

1. 泛型是JDK1.5之后的特性。泛型限定了集合中的数据类型,保证了程序的安全性
    泛型在JDK1.7之后,new后面的泛型可以省略成一个<>:ArrayList<String> list = new ArrayList<>();
2. 泛型的规则: <大写字母A>   A:代表传入的实际数据类型

  1. T:  Type
  2. E: Element
  3. K: key
  4. V: value

3. 在类中使用泛型: 在类名后加上<大写字母>。如果类中有多个泛型,需要使用,隔开 <T,K> 。 eg:public class Demo03 <T,K>

4. 接口使用泛型分为两种情况

  1. 接口中是声明泛型,实现类也声明泛型,那么需要在实现类后面<T>,并且在实现类的接口后面加<T>
  2. 接口的实现类泛型确定

5. 方法中的泛型:在方法的返回值前添加<大写字母>,在参数列表和方法体中就可以使用

6. 上限下限范围:注意:上限下限不能同时存在于一个<>中

  1. <? extends xx类名/接口> 上限:?的范围应该是xx类名/接口的子类或者子接口 eg:ArrayList<? extends Number> list
  2. <? super xx类名/接口> 下限: ?的范围应该是xx类名/接口的父类或者父接口
  3. <? Super String> :代表泛型必须是String类的父类

不定参数:语法糖

可变参数 在参数后面加上...,当有多个参数时,可变参数必须放在最后一位,底层还是使用可变数组,只是让开发人员用的爽,感觉甜蜜-语法糖

枚举

  1. 枚举其实就是一个
  2. 枚举的使用方式:使用关键字enum来修饰 在枚举中添加首字母为大写的枚举名称,如果有多个,使用,隔开即可。枚举的内容必须放在枚举的首行
  3. 枚举如果想使用有参的构造方法,必须提供无参构造方法。 因为枚举的内容,假设是Spring,那么就是 public static final Season Spring = new Season();  Spring(3):就是调用了有参构造
  4. 记住:枚举除了第一行只能写枚举内容,构造方法必须使用private修饰之外,其他的只是一种特殊的类。
     

反射:低耦合,高内聚

1. 反射:在运行状态中的一个类,可以获取这个类的属性和方法,也可以获取对象的属性和方法,而且可以调用对象的属性和方法。这个过程就是java中的反射机制。
2. 要使用反射,首先需要获取到类的字节码文件。获取字节码的三种情况:Class类 就是代表类的类

  1. 通过 类名.class
  2. 通过 对象名.getClass()
  3. 通过 Class.forName(类的全路径);

3. 获取字符串对应的对象
1.根据字符串内容获取对应的字节码:Class.forName
2.根据字节码的getConstructor(构造方法的参数类型)方法获取对应的构造方法:clz.getConstructor(char[].class);getConstructor:只能获取public修饰的构造方法;getDeclaredConstructor:获取所有修饰符修饰的构造方法

3.通过构造方法的值调用.newInstance(实参)来创建对象:c.newInstance(new char[]{'u','z','i'});

4. 反射的劣势
1.破坏了原有面向对象的封装性,无论公有还是私有的内容,都可以获取
2.可以绕过泛型的约束

注解

1. 给计算机使用.注解的顶级父类: Annotation
@override
@SuppressWarnings 压制警告

2. 定义一个注解:
@interface 注解名{
}

3. 注解的体中(花括号里面)只能包含:基本数据类型、Class、String、注解、枚举和包含他们的一维数组

4. 元注解:给注解进行注解
@Target:限定注解的使用范围
@Retention给注解限定级别
@Inherited 限定子类也要遵循注解
@Documented表示注解会生成到文档中
 

JDK1.5 自动装箱  自动拆箱  

1. 包装类:将基本数据类型转换为引用数据类型
装箱(封箱):将基本数据类型转换为引用数据类型
拆箱:将引用数据类型转换为基本数据类型

2. 自动装箱底层调用valueOf方法,Integer in = 10;
Short  Integer  Long  Character 在一定范围内有固定值,超出范围创建新的对象
Float Double 直接创建对象
Byte Boolean 永远是固定值

java分为两大类型:基本数据类型 引用数据类型。基本数据类型仅仅表示数值

包装类:将基本数据类型包装成引用数据类型

引用类型---产生对象,对象可以提供各种各样的方法来操作数据

基本类型---定义变量,变量没有方法或者属性来快速边界的操作

byte

short

int

long

float

double

char

boolean

void

Byte

Short

Integer

Long

Float

Double

Character

Boolean

Void

int和char对应的类型发生了变化,其他的类型都是把首字母大写
*1.自动装箱(封箱):自动将基本数据类型转换为引用数据类型。底层调用的是了对应类身上的valueOf方法---静态方法
面试:底层
Short  Integer  Long  Character的valueOf方法:指定一个 -128 到127的范围,如果在这个范围内,返回一个固定的值,如果超出范围,创建新的对象。
Float,Double 的valueOf方法是:直接创建新的对象
Byte Boolean 永远是固定值。Boolean只有两个值(TRUE  FALSE)
2.自动拆箱:自动将引用数据类型转换为基本数据类型,底层是调用了对应对象身上的***Value方法---成员方法
4.自动封箱/拆箱都是jdk1.5的特性之一
3.包装类的哈希码值是固定的。
System.out.println(in2.hashCode());——10
System.out.println(dou1.hashCode());——300063655
4.字符串直接转换为基本数据类型  XXX.parseXXX()
5.字符串怎么转换为字符? "".charAt()     toCharArray[]
6.补充:包装类在进行计算时,会自动转换为基本数据类型
Integer in2 = new Integer(10);
System.out.println(in2 + 20);——30
7.NaN和任何数都不相等   :System.out.println((0.0 / 0) == (0.0 / 0));——false
8.// 判断数字是否是NaN
1.Double的类方法 :System.out.println(Double.isNaN(0.0 / 0));——true
2.Double的对象方法: System.out.println(new Double(0.0 / 0).isNaN());——true
   正无穷 :System.out.println(1.0 / 0);——Infinity
   负无穷 :System.out.println(-1.0 / 0);——   -Infinity

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值