`
yidwo
  • 浏览: 261716 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

java中的反射reflect

    博客分类:
  • Java
阅读更多

反射语句:class.forName(String);  返回一个class对象.

先讲用"反射reflect"在构造方法中的应用:

ParamClass.java

package key;
public class ParamClass{
   
    private int id;
   private String name;
   private String passWord;
 //这个类并没有提供默认的无参的构造方法.
 //对于反射语句"Class.forName().newInstance()"来说他只会去找
 //默认无参的构造方法.这时候怎么去通过反射创建实例呢????
 /*public ParamClass(){
 
    System.out.println("ok");
 }*/
 public ParamClass(int id){
 
     this.id = id;
 }

 public ParamClass(String name,String passWord){
 
     this.name = name;
     this.passWord = passWord;
 }
 public void say(){
 
     System.out.println("id: "+id);
     System.out.println("name:  "+name);
     System.out.println("passWord:   "+passWord);
 }
}


对ParamClass.java的测试类TestParam.java

package key;
import java.lang.reflect.*;
                  //通过这一个类去测试怎样通过反射这中方式去创建一个只带参数构造方法的类的实例.
                  //什么是反射?反射是java具备动态语言性质的一种机制.
                 //他的好处的可以让java在运行的时候才去加载,探索一个在编译时候未知的class.
                //通过这样来实现一个类的"动态加载"
public class TestParam{

    public ParamClass getParamClassById(int id) throws Exception{
                      /*
                         ParamClass pc = (ParamClass)Class.forName("key.ParamClass").newInstance();
                       */
                       //首先获取这一个类的元对象 .那么什么是元对象呢?我们可以把他想象成盖一座楼的蓝图.
                      //有了蓝图之后那么就可以盖房子了
   
                   //2.获取这一个类的构造器.因为这个构造器是对应类的构造方法的参数列表的.
                    //在获取这一个构造器的时候必须要对那些参数造型为class
    Class cl = Class.forName("key.ParamClass");
                   //public ParamClass(int id)
    Constructor ct = cl.getConstructor(new Class[]{int.class});

    ParamClass pc = (ParamClass)ct.newInstance(new Object[]{new Integer(id)});
   return pc;
 }

 public ParamClass getParamClassByOthers(String name,String passWord) throws Exception{
                               //1.获取这个类的元对象
      Class cl = Class.forName("key.ParamClass");
         
                         //2.获取这一个类的构造器.因为这个构造器是对应类的构造方法的参数列表的.
                          //在获取这一个构造器的时候必须要对那些参数造型为class
           
                            //public ParamClass(String name,String passWord)
       Constructor ct = cl.getConstructor(new Class[]{String.class,String.class});
   
                           //3.有了构造器那么就可以通过他来创建实例了.
                         //当然还是必须要传参数.但这时候传进来的就是真实的参数了
                        //把他们作为一个Object数组传送给构造器来创建实例
    ParamClass pc = (ParamClass)ct.newInstance(new Object[]{name,passWord});
   return pc;
 }

 public static void main(String args[]) throws Exception{
 
      new TestParam().getParamClassByOthers("zhangsan","1234").say();
 }
}

反射在一般方法中的应用研究:应用到了单态模式(singleton).

Singleton.java

package key;
public class Singleton{
          //这是一个单例doublecheck模式
   private static Singleton instance = null;
   private static String key = "key";

   private Singleton(){
      System.out.println("instance");
   }

   public static Singleton getInstance(){
  
      if(instance == null){
        synchronized(key){
           if(instance == null){
    
                  instance= new Singleton();
          }
       }
   }
   return instance;
   }
}

对Singleton.java的测试类:TestSingleton.java

package key;
import java.lang.reflect.*;

public class TestSingleton{

   public Singleton getSingleton()throws Exception{
                         //1.首先还是要获取这一个类的元对象
       Class cl = Class.forName("key.Singleton");
                        //2.因为这一个类的构造方法声明为private,但是它又为我们留了一个获取实例
                        //的public static方法.那么我们就可以调用这一个方法去获取实例了.
                        //因为普通方法与构造方法不同,普通方法是没有规则的,所以在获取Method 实例的时候
                            //需要指定到底是通过那一个方法去获取实例.
                           //所以这里第1个参数就是要调用的方法名
                             //第2个参数就是参数的列表了
    Method method = cl.getMethod("getInstance",new Class[]{});
      
    Singleton sl = (Singleton)method.invoke(cl,new Object[]{});
    System.out.println("sl:  "+sl);
    return sl;
   }

   public static void main(String args[]) throws Exception{
  
        new TestSingleton().getSingleton();
   }
}


  • 反射.rar (2.3 KB)
  • 描述: 本文章的原代码.
  • 下载次数: 23
分享到:
评论

相关推荐

    Java中的reflect 反射的基本东西,

    Java中的反射机制是Java语言提供的一种强大的工具,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的...通过理解并熟练掌握Java反射机制,开发者可以更好地利用Java的动态性,提高代码的可扩展性和维护性。

    java反射JAVA REFLECT (java 反射)

    JAVA REFLECT (java 反射) 取得类的继承结构 - 类所在的包; |- public Package getPackage() - 类的声明方式; |-取得全类名:public String getName() |-只取类名: public String getSimpleName() - 类所继承...

    java反射(reflect)

    Java反射(Reflect)是Java语言中的一个重要特性,它允许运行时的Java程序访问、操作类、接口、字段和方法的信息,甚至动态调用方法。在Java编程中,反射提供了强大的能力,可以用来实现一些高级功能,如元编程、...

    9.3 Java反射reflect

    Java反射机制是Java编程语言中一个强大的特性,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。这个特性使得Java具备了高度的灵活性,能够在运行时动态地获取类的信息并调用对象的方法。Java...

    java中反射的概念

    总的来说,Java反射机制是面向对象编程的一个重要补充,它扩展了Java程序的动态性,允许程序员在运行时访问和操作类的内部结构,增强了代码的灵活性。理解和熟练掌握反射技术,对于提升Java编程能力,尤其是处理复杂...

    Java方法反射调用demo

    Java反射是Java编程语言中的一个强大特性,它允许在运行时检查类、接口、字段和方法的信息,并且能够在运行时动态地创建对象和调用方法。这个特性使得Java具有了高度的灵活性,常用于框架开发、插件系统、元编程等...

    Java EE:Reflect 反射技术.docx

    Java反射机制允许我们在程序运行期间动态地获取类、接口、字段和方法的信息,并能对这些信息进行操作。例如,我们可以获取一个对象的类类型,实例化未知类型的对象,访问和修改私有属性,以及调用任意方法。反射机制...

    Java中的反射机制Reflect

    在深入理解Java反射机制之前,我们首先需要知道什么是类的元数据,即关于类本身的信息。Java的反射机制就是通过这些元数据来操作类的实例。 在Java中,`java.lang.Class` 类是所有类的通用表示,它代表了Java运行时...

    java面试题--反射机制

    Java反射机制主要依赖于`java.lang.reflect`包下的API,其中包括: - `java.lang.Class`:表示一个类的运行时信息。 - `java.lang.reflect.Method`:表示类的方法。 - `java.lang.reflect.Field`:表示类的字段。 -...

    java 反射-(reflect)

    Java反射是Java编程语言中的一个强大特性,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。在Java中,反射机制的核心类是`java.lang.Class`,它代表了类的信息。通过反射,我们可以动态地...

    什么是java中的反射机制(reflect).docx

    Class 类代表了 Java 中的一个类,而 java.lang.reflect 包提供了许多反射类,例如 Constructor、Method、Field 等。 Constructor 类代表了某个类中的一个构造方法。例如,我们可以使用 Class.forName("java.lang....

    Java中的反射机制

    Java反射机制允许运行中的程序检查自身,并能直接操作程序的内部属性。这是其他许多编程语言(如Pascal、C或C++)不具备的能力。 **1.1 Reflection的工作机制** 为了展示反射如何工作,我们来看一个简单的例子: ...

    Java反射性能测试分析

    Java反射机制是Java编程语言中一个强大的特性,它允许程序在运行时动态地访问、检测和修改类、接口、字段和方法等对象。然而,反射操作通常会引入额外的开销,这在性能敏感的应用场景下可能成为一个瓶颈。本文将深入...

    java中反射知识总结

    2. **类对象** - 在Java中,每个类都有一个对应的Class对象,它是Java反射的入口。我们可以通过Class对象来实例化对象、获取类的构造器、方法和字段信息。例如,`Class<?> clazz = Class.forName("全限定类名");` 这...

    JAVA反射机制的入门代码

    Java反射机制是Java编程语言中的一个强大特性,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。这个特性使得Java具有了高度的灵活性和动态性,尤其是在处理元数据、创建对象、调用私有方法...

    反射实例-JAVA反射机制

    在Java反射中,针对类的不同组成部分(构造函数、字段和方法),`java.lang.Class`类提供了多种反射调用方式来获取信息。以下是几种常用的反射调用: - **获取构造函数**:`Constructor getConstructor(Class[] ...

Global site tag (gtag.js) - Google Analytics