一、java.lang.reflect类   Class类

1、反射机制(Reflection):通过类创建对象,

2、反射机制提供了如下功能:

在运行时,判断任意一个对象所属的类

构造任意一个类的对象

判断任意一个类所具有的成员变量和方法

调用任意一个对象的方法

生成动态代理 例如连接数据库时数据处理

动态获取数据类型的方式:getResource( )  toURI( )  getPath( )

1)、getClass( ),用到Object类,

 Dog dog = new Dog( );
Class aa = dog.getClass( );
System.out.print(aa.toString()); //获取class com.icss.ref.biz.Dog

2)、 运用 .class语法:寻找指定相对路径时候,

 Class aa = Dog.class;
System.out.print(aa.toString()); //获取class com.icss.ref.biz.Dog

3)、 运用static method ,Class.forName( ):

  Class aa = Class.forName("com.icss.ref.biz.Dog");     //通过配置文件,动态配置要创建的对象
System.out.print(aa.toString()); //获取class com.icss.ref.biz.Dog

JDBC中  Class.forName("jdbc:  ")  //作用是类库的检查

扩展: 运行时类型识别 RTTI

java.lang.Class<T>类 也被称为元类

forName()方法用来加载一个对象,使用它,可以不必使用new关键字来创建对象,它是一个静态方法 Class.forName("类名")

使用forName()和使用new来创建对象的区别:用new创建对象要通过编译器静态检查
                                                           forName()方法是动态加载,即便编译时类不存在,编译也可以通过,只是在运行时会抛出异常
                                                           forName()方法返回的是一个Class类型,而不是加载的那个类的类型,

例如:Candy candy = Class.forName("Candy");    错误
        Class candy = Class.forName("Candy");      正确

3、通过反射机制得到某个类的某个方法,然后调用对应这个类的某个实例的该方法

4、通过反射机制创建新类的实例,有几个方法可以创建:

1)、

 Class aa = Dog.class;

 Object obj = aa.newInstance( );   //在runtime期间,用反射机制动态创建对象

 Dog dog = (Dog) obj;

 dog.setName("旺财");

2)、有参构造

 Object obj=Dog.class.getDeclaredConstructor(String.class).newInstance("欢欢");
Dog dog = (Dog) obj;

5、通过反射获取类Method对象,调用Field的Invoke方法调用函数。

二、注解( annotation )

1、元数据:就是描述代码间的关系,或者代码与其他资源之间内在联系的数据。
---元数据可以用于创建文档,跟踪代码中的依赖性,甚至执行基本编译时检查
注解:所有的注解都只有成员方法,而且不需要提供这些方法的实现,java会实现这些方法
注解不能包括extends关键字,但所有的注解类型都会自动从Annotation接口派生出来

 //声明一个名称为MyAnno的注解 MyAnno.java
@interface MyAnno{
String str( );
int val( );
} //使用MyAnno注解 demoAnno.java
public void demoAnno{
@MyAnno(str = "simple example", val = 10)
public static void doSomething( ){
System.out.println("do something");
}
}

注解的保留策略:SOURCE,CLASS,RUNTIME
//通过一个java内置注解@Retention来指定注解,@Retention(保留策略)
注解的应用:标记注解的应用
单成员注解的应用
内置注解的应用:1、java.lang.annotation引入的有4个 @Retention @Documented @Target @Inherited
                      2、java.lang 引入3个 @Override @Deprecated @SuppressWarnings
使用注解的一些限制:

1、注解不能继承另一个注解

2、注解声明的方法一定不能带参数

      3、它必须返回下面的结果之一 :基本类型,String或者Class类型的对象,枚举类型,其他注解类型,前面类型之一的一个数组

4、不能被定义为泛型,也就是说不能带类型参数

5、不能使用throws子句

