精华内容
下载资源
问答
  • 反射机制 创建对象 与传统的通过new 来获取对象的方式不同 反射机制,会先拿到...通过反射机制创建一个对象 package reflection; import java.lang.reflect.Constructor; import charactor.Hero; public cl...

    反射机制 创建对象

    与传统的通过new 来获取对象的方式不同
    反射机制,会先拿到Hero的“类对象”,然后通过类对象获取“构造器对象”
    再通过构造器对象创建一个对象

    步骤 1 : 创建一个对象

    通过反射机制创建一个对象

    package reflection;
    import java.lang.reflect.Constructor;
    import charactor.Hero;
    public class TestReflection {
      
        public static void main(String[] args) {
            //传统的使用new的方式创建对象
            Hero h1 =new Hero();
            h1.name = "teemo";
            System.out.println(h1);
              
            try {
                //使用反射的方式创建对象
                String className = "charactor.Hero";
                //类对象
                Class pClass=Class.forName(className);
                //构造器
                Constructor c= pClass.getConstructor();
                //通过构造器实例化
                Hero h2= (Hero) c.newInstance();
                h2.name="gareen";
                System.out.println(h2);
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
    

    练习通过配置文件获取对象

    (首先准备一个文本文件:hero.config。 在这个文件中保存类的全名称,可以是charactor.APHero 或者是charactor.ADHero

    接着设计一个方法叫做:

    public static Hero getHero()

    在这个方法中,读取hero.config的数据,取出其中的类名,根据类名实例化出对象,然后返回对象。)

    展开全文
  • java反射机制通过反射创建对象的四种方式
    展开全文
  • JAVA反射机制创建对象

    千次阅读 2017-12-15 16:04:49
    在实际开发过程中,JAVA反射技术应用广泛,尤其是在一些广泛使用的框架中,如Spring、mybatis中更是大量使用。java语言并不是一种动态语言,也就是说在运行时不能...反射技术就是在程序运行时将所需要的类通过Class.f
    在实际开发过程中,JAVA的反射技术应用广泛,尤其是在一些广泛使用的框架中,如Spring、mybatis中更是大量使用。java语言并不是一种动态语言,也就是说在运行时不能改变程序结构或者变量类型,但是JAVA提供了反射技术,可以让我们在运行时加载所需要的类。反射的英文单词是reflect,也可以翻译成为映像,个人认为叫映像可能更好理解一些。反射技术就是在程序运行时将所需要的类通过Class.forname将类影响交给使用者使用。先看一下使用new创建类对象的方式:
    public class newServiceImpl {
        private String name;
        public newServiceImpl(){
        }
        public newServiceImpl(String name){
            this.name = name;
        }
        
        public void sayHello(String name){
            System.err.println("Hello " + name);
        }
        
        public void sayHello(){
            System.err.println("Hello " + this.name);
        }
    }
    在newServiceImpl类中,有两个构造函数和两个sayHello方法,使用这个类的方法如下:
    public class NewTest {
    public static void main(String[] args) {
    	// TODO Auto-generated method stub
    		
    	newServiceImpl ns1 = new newServiceImpl("newService");
    	ns1.sayHello();
    	newServiceImpl ns2 = new newServiceImpl();
    	ns2.sayHello("newService2");
        }
    }
    在设立我们使用了new关键字来创建类对象,这时,在编译的时候就会将newServiceImpl类加载进来并且构造。而反射机制,可以这样操作:
    package com.springstudy.reflect;
    public class ReflectServiceImpl {
    private String name;
    public ReflectServiceImpl(){
    }
    public ReflectServiceImpl(String name){
        this.name = name;
    }
    public void sayHello(){
        System.err.println("Hello " + this.name);
    }
    public void sayHello(String name){
        System.err.println("Hello " + name);
    }
    使用这个类:
    import java.lang.reflect.InvocationTargetException;
    public class ReflectTest {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        ReflectServiceImpl rs1 = getInstance();
        rs1.sayHello("reflectservice1");
        ReflectServiceImpl rs2 = getInstance2();
        rs2.sayHello();
    }
    public static ReflectServiceImpl getInstance(){
        ReflectServiceImpl object = null;
        try{
            object = (ReflectServiceImpl)Class.forName("com.springstudy.reflect.ReflectServiceImpl").newInstance();
        }catch(ClassNotFoundException|InstantiationException|IllegalAccessException ex){
            ex.printStackTrace();
        }
        return object;
    }
    public static ReflectServiceImpl getInstance2(){
        ReflectServiceImpl object = null;
        try{
    object = (ReflectServiceImpl)Class.forName("com.springstudy.reflect.ReflectServiceImpl").
    getConstructor(String.class).newInstance("reflectservice2");
    }catch (ClassNotFoundException | InstantiationException 
    | IllegalAccessException | NoSuchMethodException 
    | SecurityException | IllegalArgumentException 
    | InvocationTargetException ex) {
        ex.printStackTrace();
        }
        return object;
        }
    }
    JAVA的反射机制是通过java.lang.reflect.*来实现的,在这里,我们使用
    (ReflectServiceImpl)Class.forName("com.springstudy.reflect.ReflectServiceImpl").newInstance();
    (ReflectServiceImpl)Class.forName("com.springstudy.reflect.ReflectServiceImpl").getConstructor(String.class).newInstance("reflectservice2");
    在运行的时候来构造无参数构造器或有参数构造器的对象,实现运行时创建使用类对象的方式,这就是通过JAVA的反射机制来创建对象的方法,JAVA的反射机制内部实现非常的复杂,感兴趣的人可以在网上找资料看看它的实现机制。

    展开全文
  • 通过反射机制创建Class对象使用最多的方法就是通过Class.forName返回Class对象,因为这种方法需要传递的参数是一个字符串,字符串可以写入配置文件,方便修改。 /** * 创建一个Text类作为反射机制的练习 * ...

    关于java反射机制创建Class对象、创建实例对象,调用方法
    通过反射机制创建Class对象使用最多的方法就是通过Class.forName返回Class对象,因为这种方法需要传递的参数是一个字符串,字符串可以写入配置文件,方便修改。
    通过类地址创建Class对象
    Class c = Class.forName(“com.liheng.business.text.Text”);
    根据传入参数获取对应构造方法对象(直接调用newInstance方法只能创建无参构造)
    Constructor c1 = c.getConstructor(int.class,String.class);
    创建实例对象
    Object c2 = c1.newInstance(1,“s”);
    获取方法对象
    Method prMethod = c.getDeclaredMethod(“pr”,String.class,String.class,String.class);
    调用函数
    Object obj = prMethod.invoke(c2,“hello”," ",“word”);

    //创建Class对象,传入的字符串为要反射的对象的完整名称,即加上了所有包名的名字
     		Class c = Class.forName("com.liheng.business.text.Text");
     		//通过class对象获取对象的构造方法,传入的参数数量和类型取决于要获取的构造方法
            Constructor c1 = c.getConstructor(int.class,String.class);
            //通过构造方法创建实例对象
            Object c2 = c1.newInstance(1,"s");
          	//通过Class对象来获取对象中的方法,传入的第一参数是获取的方法的名字,后面的参数是想要获取的方法的数量及类型
            Method prMethod = c.getDeclaredMethod("pr",String.class,String.class,String.class);
            //使用方法对象调用函数,完成调用方法,第一个参数是此方法的实例对象,后面的参数是调用此方法需要传入的实参,返回值是Object类型
            Object obj = prMethod.invoke(c2,"hello","  ","word");
            System.out.println(obj);
    		
    
    		/**
    		 * 创建一个Text类作为反射机制的练习
    		 * Text类有一个int类型的参数和一个String类型的参数
    		 * 一个pr方法,形参是三个String类型的,返回值是String的
    		 */
    		public class Text {
    		    private int i;
    		    private String j;
    		
    		    public Text(int i,String j) {
    		        this.i = i;
    		        this.j = j;
    		    }
    		
    		    public Text() {
    		    }
    		
    		    public String pr(String a, String b, String c){
    		        System.out.println(a + b + c);
    		        return a + b + c;
    		    }
    		}
    

    输出结果中第一个是调用方法输出,第二个是输出的返回结果
    运行结果

    展开全文
  • JAVA通过反射机制用构造方法创建对象 public class ConstructorTest01 { public static void main(String[] args) throws Exception{ Class c = Class.forName("reflection.constructor.UserService"); //调用...
  • 1、Class类方法:getConstructors()在JDK文档中,对于该方法有如下解释:Returns an array containingConstructorobjects reflectingall the public constructors of...返回一个含有反射所有的该类的public构造器的C...
  • 反射机制 创建对象

    2018-01-12 17:44:36
    与传统的通过new 来获取对象的方式不同  反射机制,会先拿到Hero的“类对象”,然后...通过反射机制创建一个对象 package reflection; import java.lang.reflect.Constructor; import charactor.Hero; public class
  • JAVA通过反射机制访问对象的属性 给属性赋值set 获取属性的值get 访问私有属性需要使用setAccessible(true)打破封装,但打破封装... //不使用反射机制创建对象 User user = new User(); //不使用反射机制修改属性
  • 反射技术Java通过反射机制实例化一个类的对象Java通过反射机制实例化一个类的对象,步骤所用方法如下:1. forName() 返回给定串名相应的Class对象。2. newInstance() 创建类的新实例。3. getConstructors() 返回当前...
  • 反射技术Java通过反射机制调用某个类的方法Java通过反射机制调用某个类的方法,步骤所用方法如下:1. forName() 返回给定串名相应的Class对象。2. getMethod() 返回当前Class对象表示的类或接口的指定的公有成员方法...
  • 返回一个含有反射所有的该类的public构造器的Constructor对象的数组。 注意,是public的构造器,其他的访问权限都是无法探测到的。 经过实验,在数组中存放的构造器对象,是按照构造器的定义顺序的。 ...
  • package com.yuxinyicheng.test2...   import java.lang.reflect.Field; import java.lang.reflect.Method;   publicclassTestReflection {  publicstaticvoid main(String[] args) throws Exception, Except
  • 这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。那我们该如何使用呢?我们首先得运用java中的Class类,Class是一个类,一个描述类的类(也就是描述类本身),封装了描述方法的Method,描述字段...
  • 在通常情况下,如果有一个类,可以通过创建对象;但是反射就是要求通过一个对象找到一个类的名称;2:在反射操作中,握住一个核心概念:一切操作都将使用Object完成,类,数组,的引用都可以使用Object进行接收;3...
  • 在通常情况下,如果有一个类,可以通过创建对象;但是反射就是要求通过一个对象找到一个类的名称;   2:在反射操作中,握住一个核心概念: 一切操作都将使用Object完成,类,数组,的引用都可以使用Object...
  • 转载请注明来源 赖赖的博客前景概要在 01 走进Spring,Context、Bean和IoC 中,我们看到了强大的Spring通过ApplicationContext实现了bean工厂(也就是对象工厂),那究竟是怎么实现的呢,本次给大家写一个小Demo展现其...
  • Java反射机制操作对象赋值实际业务情景:现在需要对两个字段相同的表(不止这一对表,还有甚多,所以通过反射写一个通用的方法)操作,将table1 set table2,我们通过java bean 的反射机制,将mapping的java bean通过...
  • Java反射创建对象

    2020-02-28 00:20:06
    Java反射机制提供了另外一种创建对象方法,Class类提供了一个实例方法newInstance(),通过该方法 可以创建对象,使用起来比较简单,下面两条语句实现了创建字符串String对象。 Class clz = Class.forName("java.lang...
  • 获取class类型的对象之后,可以创建该“类”的对象 */ class Test07 { public static void main(String[] args) throws Exception{ //将A.class文件装载到JVM中的过程 Class c = Class.forName("Employee"); ...
  • JAVA反射机制 java反射机制是在运行状态中,对于任意一个类, ...这种动态获取的信息以及动态调用对象的方法的功能称为JAVA语言的反射机制。 巧妙的利用java中的反射机制,能够帮助我们进行程序开发时达到意想不到...
  • 1.创建一个Javabean 2.创建测试类: 3.运行结果如下: 转载于:https://www.cnblogs.com/beibidewomen/p/7205615.html
  • 反射机制java中非常强大的一个功能,之前我介绍了如何获得Class/Field/Method/Constructor对象,今天就来讲一讲获得的这些对象应该如何使用. 创建对象实例 我们可以通过两种反射机制的方法来创建对应类的实例 Class...
  • 通过反射的方式创建对象 String className = “包名.A”; 类对象 Class pclass = Class.forName(className); 构造器 Constructor c = pClass.getConstructor(); 通过构造器实例化 A a = (A)c.newInstance(); 应用 ...
  • 通过Java反射机制调用方法//20210204写在前面:最近再把Java反射和注释知识点过一遍,在这里记一下重要的点,本文讲述反射机制创建对象并调用方法主要任务:使用类反射机制实现对象创建以及方法调用与普通方式实现...
  • 今天研究了下java反射机制,并利用反射机制通过非默认构造器创建对象,代码如下: public class Toy { // Comment out the following default constructor // to see NoSuchMethodError from (*1*) ...
  • 1.在Java虚拟机种,只有一个类,所有使用使用反射机制的时候,创建多少个引用都是指向同一个类的。 2.通过Class类对象创建java对象 package com.bjpowernode.java_learning; import ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,621
精华内容 648
关键字:

java通过反射机制创建对象

java 订阅