java进阶三:反射

Posted blackx

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java进阶三:反射相关的知识,希望对你有一定的参考价值。

1、得到各个字节码对应的实例对象(Class类型)的三种方式,示例如下:

  类名.class,比如,System.class

  对象.getClass(),比如,new Date().getClass()

  Class.forName("类名"),比如,Class.forName("java.util.Date")

 

2、Constructor类的使用,Constructor类代表某个类中的一个构造方法

  得到某个类所有的构造方法:

    Constructor[] constructors=Class.forName("java.lang.String").getConstructors();

  得到某一个构造方法:

    Constructor constructor=Class.forName("java.lang.String").getConstructor(StringBuffer.class);

  创建实例对象:

    普通方式:

    String str=new String(new StringBuffer("abc"));

    使用反射:

    Constructor constructor=Class.forName("java.lang.String").getConstructor(StringBuffer.class);
            String str1=(String) constructor.newInstance(new StringBuffer("abc"));

直接使用Class.newInstance()方法:

  String str2=(String)Class.forName("java.lang.String").newInstance();

  该方法内部是先得到默认的构造方法,然后用该构造方法创建对象实例

 

3、Field类代表某个类中的一个成员变量,使用方法如下:

class Point{
    public int x;
    private int y;
    public Point() {}
    public Point(int x,int y){
        this.x=x;
        this.y=y;
    }
}

public class Demo01 {
    public static void main(String[] args) throws Exception {
        Point point=new Point(1,2);
        Field xField=Class.forName("com.ly.java.enhance.reflection.Point").getField("x");
        System.out.println(xField.get(point));
     //得到私有属性 Field yField
=Class.forName("com.ly.java.enhance.reflection.Point").getDeclaredField("y"); yField.setAccessible(true); System.out.println(yField.get(point)); } }

 

4、Method类代表某个类中的一个成员方法,使用方法如下:

  得到类中的某一个方法:

    Method charAt=Class.forName("java.lang.String").getMethod("charAt", int.class);

  调用类中的某一个方法:

    String str="abc";

    普通方式:System.out.println(str.charAt(1));

    使用反射:

    Method charAt=Class.forName("java.lang.String").getMethod("charAt", int.class);
         System.out.println(charAt.invoke(str, 1));

 

    

  

 

  




以上是关于java进阶三:反射的主要内容,如果未能解决你的问题,请参考以下文章

Java进阶之光!mysql创建用户并授权建表

Java进阶之光!mysql创建用户并授权建表

##(⊙o⊙)值得收藏的JavaSE万字进阶版(⊙o⊙)##JavaSE 高级反射-动态代理-设计模式-JVM篇

JAVA进阶之旅——认识Class类,反射的概念,Constructor,Fiald,Method,反射Main方法,数组的反射和实践

Java进阶之reflection(反射机制)——反射概念与基础

Java进阶之reflection(反射机制)——反射概念与基础