注解

注解和反射

注解

  • override 重写
  • Deprecated 不推荐使用
  • SuppressWarnings 镇压警告

元注解

负责注解其他的注解

@Target 用于描述注解的使用范围

@Retention 表示需要在什么级别保存该注解信息

@Document 说明该注解江北包含在javadoc中

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

定义一个注解

public class Tannotation {

}
//定义一个注解
//runtime > class > sources
@Target(value ={ ElementType.METHOD,ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@interface MyAnnotation{

}

自定义注解

使用@interface自定义注解时,自动继承了java.long.annotation.Annotation接口.

反射

动态语言

  • 是一类在运行时可以改变其结构的语言,例如新的函数 对象 甚至代码可以被引进.已有的函数可以被删除或是其他结构上的变化.通俗点说就是运行时代码可以根据某些条件改变自身结构.
  • 主要的动态语言: Object-c c# JavaScript PHP Python

静态语言

  • 与动态语言相反 如java c++ c
  • java可以称为准动态语言,java具有一定的动态性,

Class类

Class本身也是一个类

Class对象只能由系统建立对象

一个加载的类在JVM中只会有一个Class实例

一个Class对象对应的是一个加载到JVM中的class文件

每个Class可以完整的得到一个类中的所有被加载的结构

Class类是Reflection的根源,针对任何你想动态加载 运行的类 唯有先获得相应的Class对象

类加载器

将class文件字节码内容加载到内存中 在堆中生成一个java.lang.Class对象

  • 引导类加载器 用C++编写的 是jvm自带的类加载器 负责java平台的核心库
  • 扩展类加载器 负责jre/lib/ext目录下的jar包或者指定目录下的jar包
  • 系统类加载器 负责java-classpath或者指定目录下的ja的类与jar包装入工作是最常用的加载器

调用Class的newInstance()方法

1. 类必须有无参构造器
2. 类的构造器访问权限需要足够.

如果没有无参构造器 只要在操作时调用构造器并传入参数

	1. getDeclaredConstructor(Class.....parameterTypes)
	2. 向构造器的形参中传递一个对象数组进去 里面包含了构造器中所需的各种参数
	3. 通过Constructor实例化对象
public class T03 {
    public static void main(String[] args) throws ClassNotFoundException, IllegalAccessException, InstantiationException, NoSuchMethodException, InvocationTargetException {

        Class<?> c1 = Class.forName("com.Rain.refelction.User");

        //通过构造器
//        Constructor constructor = c1.getDeclaredConstructor(String.class, int.class);
//        User user = (User)constructor.newInstance("尹泉润", 2019214859);
//        String string = user.getName();
//        System.out.println(string);

        //通过反射使用普通方法
        User user = (User) c1.newInstance();
        Method setName = c1.getDeclaredMethod("setName",String.class);
        setName.invoke(user,"尹泉润");
        System.out.println(user.getName());

        //通过反射操作属性
        //不能直接操作私有属性 需要关闭安全检测.
        

    }
}

反射操作泛型

ParameterizedType 表示一种参数化类型比如Collection

GenericArraryType 表示一种元素类型是参数化类型或者类型变量的数组类型

TypeVariable 是各种类型变量的公共父接口

WildcardType 代表一种通配符类型表达式

ORM

tion

GenericArraryType 表示一种元素类型是参数化类型或者类型变量的数组类型

TypeVariable 是各种类型变量的公共父接口

WildcardType 代表一种通配符类型表达式

ORM

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值