美文网首页
java反射

java反射

作者: 赵荣晖 | 来源:发表于2020-11-08 21:09 被阅读0次

一、class类的使用

  • 1、java静态的成员、普通数据类型类不是对象
  • 2、类是对象,类是java.lang.Class类的实例对象。这个类称为该类的类类型(class type)
  • 3、只有java虚拟机可以创建class的实例对象
  • 4、编译时加载类为静态加载类,运行时刻加载类是动态加载类。
    --new创建对象是静态加载类,在编译时刻就需要加载所有的可能使用到的类。
    --使用Class.forName("类全程");为动态加载类,在运行时刻加载
  • 5、测试代码如下
public class ClassDemo {
    public static void main(String[] args) throws ClassNotFoundException, IllegalAccessException, InstantiationException {
        //Foo的实例化对象如何表示
        Foo foo1 = new Foo(); //foo1即Foo的实例化对象
        //Foo这个类也是一个实例化对象,是Class类的实例对象,即任何一个类都是Class的实例对象
        //表示方式1 -- 即任何一个类都有一个隐含的静态成员变量class
        Class class1 = Foo.class;
        //表示方式2,已知该类的对象,通过getClass方法获得
        Class class2 = foo1.getClass();
        //class1 、class2 表示了Foo类的类类型(class type),class1=class2,即一个类只可能是Class类的一个实例对象
        System.out.println( class1 == class2);
        //表达方式3
        Class class3 = Class.forName("com.tiandy.producer.Foo");
        //class3 = class2 = class1
        //通过class1、class2、class3创建Foo的实例
        Foo foo2 = (Foo)class1.newInstance();//需要有无参数的构造方法
    }
}
class Foo{}

测试代码2

public class MethodUtil {
    public static void main(String[] args) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
        //要获取print(int,int )方法
        Abc abc = new Abc();
        Class cla = abc.getClass();
        //获取方法,getMethod:获取的事public方法;getDeclaredMethod自己声明的方法。以下两种方法均可。
//        Method method = cla.getMethod("pring",new Class[]{int.class,int.class});
        Method method1 = cla.getMethod("print",int.class,int.class);
        Method method2 = cla.getMethod("print",String.class,String.class);
        //方法的反射操作
        Object o = method1.invoke(abc,10,20);
        Object o1 = method2.invoke(abc,"10","20");
        System.out.println();
    }

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

二、方法的反射

  • 1、方法的名称和方法的参数列表才能唯一决定某个方法
  • 2、方法的反射操作:method.invoke(对象,参数列表)
public class MethodUtil {
    public static void main(String[] args) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
        //要获取print(int,int )方法
        Abc abc = new Abc();
        Class cla = abc.getClass();
        //获取方法,getMethod:获取的事public方法;getDeclaredMethod自己声明的方法。以下两种方法均可。
//        Method method = cla.getMethod("pring",new Class[]{int.class,int.class});
        Method method1 = cla.getMethod("print",int.class,int.class);
        Method method2 = cla.getMethod("print",String.class,String.class);
        //方法的反射操作
        Object o = method1.invoke(abc,10,20);
        Object o1 = method2.invoke(abc,"10","20");
        System.out.println();
    }

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

三、泛型的本质

  • 1.泛型只在编译时有用,用于防止代码输入错误。运行时去掉。

相关文章

  • 博客地址

    java注解-01、java注解-02、Git面试资源java反射-01、java反射-02、java反射-03为...

  • Java反射机制入门

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

  • Java基础之反射

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

  • 反射之一

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

  • 反射之二

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

  • Java基础之反射

    Java基础之反射 反射基本介绍 反射的使用通过反射调用属性和方法通过反射获取配置文件 反射基本介绍 Java反射...

  • Java 反射机制

    Java 反射机制 什么是反射 Java 反射是Java语言的一个很重要的特征,它使得Java具体了“动态性”。 ...

  • 一探究竟:Java反射效率低的原因到底在哪?

    预备知识 了解 Java 反射基本用法 看完本文可以达到什么程度 了解 Java 反射原理及 Java 反射效率低...

  • 面试官说:大家都说 Java 反射效率低,你知道原因在哪里么

    预备知识 了解 Java 反射基本用法 看完本文可以达到什么程度 了解 Java 反射原理及 Java 反射效率低...

  • Java面试题之JavaSE高级

    一、Java中的反射 1.说说你对Java中反射的理解 java中的反射首先是能够获取到Java...

网友评论

      本文标题:java反射

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