Java基础加强-反射、注解

  • 基础加强

    • 一回顾泛型
    • 二泛型的反射
    • 三注解

基础加强

一、回顾泛型

泛型的基本概念:
ArrayList<E>为例:
ArrayList<E>中的E称为类型参数变量
ArrayList<Integer>中的Integer称为实际类型参数
②整个ArrayList<E>称为泛型类型
整个ArrayList<Integer>称为参数化的类型(ParameterizedType)
定义一个泛型方法:

:

// <T>:泛型定义的声明,在返回值前面。
public <T> T findOne(Class<T> clazz) {}
// 对于静态泛型方法,都必须自己定义后才能使用
public static <T> void findTwo(){}
// 定义多个泛型
public static <K,V> V find(K k);
定义一个带泛型的类:
// 类级别的泛型定义,类中的"实例方法"就可以直接使用了。
public class Demo<T> {} 

二、泛型的反射

// 获取带有泛型信息的父类,例如:BaseDao<User>,这个整体称为:ParameterizedType,Type是Class类的接口
Type type = XXX.class.getGenericsSuperclass();
ParameterizedType ptype = type;
Clazz clazz = ptype.getActualTypeArguments()[0];

三、注解

介绍
①从JDK5.0开始,Java增加对元数据(MetaData)的支持,也就是注解(Annotation)。
②Annotation其实就是代码里的特殊标记,它用于代替配置文件。传统的方式中,使用配置告诉类如何运行,有了注解以后,开发人员可以通过注解告诉类如何运行。
③在Java技术里注解的典型应用是:可以通过反射技术得到类里面的注解,以决定怎么样运行类。
基本的注解
① SupperssWarnings:抑止警告
自定义注解

① 注解的定义

public @interface MyAnnotation {}

② 注解的属性:既不像方法,也不像字段。

注解属性能够使用的类型:primitive(基本类型),String,Class,Annotation,enum或者是以上类型的一维数组。

如果给注解中的属性赋值,可以只指定一个值,也可以指定多个值。

public @interface MyAnnotation_1 {
    // 注解的属性
    String name();
    // 带默认值的属性
    int age() default 18;
}

③ 使用注解及属性:

public class UseAnnotation {
    @MyAnnotation_1(name = "ABC", age = 18)
    public void test1(){}
}
注解的反射
涉及到的API:java.lang.reflect.AnnotatedElement

Class,Constructor,Field,Method,Packages都实现了该接口。

// 获取自己所拥有的指定的注解类型,aType是一个注解类型的字节码对象。
Annotation getAnnotataion(Class<T> aType);
// 返回所有的注解
Annotation[] getAnnotations();
// 判断自己有没有指定的注解类型
boolean isAnnotationPresent(Class<? extends Annotation> aType);
类的三种状态

SOURCE: .java文件

CLASS: .class文件

RUNTIME:内存中的class,由类加载器把.class文件加载入内存。

注解使用的生命周期
① 注解的默认存放的范围是:字节码状态。运行时(RUNTIME)是没有的。
使用元注解改变注解的存活范围

① 只能用于注解的注解,就是元注解

@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation_1 {}
使用元注解改变注解的放置位置
① 放在类上:@Target(ElementType.TYPE)

② 放在方法上:@Target(ElementType.METHOD)

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface MyAnnotation_1 {
}
时间: 2024-08-25 06:32:02

Java基础加强-反射、注解的相关文章

Java基础笔记 – Annotation注解的介绍和使用 自定义注解

Java基础笔记 – Annotation注解的介绍和使用 自定义注解 本文由arthinking发表于5年前 | Java基础 | 评论数 7 |  被围观 25,969 views+ 1.Annotation的工作原理:2.@Override注解:3.@Deprecated注解:4.@SuppressWarnings注解:5.自定义注解:5.1.添加变量:5.2.添加默认值:5.3.多变量使用枚举:5.4.数组变量:6.设置注解的作用范围:6.1.在自定义注解中的使用例子:7.使用反射读取R

