码迷,mamicode.com
首页 > 编程语言 > 详细

Java 反射基础

时间:2018-09-23 13:31:01      阅读:193      评论:0      收藏:0      [点我收藏+]

标签:class   stat   static   tom   edm   asc   rgs   oid   obj   

1.反射概念:

Java运行时,动态获得类的信息以及动态调用对象的方法的功能。

在运行时判断任意一个对象所属的类

在运行时构造任意一个类的对象

在运行时判断任意一个类所具有的成员变量和方法

在运行时调用任意一个对象的方法

 

2. 动态语言和静态语言

动态语言的定义:在程序运行时,运行改变程序结构或者变量类型,这这种语言称为动态语言

动态语言:Perl,Python,Ruby,JavaScript

静态语言:C++,Java,C#

 

3. Java反射机制由以下类来实现,这些类在java.lang.reflect中

Class类: 代表一个类

Field类:代表类的成员变量

Method类:代表类的方法

Constructor类:代表类的构造方法

Array类: 提供了动态创建数组,以及访问数组的元素的静态方法。

 

4. Java中,无论生成某个类的多少个对象,这些对象对象都会对应同一个Class对象

 

5. 反射的例子: 打印出String类中所有的方法

 public static void main(String[] args) throws Exception {
        Class<?> classType = Class.forName("java.lang.String");

        Method[] methods = classType.getDeclaredMethods();
        for(Method method : methods){
            System.out.println(method);
        }


    }

  

6.反射的例子2,调用单独的反射方法

public class InvokeTester {
    public  int add(int param1, int param2){
        return  param1 +param2;
    }

    public String echo(String message){
        return  "hello: " + message;
    }

    public static void main(String[] args)  throws  Exception{
        //传统调用
        InvokeTester tester = new InvokeTester();
        System.out.println(tester.add(1,5));
        System.out.println(tester.echo("tom"));

        // 反射调用
        Class<?> classType = InvokeTester.class;
        Object invokerTester = classType.newInstance();

        //add方法
        Method addMethod = classType.getMethod("add",new Class[]{int.class, int.class});
        Object result = addMethod.invoke(invokerTester,new Object[]{2,3});
        System.out.println(result);

        //echo方法
        Method echoMethod = classType.getMethod("echo",new Class[]{String.class});
        result = echoMethod.invoke(invokerTester,new Object[]{"world"});
        System.out.println(result);


    }
}

  

 

Java 反射基础

标签:class   stat   static   tom   edm   asc   rgs   oid   obj   

原文地址:https://www.cnblogs.com/linlf03/p/9692033.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!