美文网首页
java学习笔记#10-反射机制

java学习笔记#10-反射机制

作者: edwin1993 | 来源:发表于2018-09-23 21:23 被阅读0次
  • CLASS类的使用
  • 方法的反射

CLASS类的使用

在面向对象的中,几乎所有的内容都是对象,除了静态成员和基本类型外。
类是java.lang.Class类的对象。
对象是对客观事物的抽象,类是对对象的抽象。它们的关系是,对象是类的实例,类是对象的模板。

任何一个类,都是Class类的实例对象。在java底层,Class类的构造方法是私有的

  • 动态加载和静态加载
    编译时刻加载是静态加载类,运行时刻加载是动态加载类。
    new创建的对象都是编译时加载,因此需要在编译时刻就加载所有可能使用到的类,否则就会报错。

动态加载类的方法如下:

Class c = Class.forName("Framework.Reflact");
OtherClass otherclass =  c.newInstance()

这种方法通过类类型来创建对象。

Class还有很多其它的用途
public class ClassUtil {
    public static void printClassInfos(Object object){
        Class cls = object.getClass();
        System.out.println("Class name is :"+ cls.getName());
//        一个成员方法就是方法类的对象
        Method[] methods = cls.getMethods();//获取所有public方法,包括父类继承而来的。
        Method[] declaredMethods = cls.getDeclaredMethods();//获取自己声明的方法
        for (Method method : methods) {
            System.out.println(method.getName());
        }
        System.out.println("======================>");
//       成员变量也是对象
        Field[] fields = cls.getFields();//获取所有public成员变量信息。
        for (Field field:fields){
            System.out.println(field.getType());
            System.out.println(field.getName());
        }
        System.out.println("======================>");
//        构造函数也是对象
        Constructor[] constructors = cls.getConstructors();
        for(Constructor constructor: constructors){
            System.out.println(Arrays.toString(constructor.getParameterTypes()));
        }

    }
}

方法的反射

反射过程:
获取某个方法
method.invoke(对象,参数)

public class ReflectDemo {
    public static void main(String args[]){
//        获取类的信息
        A a1 = new A();
        Class cls = a1.getClass();
//        获取类的方法
        try {
//            Method method = cls.getMethod("print",new Class[]{int.class,int.class});
            Method method = cls.getMethod("print",int.class,int.class);

//            方法的反射操作:用method对象来调用方法。
//            原本操作为a1.print(10,20)
            method.invoke(a1,10,20);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

class A{
    public void print(int a, int b){
        System.out.println(a + b);
    }

    public void print(String a, String b){
        System.out.println(a.toUpperCase() + " "+ b.toLowerCase());
    }
}

可以通过反射来绕过泛型约束:

        ArrayList list1 = new ArrayList();
        ArrayList<String> list2 = new ArrayList<String>();

        list2.add("abc");
//        list2.add(20);错误的

        Class c1 = list1.getClass();
        Class c2 = list2.getClass();

        System.out.println(c1 == c2);
//        True,说明编译后的集合是去泛型的。

        try {
            Method m = c2.getMethod("add",Object.class);
            m.invoke(list2,100);
            System.out.println(list2);//[abc,100]
        } catch (Exception e) {
            e.printStackTrace();
        }

相关文章

  • java学习笔记#10-反射机制

    CLASS类的使用 方法的反射 CLASS类的使用 在面向对象的中,几乎所有的内容都是对象,除了静态成员和基本类型...

  • [JAVA学习笔记] 反射机制

    [JAVA学习笔记] 反射机制 Java的反射通过Class类和java.lang.reflect类库实现。通过它...

  • Java学习笔记之反射机制

    title: Java学习笔记之反射机制tag: Javacategories: Java 理论介绍 为了便于理解...

  • Java中反射的用途

    Java的反射机制是Java特性之一,反射机制是构建框架技术的基础所在。灵活掌握Java反射机制,对大家以后学习框...

  • Java反射机制入门

    Java反射机制入门 一、什么是反射 JAVA反射机制(The JAVA reflection mechanism...

  • 反射之一

    总结内容源自一下文章粗浅看java反射机制反射机制应用实践谈谈java反射机制Java Reflection(反射...

  • 反射之二

    总结内容源自一下文章粗浅看java反射机制反射机制应用实践谈谈java反射机制Java Reflection(反射...

  • Java反射机制学习笔记

    上一篇《java注解学习笔记》中最后说到了注解的实现主要依赖java的反射机制,那么这一篇主要介绍一下java的反...

  • java反射机制学习笔记

    定义百度百科解释 JAVA反射机制是在运行状态中,对于任意一个实体类,都能够知道这个类的所有属性和方法;对于任意一...

  • Java基础之反射

    Java基础之—反射(非常重要)Java中反射机制详解Java进阶之reflection(反射机制)——反射概念与...

网友评论

      本文标题:java学习笔记#10-反射机制

      本文链接:https://www.haomeiwen.com/subject/qtcfoftx.html