Java基础增强-反射机制

1 反射机制简介 Java的反射(reflection)机制是指在程序的运行状态中,可以构造任意一个类的对象,可以了解任意一个对象所属的类,可以了解任意一个类的成员变量和方法,可以调用任意一个对象的属性和方法.这种动态获取程序信息以及动态调用对象的功能称为Java语言的反射机制.反射被视为动态语言的关键. 反射这一概念最早由编程开发人员Smith在1982年提出,主要指应用程序访问.检测.修改自身状态与行为的能力.这一概念的提出立刻吸引了编程界的极大关注,各种研究工作随之展开,随之而来引发编程革

Java基础之反射

Java反射是指运行时获取类信息,进而在运行时动态构造对象.调用对象方法及修改对象属性的机制.百度百科的定义:“JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意方法和属性:这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制. 一.反射的用途 Java的反射机制可以做3件事:运行时创建对象.运行时调用方法.运行时读写属性.进而实现以下功能:调用一些私有方法,实现黑科技.比如双卡短信发送.设置状态栏颜色.自动挂电

JAVA基础知识|反射

一.理解反射 1.1.基础概念 反射:在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意方法和属性:这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制. "运行状态",如何理解? "运行状态"体现了反射的应用场景,当一些类,不需要提前加载进JVM内存,而是在运行时根据需要进行加载的时候,就可以通过反射进行动态加载 1.2.如何理解反射? 学习过java的童鞋,肯定对spring.hibernate一

Java基础之—反射

反射是框架设计的灵魂 (使用的前提条件:必须先得到代表的字节码的Class,Class类用于表示.class文件(字节码))   一.反射的概述 JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制. 要想解剖一个类,必须先要获取到该类的字节码文件对象.而解剖使用的就是Class类中的方法.所以先要获取到每一个字节码文件对应的Class类型的对

Java基础教程(16)--注解

一.注解基础知识 1.注解的格式 ??最简单的注解就像下面这样: @Entity [email protected]符号指示编译器其后面的内容是注解.在下面的例子中,注解的名称为Override: @Override void superMethod() {...} ??注解可以有若干个属性.可以在使用注解时指定属性的值: @Auther(name = "maconn") class MyClass { ... } ??如果注解只有一个属性,则可以省略属性的名称: @Auther(&q

【转】Java基础之—反射

本文章来源:https://blog.csdn.net/sinat_38259539/article/details/71799078.感谢敬业的小码哥的总结. 反射是框架设计的灵魂(使用的前提条件:必须先得到代表的字节码的Class,Class类用于表示.class文件(字节码)) 一.反射的概述JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反

java基础篇---反射机制

一.JAVA是动态语言吗? 一般而言,说到动态言,都是指在程序运行时允许改变程序结构或者变量类型,从这个观点看,JAVA和C++一样,都不是动态语言. 但JAVA它却有着一个非常突出的动态相关机制:反射.通过反射,Java可以于运行时加载.探知和使用编译期间完全求和的类.生成其对象实体,调用其方法或者对属性设值.所以Java算是一个半动态的语言吧. 反射的概念: 在Java中的反射机制是指在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法; 对于任意一个对象,都能够调用它的任意一个方

黑马程序员-Java基础之反射

反射 JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制. Java反射机制主要提供了以下功能: 在运行时判断任意一个对象所属的类:在运行时构造任意一个类的对象:在运行时判断任意一个类所具有的成员变量和方法:在运行时调用任意一个对象的方法:生成动态代理. 反射说白了就是可以获得一个类的所有信息,主要包括方法和属性两部分.1.获得方法包括获得方

java基础:反射机制

一:定义 JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制. 二:使用场景 一般用在框架的封装上.hibernate.struts都是用反射机制实现的. 举例:JDBC中加载数据库驱动Class.forName("com.mysql.jdbc.Driver"); 三:优点 反射机制的优点就是可以实现动态创建对象和编译,体现出很大的