美文网首页
java 反射机制

java 反射机制

作者: 谁吃了我的薯条 | 来源:发表于2017-10-01 10:26 被阅读0次

反射:
主要是指程序可以访问,检测和修改它本身状态或行为的一种能力,并能根据自身行为的状态和结果,调整或修改应用所描述行为的状态和相关的语义。
反射是java中一种强大的工具,能够使我们很方便的创建灵活的代码,这些代码可以再运行时装配,无需在组件之间进行源代码链接。但是反射使用不当会成本很高!

java.lang.class类,是所有反射操作的源头,它含有三种实例化方法;
1、getClass()

@HotSpotIntrinsicCandidate
    public final native Class<?> getClass();

调用getClass()*可以得到类的出处;

package StringBase;

import java.util.Date;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;

public class Test {
    public static void main(String[] args) throws Exception{
        Date data=new Date();
        Class<?> cls=data.getClass();
        System.out.println(cls);

    }
}
------
class java.util.Date

2、使用“类.Class"的语法
此方法无需实例化对象;

package StringBase;

import java.util.Date;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;

public class Test {
    public static void main(String[] args) throws Exception{ ;
        Class<?> cls=Date.class;
        System.out.println(cls);

    }
}
-----
class java.util.Date

3、调用Class类的一个方法
此时可以不掉用import引用,而且类名称参数为字符串;

  @CallerSensitive
    public static Class<?> forName(String className)
                throws ClassNotFoundException {
        Class<?> caller = Reflection.getCallerClass();
        return forName0(className, true, ClassLoader.getClassLoader(caller), caller);
    }
package StringBase;

public class Test {
    public static void main(String[] args) throws Exception{ ;
        Class<?> cls=Class.forName("java.util.Date");
        System.out.println(cls);

    }
}
-----
class java.util.Date

反射实例化对象
对象实例化的代码,可以不使用关键字new,可以利用反射来完成(newInstance())
一切的耦合都起源于new;
使用反射调用构造
采用newInstance只能调用无参构造方法,若无无参构造方法,则采用
Constructor 和 getConstructor,因为使用起来较为麻烦,故必须保留无参构造方法(可以采用重载);


package just;

public class StringBase {
    private String title;
    private String price;
    public StringBase(String title,String price){
        this.title=title;
        this.price=price;
    }
    public String toString(){
        return this.title+" "+this.price;
    }
}

package StringBase;
import just.StringBase;
import java.lang.reflect.Constructor;
public class Base{
    public static void main(String args[])throws Exception{
        Class<?> cls=Class.forName("just.StringBase");
        Constructor<?> base=cls.getConstructor(String.class,String.class);
        Object obj=base.newInstance("hsjfans","99999");
        StringBase c=(StringBase)obj;
        System.out.println(c);
    }
}

反射调用方法
实例化方法有三种,new\ clone \反射(newInstance)
反射调用方法,可以不给出具体类名与方法名(前提是:方法命名标准),进行方法的操作;

package just;

public class StringBase {
    private String title;
    private String price;

    public StringBase(){
    }
    public void setTitle(String title) {
        this.title = title;
    }

    public void setPrice(String price) {
        this.price = price;
    }

    public String getTitle() {
        return this.title;
    }

    public String getPrice() {
        return this.price;
    }

    public String toString(){
        return this.title+" "+this.price;
    }
    public void set(String title,String price){
        this.title=title;
        this.price=price;
    }
}

package StringBase;
import java.lang.reflect.Method;


public class Base{
    public static String fileName(String filename){
        return filename.substring(0,1).toUpperCase()+filename.substring(1);
    }

    public static void main(String args[])throws Exception{
        String filename="title",filetitle="price";
        Class<?> cls=Class.forName("just.StringBase");
        Object obj=cls.newInstance();//实例化对象;
        Method setMethod=cls.getMethod("set",String.class,String.class);
        Method getMethod=cls.getMethod("get"+fileName(filename));
        setMethod.invoke(obj,"hsjfans","88888");
        System.out.println(getMethod.invoke(obj));

    }
}
------
hsjfans

相关文章

  • 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/amjwextx.html