A a = (A)Class.forName(“pacage.A”).newInstance();

这和你 A a = new A(); 是一样的效果。

String className = “Example”;
class c = Class.forName(className);

1、如果你知道一个实例,那么你可以通过实例的“getClass()”方法获得该对象的类型类;/

2、如果你知道一个类型,那么你可以使用“.class”的方法获得该类型的类型类。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
            //通过泛型新建对象。Class.forName()和A.class.h
//            Class<Son> a = Son.class;
try{
            Class a = Class.forName("com.hao.class14.Son");}catch(Exception e){
}
            System.out.println("do="+a.getName());
            //创建新的对象。
            Son b= (Son) a.newInstance();需要默认的构造方法,即先调用无参构造方法
Father b=  a.newInstance();
            if(b instanceof Son){//向下转型
                Son son = (Son)b;
            }
            b.do1();
            //创建父类对象
            Class<? super Son> c2 = a.getSuperclass();//优于普通的Class
            ((Father)c2.newInstance()).do1();
            //class文件反射查询类的参数。
            Method[] ee = a.getDeclaredMethods();

出现的时期不同:

Class.forName()在运行时(类地址为字符串)加载(先找到class中的类):加载类,初始化静态方法。

使用Class类的中静态forName()方法获得与字符串对应的Class对象

运行期加载需要加上try。。。catch语句。

类字面常量Class.class和getClass()是在编译时加载类.不初始化,调用静态或非静态域时初始化。

1、.class用于类名,getClass()是一个final native的方法,因此用于类实例

2、.class在编译期间就确定了一个类的java.lang.Class对象;

3、.getClass()方法在运行期间确定一个类实例的java.lang.Class对象

