Java教程

java基础12

本文主要是介绍java基础12,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

枚举类Enum

1.基本

static final:定义一系列常量时,一系列静态对象

enum Season {
    //直接定义一系列对象
    SPRING("",""),
    SUMMER("",""),
    AUTUMN("",""),
    WINTER("","");
    //字段
    private final String seasonName;
    private final String seasonDesc;
    //构造方法私有
    private Season(String name,String desc){
        this.seasonName = name;
        this.seasonDesc = desc;
    }
    //其他方法
    
}
常用方法说明
values() 返回枚举对象数组
valueOf(String str) 字符串转化为对应的枚举对象
toString() 返回当前枚举对象常量的名字

2.实现接口

 

注解Annotation

能够编译的特殊标记,jdk5.0新增

框架= 注解+反射+设计模式

1.用例

1.1 生成文档相关注解:

@author 标明作者

@version 版本

@see 参考转向

@since 从哪个版本开始增加

@param 参数说明

@return 返回值说明

@exception 说明异常 throws时

 

1.2 编译时格式检查:(内置注解)

@override 表示方法重写,只能修饰方法

@Deprecated 修饰方法、属性、类,表示不鼓励使用

@SuppressWarnings 抑制警告

 

1.3 跟踪代码依赖性替代配置文件:

servlet

1.4 spring事务管理:

 

1.5自定义注解

  • 注解的本质就是一个Annotation接口

@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@interface MyAnnotation {
    //注解参数: 参数类型 + 参数名();default
    String name() default "";
    int age() default 0;
    int id() default -1;
    
}

 

2.元注解

注解其他注解的注解 meta-annotation

2.1 @Retention

Retention使用枚举RetentionPolicy来表示注解保留时期:

源码(编译期),字节码(类加载)或者运行期(JVM中运行)

  • @Retention(RetentionPolicy.SOURCE),注解仅存于源码

  • @Retention(RetentionPolicy.CLASS), 默认保留,注解在class字节码文件中存在,运行时无法获得

  • @Retention(RetentionPolicy.RUNTIME), 注解在class字节码文件中存在,在运行时通过反射获取

    自定义注解中使用 @Retention(RetentionPolicy.RUNTIME)

2.2 @Target

描述注解的使用范围

  • @Target(ElementType.TYPE) 接口、类、枚举、注解

  • @Target(ElementType.FIELD) 属性字段、枚举常量

  • @Target(ElementType.METHOD) 方法

  • @Target(ElementType.PARAMETER) 方法参数

  • @Target(ElementType.CONSTRUCTOR) 构造

  • @Target(ElementType.LOCAL_VARIABLE) 局部变量

  • @Target(ElementType.ANNOTATION_TYPE) 注解

  • @Target(ElementType.PACKAGE) 包

  • @Target(ElementType.TYPE_PARAMETER) 泛型方法、泛型类、泛型接口 (jdk1.8加入)

  • @Target(ElementType.TYPE_USE) 任意类型除了 class (jdk1.8加入)

2.3 @Document

说明该注解被包含在javadoc中

2.4 @Inherited

说明子类可以继承父类中的该注解

@Inherited注解了的注解修饰了一个父类,如果他的子类没有被其他注解修饰,则它的子类也继承了父类的注解。

2.5@Repeatable

说明被这个元注解修饰的注解可以同时作用同一个对象多次,而每次作用注解可以表示不同的含义。

 

3.注解属性

注解中的变量都是成员变量(属性),并且注解中是没有方法的,只有成员变量,变量名就是使用注解括号中对应的参数名,变量返回值注解括号中对应参数类型。

  • 注解属性类型可以有以下列出的类型

  • 1.基本数据类型

  • 2.String

  • 3.枚举类型

  • 4.注解类型

  • 5.Class类型

  • 6.以上类型的一维数组类型

 

反射Reflection

1.概念

动态获取信息以及动态调用对象方法的功能称为Java语言的反射机制

类名用途
Class类 代表类的实体,在运行的Java应用程序中表示类和接口
Field类 代表类的成员变量(成员变量也称为类的属性)
Method类 代表类的方法
Constructor类 代表类的构造方法

1.1 Class类

Class类的实例用于记录对象的类描述信息

1.获取Class对象

  • 通过类名直接获取:类名.class 返回Class对象,再创建实例

  • 通过对象获取:对象名.getClass() Class<? extends 类名>

  • 通过全类名获取:Class.forName(全类名) 返回Class<?>

方法名功能说明
static Class forName(String name) 返回指定类名 name 的 Class 对象
Object newInstance() 调用缺省构造函数,返回该Class对象的一个实例
Object newInstance(Object []args) 调用当前格式构造函数,返回该Class对象的一个实例
getName() 返回此Class对象所表示的实体(类、接口、数组类、基本类型或void)名称
Class getSuperClass() 返回当前Class对象的父类的Class对象
Class [] getInterfaces() 获取当前Class对象的接口
ClassLoader getClassLoader() 返回该类的类加载器
Class getSuperclass() 返回表示此Class所表示的实体的超类的Class

 

2.获取类中属性

方法名功能说明
getField(String name) 获得某个公有的属性对象
getFields() 获得所有公有的属性对象
getDeclaredField(String name) 获得某个属性对象(包含私有)
getDeclaredFields() 获得所有属性对象(包含私有)

返回的是 Field或数组

Field 对象可以使用getxxx,setxxx(并非类里的方法)

操作私有属性时:先setAccessible(true)

获取字段名,和字段的值:getName();get(对象);

3.获取类中构造器

方法名功能说明
getConstructor(Class...<?> parameterTypes) 获得该类中与参数类型匹配的公有构造方法
getConstructors() 获得该类的所有公有构造方法
getDeclaredConstructor(Class...<?> parameterTypes) 获得该类中与参数类型匹配的构造方法
getDeclaredConstructors() 获得该类所有构造方法

返回Constructor<?>或数组

 

4.获取类中方法

方法名功能说明
getMethod(String name, Class...<?> parameterTypes) 获得该类某个公有的方法
getMethods() 获得该类所有公有的方法
getDeclaredMethod(String name, Class...<?> parameterTypes) 获得该类某个方法(包含私有)
getDeclaredMethods() 获得该类所有方法(包含私有)

返回Method或数组

  • 先获取Method对象 xx

  • 调用xx.invoke(实例名,参数)来使用此方法,参数为此方法的参数

 

1.2 Field类

Field代表类的成员变量(成员变量也称为类的属性)

方法名功能说明
equals(Object obj) 属性与obj相等则返回true
get(Object obj) 获得obj中对应的属性值
set(Object obj, Object value) 设置obj中对应属性值

 

1.3 Method类

Method代表类的方法

方法名功能说明
invoke(Object obj, Object... args) 传递object对象及参数调用该对象对应的方法

1.4 Construtor类

Construtor代表类的构造方法

方法名功能说明
newInstance(Object... initargs) 根据传递的参数创建类的对象

 

2.动态代理

使用代理替代原对象,对于原对象的调用都通过代理

一个代理类完成全部代理功能

 

 

这篇关于java基础12的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!