java--反射和注解的更多相关文章

  1. Java反射,注解,以及动态代理

    Java反射,注解,以及动态代理 基础  最近在准备实习面试,被学长问到了Java反射,注解和动态代理的内容,发现有点自己有点懵,这几天查了很多资料,就来说下自己的理解吧[如有错误,望指正] Java ...

  2. java 反射,注解,泛型,内省(高级知识点)

     Java反射 1.Java反射是Java被视为动态(或准动态)语言的一个关键性质.这个机制允许程序在运行时透过Reflection APIs    取得任何一个已知名称的class的内部信息, 包括 ...

  3. java反射获取注解并拼接sql语句

    先建两个注解 分别为 Table 和 Column package com.hk.test; import java.lang.annotation.ElementType; import java. ...

  4. 【转】JAVA反射与注解

    转载自:https://www.daidingkang.cc/2017/07/18/java-reflection-annotations/ 前言 现在在我们构建自己或公司的项目中,或多或少都会依赖几 ...

  5. JavaSE学习总结(十五)—— Java反射与注解

    一.静态语言与动态语言 静态类型语言:是指在编译时变量的数据类型即可确定的语言,多数静态类型语言要求在使用变量之前必须声明数据类型,某些具有类型推导能力的现代语言可能能够部分减轻这个要求.强类型 动态 ...

  6. java反射与注解结合使用(根据传入对象输出查询sql)

    我们在项目开发中有很多地方使用到了注解,关于注解的定义与创建小伙伴可以参考我的文章<java注解>.有任何问题的小伙伴们可以在评论区指出哦,欢迎各位大佬指出问题. 今天我要说的是使用注解与 ...

  7. Java反射及注解

    一.反射 1.动态语言:是指程序在运行是可以改变其结构:新的函数可以引进,已有的函数可以被删除等结构上的变化.比如常见的JavaScript就是动态语言,除此以外Python等也属于动态语言,而C.C ...

  8. Java反射与注解

    反射 能够分析类能力的程序称为反射(reflective),代码的这种能力称为"自省".反射机制的功能极其强大,反射机制可以用来: 在运行时分析类的能力 在运行时查看对象,例如,编 ...

  9. Java反射和注解

    反射:http://blog.csdn.net/liujiahan629629/article/details/18013523 注解:http://www.cnblogs.com/peida/arc ...

  10. Java 反射、注解

    1. 泛型 基本用法.泛型擦除.泛型类/泛型方法/泛型接口.泛型关键字.反射泛型! a. 概述 泛型是JDK1.5以后才有的, 可以在编译时期进行类型检查,且可以避免频繁类型转化! // 运行时期异常 ...

随机推荐

  1. PAT1064(上)分析部分

    Complete Binary Search Tree (30) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 16000 B A Binary Search Tree (BST) ...

  2. hdu_3564_Another LIS(线段树+LIS)

    题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=3564 题意:给你N个数的位置.数i的位置为第i个数,比如 0 0 2,表示1插在第0个位置,此时数列为 ...

  3. Django: 之Apache、Nginx部署以及发送邮件

    在这里讲述部署的方法和常见的问题,并给出了在BAE,JAE,SAE等上面部署的实例. Django + nginx + Gunicorn/uwsgi部署方式,参见另一篇:Django部署(nginx) ...

  4. svg都快忘了,复习一下

    http://www.360doc.com/content/07/0906/21/39836_724430.shtml

  5. POJ 1062 昂贵的聘礼详解最短路变形

    POJ上难得一见的中文题…… 思路:建立一个以0为源点的地图,那么Map[0][n]的值代表 第n号物品的价值,Map[i][j]代表用 j  替代 i 后,物品j的价值.我们认为酋长的承诺为节点 ‘ ...

  6. rowcommand事件中获取控件

    //根据当前按钮生成命名空间 protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)        ...

  7. openwrt串口的使用

    从 RT5350 的芯片手册上可以得知, RT5350 一共有两个串口, 分别为 UART Lite. UART Full, UART Lite 就是我们惯称为的串口 1,作为系统调试串口,通过这个串 ...

  8. ftok函数的使用

    ftok函数的定义:系统建立IPC通讯 (消息队列.信号量和共享内存) 时必须指定一个ID值.通常情况下,该id值通过ftok函数得到. 头文件 #include <sys/types.h> ...

  9. 【2013 ICCV】Abnormal Event Detection at 150 FPS in MATLAB

    2. method 把每一帧变成不同尺度,并且把每一层分成互不覆盖的patch.连续的5帧堆叠在一起形成时空立方体.对时空立方体计算3D梯度特征[11].这些视屏序列中的特征,根据空间位置的相关性,进 ...

  10. .net杂记

    1. .net 接口命名规范例如I***able; 2. 接口扩展功能,代表类Can do;抽象类代表族 Is a; 3. 不要在foreach中处理异常;