美文网首页
java反射机制

java反射机制

作者: wxz1997 | 来源:发表于2018-06-19 15:22 被阅读0次

一、java类初始化

  1. 初始化操作:按照源代码从上到下的顺序依次执行静态代码块和初始化静态域。在一个类被初始化前,其父类也需要被初始化。
  2. 初始化的时机:
    (1)创建类的实例,比如new创建对象。
    (2)访问某个类或接口的静态变量,或者对该静态变量复制。
    (3)调用类的静态方法。
    (4)反射。
  3. 如果访问一个类的用final修饰静态变量,这个变量在编译时就能确定,不会导致初始化。
package cn.wxz1997.concurrency.annotation;

/**
 * @Description: ${todo}
 * @Author: wxz1997
 * @Date 18-6-19下午2:22
 */
public class StaticDemo {
    public static void main(String[] args) {
        System.out.println(TestStatic.a);
    }
    
}

class TestStatic{
    public static final String a = "wxz1997";
    static {
        System.out.println("初始化");
    }
}

//加了final输出wxz1997
//去掉final输出初始化wxz1997

二、java反射机制

JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射。

  1. 获得类类型的三种方法:
    (1)Class cls = Test.class;
    (2)Class cls = Class.forName("cn.wxz1997.concurrency.reflection.Test");
    (3)Class cls = test.getClass();
    以上获得cls为同一类对象

  2. 创建对象
    (1)Class对象的newInstance,比较常用的方法,缺点只能调用默认的构造方法。
    (2)Class对象getConstructor获得Constructor调用newInstance。

  3. 反射的应用

package cn.wxz1997.concurrency.reflection;

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;

/**
 * @Description: ${todo}
 * @Author: wxz1997
 * @Date 18-6-19下午2:42
 */
public class Test {
    int a = 9;
    private static String b = "wxz1997";

    public Test() {
    }

    public Test(int a) {
        this.a = a;
    }

    public void test(){
        System.out.println("hello");
    }

    public String test2(int a, String b){
        return "hello" + a + b;
    }
}

class TestReflection{
    public static void main(String[] args) {
        try {
            Class cls = Class.forName("cn.wxz1997.concurrency.reflection.Test");
            System.out.println(cls);
            //获取构造方法
            Constructor[] constructors = cls.getDeclaredConstructors();
            for (Constructor constructor:constructors){
                System.out.println(constructor);
            }
            //获取方法
            Method[] methods = cls.getDeclaredMethods();
            for (Method method:methods){
                System.out.println(method);
            }
            //获取参数
            Field[] fields = cls.getDeclaredFields();
            for (Field field: fields){
                System.out.println(field);
            }
            //newInstance创建对象
            Object obj = cls.newInstance();

            /**
             * 反射调用对象的方法
             */
            Method method = cls.getMethod("test2", int.class, String.class);
            String value = (String) method.invoke(obj, 1, "wxz1997");
            System.out.println(value);

            /**
             * 反射获取对象属性的值
             */
            Field field = cls.getDeclaredField("a");
            int a = (int) field.get(obj);
            System.out.println(a);

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
//执行结果如下:
//class cn.wxz1997.concurrency.reflection.Test
//public cn.wxz1997.concurrency.reflection.Test(int)
//public cn.wxz1997.concurrency.reflection.Test()
//public java.lang.String cn.wxz1997.concurrency.reflection.Test.test2(int,java.lang.String)
//public void cn.wxz1997.concurrency.reflection.Test.test()
//int cn.wxz1997.concurrency.reflection.Test.a
//private static java.lang.String cn.wxz1997.concurrency.reflection.Test.b
//hello1wxz1997
//9

相关文章

  • Java反射机制入门

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

  • 反射之一

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

  • 反射之二

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

  • Java基础之反射

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

  • 反射之三

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

  • java反射机制

    java的反射机制 1 JAVA的反射机制是什么?反射机制能做什么?反射机制的优点与缺点2 认识 Class...

  • Java中反射的用途

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

  • Chapter 13 . 反射机制

    阅读原文 Chapter 13 . 反射机制 13.1 Java反射机制研究及应用 Java Reflection...

  • 详解Java反射机制(Reflection)

    详解Java反射机制(Reflection) 反射机制的作用 JAVA反射机制是在运行状态中,对于任意一个类,都能...

  • Java 反射机制

    [1]. java反射详解[2]. Java Reflection(反射机制)详解[3]. 深入理解Java类型...

网友评论

      本文标题:java反射机制

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