调用Object类的getClass()方法来得到Class对象

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//class文件反射查询类的方法,使用invoke调用。
            Method[] ee = a.getDeclaredMethods();//该方法是获取本类中的所有方法,包括私有的(private、protected、默认以及public)的方法
            Method[] ee1 = a.getMethods();//该方法是获取本类以及父类或者父接口中所有的公共方法(public修饰符修饰的)
            String [] names ={"tom","tim","allen","alice"};
            try {
                Method m3 = ee[3];
                m3.invoke(a.newInstance(),null);
                Method m1 = a.getMethod("do5",String.class);
                for(String name:names)
                    m1.invoke(a.newInstance(),name);
            catch (Exception e) {
                e.printStackTrace();
            }
 
  Method echoMethod = classType.getMethod("echo",
    new Class[] { String.class });
  result = echoMethod.invoke(invokertester, new Object[] { "hello" });
  System.out.println(result);

泛型机制:

这种是jdk1.5引入的泛型机制,没有T这种类型,T是根据你输入的来动态匹配。加入你集合放入的String类型,那么你就可以使用List<String>,然后代码中所有出现T的地方都用String代替就可以了 ,放入的是Object类型,那么你就用List<Object>,

静态资源不认识泛型。

泛型三种:
          [1]ArrayList<T> al=new ArrayList<T>();指定集合元素只能是T类型
          [2]ArrayList<?> al=new ArrayList<?>();集合元素可以是任意类型,这种没有意义,一般是方法中,只是为了说明用法
          [3]ArrayList<? extends E> al=new ArrayList<? extends E>();
            泛型的限定:
               ? extends E:接收E类型或者E的子类型。
               ?super E:接收E类型或者E的父类型。

 

Java泛型和反射总结的更多相关文章

  1. 应用Java泛型和反射导出CSV文件

    项目中有需求要把数据导出为CSV文件,因为不同的类有不同的属性,为了代码简单,应用Java的泛型和反射,写了一个函数,完成导出功能. public <T> void saveFile(Li ...

  2. Java泛型和反射

    1. 字节码对象的三种获取方式 以String为例 Class<? extends String> strCls = "".getClass(); Class<S ...

  3. Java泛型反射机制(二)

    /** * @author Administrator * 好处:泛型:1安全 2减少代码重用率 */ package com.test; import java.lang.reflect.Metho ...

  4. Java基础系列 - 泛型和反射机制

    package com.test5; import java.lang.reflect.Field; import java.lang.reflect.Method; /** * Java泛型和反射机 ...

  5. java 泛型基础问题汇总

    泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数.这种参数类型可以用在类.接口和方法的创建中,分别称为泛型类.泛型接口.泛型方法. Java语言引 ...

  6. 编写高质量代码:改善Java程序的151个建议(第7章:泛型和反射___建议106~109)

    建议106:动态代理可以使代理模式更加灵活 Java的反射框架提供了动态代理(Dynamic Proxy)机制,允许在运行期对目标类生成代理,避免重复开发.我们知道一个静态代理是通过主题角色(Prox ...

  7. java的泛型与反射机制

    什么是泛型? 泛型,即“参数化类型”.顾名思义,就是将类型由原来的具体的类型参数化,类似于方法中的变量参数,此时类型也定义成参数形式(可以称之为类型形参),然后在使用/调用时传入具体的类型(类型实参) ...

  8. Java高质量代码之 — 泛型与反射

    在Java5后推出了泛型,使我们在编译期间操作集合或类时更加的安全,更方便代码的阅读,而让身为编译性语言的Java提供动态性的反射技术,更是在框架开发中大行其道,从而让Java活起来,下面看一下在使用 ...

  9. JAVA的泛型与反射的联合应用

    通过泛型与反射的结合,可以编写框架来使开发更容易,这里演示的是BaseDao部分的简单使用. BaseDao部分代码: public abstract class BaseDao<T>{ ...

随机推荐

  1. hdu 4587 2013南京邀请赛B题/ / 求割点后连通分量数变形。

    题意:求一个无向图的,去掉两个不同的点后最多有几个连通分量. 思路:枚举每个点,假设去掉该点,然后对图求割点后连通分量数,更新最大的即可.算法相对简单,但是注意几个细节: 1:原图可能不连通. 2:有 ...

  2. windows下模拟linux命令的工具 xshell

    windows下模拟linux命令的工具 xshell

  3. Codeforces 713C Sonya and Problem Wihtout a Legend(DP)

    题目链接   Sonya and Problem Wihtout a Legend 题意  给定一个长度为n的序列,你可以对每个元素进行$+1$或$-1$的操作,每次操作代价为$1$. 求把原序列变成 ...

  4. 输出重定向、cat、系统别名、查看指定行、时间戳

    1.touch命令:如果文件不存在则创建,如存在则更新时间戳;2.除了echo有向文件写入内容的功能,cat也可以; cat > hehe # 输出重定向 cat >> hehe # ...

  5. codechef Tree and Queries Solved

    题目链接: https://www.codechef.com/problems/IITK1P10 大概是:修改点值,求子树节点为0有多少个, DFS序后,BIT 询问,修改 ;    {        ...

  6. avi视频文件提取与合并

    最近在做一个avi视频文件的提取与合并,花了几天熟悉avi文件格式.制作了一个提取与合并的动态库,不过仅限于提取视频,视频的合并还没添加一些额外判断,可能导致不同分辨率的视频文件合成后不能播放.欢迎大 ...

  7. 使用ftrace学习linux内核函数调用

    http://www.cnblogs.com/pengdonglin137/articles/4752082.html 转载: http://blog.csdn.net/ronliu/article/ ...

  8. java并发编程阻塞队列

    在前面我们接触的队列都是非阻塞队列,比如PriorityQueue.LinkedList(LinkedList是双向链表,它实现了Dequeue接口). 使用非阻塞队列的时候有一个很大问题就是:它不会 ...

  9. nginx配置初步

    nginx配置初步 1,切换至nginx目录,找到配置文件目录 cd /etc/nginx/conf.d 2,拷贝一份conf文件 sudo cp default.conf head.conf 3,进 ...

  10. python实现的websocket总结 —— wspy

    之前曾有php版的websocket封装包.见Websocket--php实战,近期使用python做一些功能,须要用到对websocket的操作,因此,參照之前的实现,实现了这个python版本号. ...