Java基础系列第一章 初识Java语言
Java基础系列第二章 Java语言基础
Java基础系列第三章 Java流程控制
Java基础系列第四章 Java数组与字符串
Java基础系列第五章 面向对象程序设计
Java基础系列第六章 Java异常处理
Java基础系列第七章 IO流
Java基础系列第八章 集合框架
Java基础系列第九章 线程
Java基础系列第十章 注解、泛型、反射、序列化和常用类
Java基础系列第十一章 JDBC技术
Java基础系列第十二章 Java网络编程
目录
- 注解
- 基本注解
- 元注解
- 自定义注解
- 泛型
- 反射
- 序列化与反序列化
- 常用类
- Math类
- Number类
- Vector类
注解
注解:也称元数据,就是用来描述数据的数据。注解可在编译、类加载、运行时被读取并执行相应处理。注解可声明在包、类、成员变量、成员方法、局部变量、方法参数等前面,用来对其进行说明、注释。注解默认实现java.lang.annotation.Annotation接口类。根据注解作用可区分为基本注解、元注解、自定义注解。
基本注解基本注解:可直接在程序中当修饰符使用。jdk 8中提供了如下5种基本注解:
- @Deprecated:表示某个类、方法等已过时,不建议使用。如果使用,在编译时会出现警告信息。
- @Override:方法重写使用。
- @SuppressWarnings:抑制警告信息出现。可用于类型、构造方法、成员方法、成员变量、参数等,可配置警告参数,如 @SuppressWarnings(“警告参数”)。
- @SafeVarargs:抑制堆污染警告。
- @FunctionalInterfase:指定某个接口必须为函数式接口(指一个接口中只有一个抽象方法)。
元注解:对注解进行标注的注解。Java提供了如下6种元注解类型:
- @Target:限制注解的使用范围,如 @Target(“使用范围”)。
- @Retention:说明注解的保存范围,如@Retention(“保存范围”)。
- @Document:指定被修饰的注解可被javadoc.exe工具提取成文档。
- @Inherited:描述父类的注解可以被子类继承。
- @Repeatable:用于开发重复注解。
- 类型注解:允许定义ElementType枚举时使用@Target(ElementType.枚举值)来定义。
自定义注解:用户根据自己需求,自己设定。其格式如下:
泛型public @interface 注解名{
数据类型 成员变量名() default 初始值;
}
泛型:将数据的类型参数化。如果使用Object则可能会在程序运行时产生类型强制转换异常,使用泛型则能在编译时就检测出错误。
泛型一般使用在类、接口和方法上,其格式如下:
类的定义: 类修饰符 class 类名< T >
接口的定义:interface 接口名< T >
方法的定义:方法修饰符 < T > 返回值类型 方法名(参数){}
通配符"?":创建可重新赋值但不可修改其内容的泛型对象,用在方法参数上限制传入的类型实参。但泛型没使用通配符或其他限制类型参数时,< T >等价于< T extends Object>。
反射通配符和泛型的声明:泛型类名 extends T> obj = null;
// 当在程序中使用同一个泛型对象引用不同泛型对象时,需配合通配符一起使用。
反射:可以读和修改字节码文件,可以操作代码片段(class文件),即可以操作字节码文件。相关包java.lang.reflect.*。
反射重要的类:
- java.lang.Class:代表字节码,代表一个类。
- java.lang.reflect.Method:代表字节码中的方法字节码。
- java.lang.reflect.Constructor:代表字节码中的构造方法字节码。
- java.lang.reflect.Field:代表字节码中的属性字节码。
获取类class的方式:
第一种:Class c = Class.forName(“带包名的完整类名”);
第二种:Class c = 对象.getClass();
第三种:Class c = 任何类型.class;
获取类路径中文件的绝对路径及资源绑定器的使用:
public static void main(String[] args) {
// 获取类路径中文件的绝对路径
String path = Thread.currentThread().getContextClassLoader().getResource("test.properties").getPath();
// 资源绑定器,获取资源文件中的内容。application为文件名,其后缀必须是properties(是一个Map集合,key和value都是String类型)
ResourceBundle bundle = ResourceBundle.getBundle("test");
// 需资源文件中有对应的clsName,如clsName=lana
String clsName = bundle.getString("clsName");
System.out.println(clsName);
System.out.println(path);
}
输出:lana
/D:/workSpace/java-demo/javase/target/classes/test.properties
序列化与反序列化
序列化Serialize:java对象转换为字节序列。将Java对象的状态保存下来的过程。解决对对象流进行操作时引发的问题。
反序列化DeSerialize:将字节序列恢复成Java对象。
注意点:参与序列化和反序列化的对象,必须实现Serializable接口(Serializable接口标识作用,会自动生成一个序列化版本号)。transient关键字表示游离的,不参与序列化,被static修饰的字段也不参与序列化。
Math类:主要提供数学上的一些运算方法,如:随机数、指数、三角函数等。
Math类的常数:
- E:数学上的自然数e,大约为2.718281828459045
- PI:圆周率π,大约为3.141592654
随机数设置:
随机数:(数值类型)(random() * (最大范围值 - 最小范围值 + 1) + 最小范围值);
数学类方法和说明:
| 方法 | 说明 |
|---|---|
| static 数值类型 max(数值类型 值, 数值类型 值) | 返回两个数值中的最大值 |
| static 数值类型 min(数值类型 值, 数值类型 值) | 返回两个数值中的最小值 |
| static double pow(double 底数, double 次方) | 返回底数的指定次方的值 |
| static double sqrt(double 值) | 返回指定值的平方根 |
| static double exp(double 值) | 返回以自然数E为底的指定次方的值 |
| static double log(double 值) | 返回指定值的对数值 |
| static double sin(double 弧度) | 返回三角函数的正弦值 |
| static double cos(double 弧度) | 返回三角函数的余弦值 |
| static double tan(double 弧度) | 返回三角函数的正切值 |
| static double asin(double 弧度) | 返回三角函数的反正弦值 |
| static double acos(double 弧度) | 返回三角函数的反余弦值 |
| static double atan(double 弧度) | 返回三角函数的反正切值 |
| static double toRadians(double 弧度) | 将弧度转换成角度 |
| static double toDegrees(double 角度) | 将角度转换成弧度 |
| static double ceil(double 值) | 取整到不小于指定值的最小整数 |
| static double floor(double 值) | 取整到不大于指定值的最大整数 |
| static double rint(double 值) | 返回双精度浮点数最接近的整数值 |
| static int rount(float 值) | 返回单精度浮点数四舍五入后的整数值 |
| static long rount(float 值) | 返回双精度浮点数四舍五入后的长整数值 |
| static 数值类型 abs(数值类型 值) | 返回指定数值的绝对值 |
Number类:类型包装器类,其主要作用是将基本数据类型包装成对象类型。为抽象类,包含被定义为Final的派生类Byte、Double、Float、Integer、Long和Short,不能被重新定义。
Number类的常数:
| 常数 | 说明 |
|---|---|
| MAX_VALUE | 各个数据类型派生类的最大值 |
| MIN_VALUE | 各个数据类型派生类的最小值 |
| TYPE | 将数据类型以其基本数据类型的名称来表示 |
| NaN | 在Double和Float类型中,表示数值除以0的情况 |
| NEGATIVE_INFINITY | Double和Float类型中的负无穷大常数 |
| POSTITIVE_INFINITY | Double和Float类型中的正无穷大常数 |
Number类及派生类的常用方法:
| 常用方法 | 说明 |
|---|---|
| int intValue() | 将Number类中的对象数值转换成int数值 |
| long longValue() | 将Number类中的对象数值转换成long数值 |
| float floatValue() | 将Number类中的对象数值转换成float数值 |
| double doubleValue() | 将Number类中的对象数值转换成double数值 |
| byte byteValue() | 将Number类中的对象数值转换成byte数值 |
| short shortValue() | 将Number类中的对象数值转换成short数值 |
| int compareTo(数据类型 值) | 比较两个数据类型的值,返回0表示相等,返回值小于0表示被比较的值小于参数值,返回值大于0表示被比较的值大于参数值 |
| int equals(Object obj) | 比较两个对象是否相等 |
Vector类:Vector向量与ArrayList类相似,都是使用索引(下标)值来存取元素,区别是Vector类可应用于多线程同步处理数据。
Vector类构造函数如下:
| 构造方法 | 说明 |
|---|---|
| Vector() | 创建一个空向量对象,默认容量为10 |
| Vector(Collection 集合对象) | 以集合对象创建向量对象 |
| Vector(int i) | 创建一个向量对象,容量为i |
| Vector(int i, int r) | 创建一个容量为i的向量对象,其每增加一个元素需增加的容量为r |
Vector类常用方法如下:
| 常用方法 | 说明 |
|---|---|
| int capacity() | 返回向量对象的容量 |
| void copyInto(Object[ ] obj) | 复制向量对象的元素给指定的数组对象obj,需确定数组有足够的容量 |
| void setSize(int i) | 重新设置向量对象的容量 |
| Object elementAt(int i) | 返回向量对象中指定下标i的元素 |
| Object firstElement() | 返回向量对象中第一个元素 |
| Object lastElement() | 返回向量对象中最后一个元素 |
| void setElementAt(Object obj, int i) | 将向量对象中指定下标i的元素替换成新的对象obj |
| void removeElementAt(int i) | 删除向量对象中指定下标i的元素 |
| void insertElementAt(Object obj, int i) | 将对象obj添加到向量对象中指定下标i的位置 |
| void addElementAt(Object obj) | 将对象obj添加到向量对象末尾 |
| boolean removeElement(Object obj) | 删除向量对象中的对象obj,成功则返回true |
| boolean containsAll(Collection 集合对象) | 判断向量对象中是否包含集合对象中的所有元素 |
| boolean retainAll(Collection 集合对象) | 在向量对象中保留集合对象中的所有元素,删除其他元素 |



