Java---反射机制

来源:互联网 发布:nginx 访问index.php 编辑:程序博客网 时间:2024/06/07 02:42

JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。

import java.util.Date;public class TestDemo {    public static void main(String[] args) {        Date date = new Date() ;        System.out.println(date.getClass());    }}

实例化Class类对象的三种方法:
第一种:利用对象调用getClass()方法

import java.util.Date;public class TestDemo {    public static void main(String[] args) {        Date date = new Date() ;        Class<?> cls = date.getClass() ;        System.out.println(cls);    }}

第二种:利用“类.class”操作

public class TestDemo {    public static void main(String[] args) {        Class<?> cls = java.util.Date.class;        System.out.println(cls);    }}

第三种:调用Class类的方法

public class TestDemo {    public static void main(String[] args) throws Exception {        Class<?> cls = Class.forName("java.util.Date");        System.out.println(cls);    }}

通过反射机制为工厂模式服务(避免出现N个new实例化代码)

interface Fruit{    public void eat();}class Apple implements Fruit{    @Override    public void eat() {        System.out.println("吃苹果");    }}class Orange implements Fruit{    @Override    public void eat() {        System.out.println("吃橘子");    }}class Factory{    public static Fruit getFruit(String name){        Fruit f = null;        try {            Class<?> cls = Class.forName(name);  //通过反射机制获得对应的类对象            f = (Fruit) cls.newInstance();  //通过得到的类对象取得实例(Object)并向下转型成Fruit类        } catch (ClassNotFoundException e) {            e.printStackTrace();        } catch (InstantiationException e) {            e.printStackTrace();        } catch (IllegalAccessException e) {            e.printStackTrace();        }        return f;    }}class Proxy implements Fruit{    public void before(){        System.out.println("洗水果。");    }    @Override    public void eat() {        this.before();        Factory.getFruit("Orange").eat();  //根据类所在的位置传入具体路径        this.after();    }    public void after(){        System.out.println("将吃完的水果皮残渣扔掉。");    }}public class Test {    public static void main(String[] args) {        Fruit f = new Proxy();        f.eat();    }}
0 0
原创粉丝点击