Java教程

Java之反射

本文主要是介绍Java之反射,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

1.什么是反射机制

      JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于

任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的

方法的功能称为java语言的反射机制。 

2.反射机制有什么用

     通过java语言中的反射机制可以操作字节码文件(可以读和修改字节码文件。)

      通过反射机制可以操作代码片段。(class文件。)

3.Class类对象的三种实例化模式

要想解剖一个类,必须先要获取到该类的字节码文件对象。而解剖使用的就是Class类中的方法.所

以先要获取到每一个字节码文件对应的Class类型的对象.

Class类对象的三种实例化模式:

以下分别举例实现: 

1.getClass()方法:

public final native Class<?> getClass()

范例:调用getClass()方法

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

结果:找到对应的类

2.类.class

范例:通过类名找对应的class 文件

import java.util.Date;

public class test {
    public static void main(String[] args) throws  Exception{
        System.out.println(Date.class);

    }
}

结果:

 

3.使用Class类提供的方法:public static Class forName(String className) throws ClassNotFoundException

范例:使用Class.forName()方法

package 反射;
import  java.lang.Class;
public class test {
    public static void main(String[] args) throws  Exception{
        Class<?> date =Class.forName("java.util.Date");
        System.out.println(date);

    }
}

结果:

4. 通过反射实例化对象

以上事例中可以看出除了getClass()方法会实例化对象之外,其他的俩种不会产生实例化对象,所以取得Class类对象的一个最直接的好处就是通过反射实例化对象该方法为:

对象.newInstance()

:newInstance()方法内部实际上调用了无参数构造方法,必须保证无参构造存在才可以。
否则会抛出java.lang.InstantiationException异常。

范例:

package 反射;
import  java.lang.Class;
import java.util.Date;

public class test {
    public static void main(String[] args) throws Exception{
        //通过反射机制,获取Class,通过Class来实例化对象
        Class<?>  cl=Class.forName("java.util.Date");
        //newInstance() 这个方法会调用Date这个类的无参数构造方法,完成对象的创建。
        // 重点是:newInstance()调用的是无参构造,必须保证无参构造是存在的!
        Object object=cl.newInstance();
        System.out.println(object);

    }
}

5.反射与类之间的操作

5.1Class类方法:

 范例:1.通过反射获取普通方法并且调用方法(非常重要)

import java.lang.reflect.Method;
import 新特性.泛型.泛型类方法.test;

public class getMethod {
    public static void main(String[] args) throws Exception {
        //通过反射机制,获取Class,通过Class来实例化对象
        Class<?> cl = test.class;
        //通过getMethods方法获取所有public修饰的普通方法
        Method[] methods = cl.getMethods();
        for (Method i : methods) {
            System.out.println(i);
        }
        System.out.println();
        //通过getDeclaredMethods返回类中所有的实例方法
        Method[] methods1 = cl.getDeclaredMethods();
        for (Method i : methods1) {
            System.out.println(i);
        }
        
    }
}

结果:

 后续补充,未写完

可参考Java反射(超详细!)_一只小菜鸡-CSDN博客_java反射

这篇关于Java之反射的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!