反射——Java高级开发必须懂的

来源:互联网 发布:游戏3d美工招聘 编辑:程序博客网 时间:2024/06/06 05:23

    • Class类的使用
      • 1 Class类的使用
    • 动态加载类
      • 1 Java 动态加载类
    • 获取方法信息
      • 1 Java 获取方法信息

简介:反射是Java开发中一个非常重要的概念,掌握了反射的知识,才能更好的学习Java高级课程,因此必须要学习——你懂的!本门课程主要介绍Class类的使用,方法和成员变量的反射,以及通过反射了解集合泛型的本质等知识。

1 Class类的使用

1.1 Class类的使用

这里写图片描述
这里写图片描述

package com.amoscxy;public class ClassDemo1 {    public static void main(String[] args) {        Foo foo1 = new Foo();  // foo1是Foo类的实例对象        // Foo这个类也是一个实例对象,Class类的实例对象如何表示呢        // 任何一个类都是Class的实例对象,这个实例对象 有三种表示方式        // 第一种表示方式--->实际在告诉我们任何一个类都有一个隐含的静态成员变量class        Class c1 = Foo.class;        // 第二种表达方式,已知该类的对象通过getClass方法        Class c2 = foo1.getClass(); // Foo类的类类型        /*         * 官网,c1,c2表示了Foo类的类类型(class.type)         * 万事万物皆对象         * 类也是个对象,是Class类的实例对象         * 这个对象我们称之为该类的类类型         */        // 不管c1 or c2都代表了Foo类的类类型,一个类只可能是Class类的一个实例对象        System.out.println(c1==c2);        // 第三种表达方式        Class c3 = null;        try {            c3 = Class.forName("com.amoscxy.Foo");        } catch (ClassNotFoundException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }        System.out.println(c2==c3);        // 我们完全可以通过类的类类型创建该类的实例对象--->通过c1 or c2 or c3创建Foo的实例        try {            Foo foo = (Foo)c1.newInstance(); // 前提需要有无参数的构造方法            foo.print();        } catch (InstantiationException e) {            // TODO Auto-generated catch block            e.printStackTrace();        } catch (IllegalAccessException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }    }}class Foo{ // Foo这个类本身是个对象,是java.long.Class类的对象    void print() {        System.out.println("foo");    }}

2 动态加载类

2.1 Java 动态加载类

这里写图片描述

功能行的类尽量使用动态加载,动态加载类在运行时加载,编译一次不需要重新编译

OfficeBetter.java

class OfficeBetter{    public static void main(String[] args)     {        try{            // 动态加载类,在运行时刻加载            Class c = Class.forName(args[0]);            // 通过类类型,创建该类的对象            OfficeAble oa = (OfficeAble)c.newInstance();            oa.start();        }catch(Exception e){            e.printStackTrace();        }    }}

Word.java

class Word implements OfficeAble{    public void start(){        System.out.println("Word start");    }}

OfficeAble.java—接口,就是标准

interface OfficeAble{    public void start();}

3 获取方法信息

3.1 Java 获取方法信息