Java之反射--8.2.1反射创建类的对象

阅读更多

//反射创建类的对象
package com.aowin.newInstance;

import java.lang.reflect.Constructor;
import com.aowin.getclass.Student;

//创建的类中如果有空参数的构造方法
//1.获取创建的类的Class对象
//2.调用Class类中的newInstance()方法

//创建的类中没有空参数的构造方法,或者要使用有参数的构造方法
//1.获取创建的类的Class对象
//2.获取Class对象表示类中的构造方法,
//3.根据权限,取消访问权限检查,通过Constructor类中的setAccessible(true)方法
//4.调用Constructor类中的newInstance(参数)方法 

public class Test {
    public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException, Exception, Exception {
        
        //1.获取创建的类的Class对象
        Class c = Class.forName("com.aowin.getclass.Student");
        
        //2.
        //如果Class对象表示的类中有空参数的构造方法,则可以使用Class类中的newInstance()方法
        Object stu = c.newInstance();
        System.out.println(stu); 
        
        //获取Class对象表示的类中的public修饰的构造方法,通过Class类中的getConstructor(参数)或getConstructors()
        Constructor[] cons = c.getConstructors();
        for(int i=0;i             System.out.println(cons[i]); 
        }        
        //获取指定参数的构造方法
        Constructor con = c.getConstructor(int.class);    //获取int参数的构造方法,有多个参数用,隔开
        //通过Constructor类中的newInstance(参数)来创建对象
        Object obj2 = con.newInstance(17);   //
        System.out.println(obj2);             
        //获取Class对象表示类中所有的构造方法,通过Class类中的getDeclaredConstructors()方法
        Constructor[] deCons = c.getDeclaredConstructors();
        for(int i=0;i             System.out.println(deCons[i]); 
        }        
        //获取指定参数的所有权限的构造方法
        Constructor deCon = c.getDeclaredConstructor(String.class,int.class);        
        //取消访问权限检查
        deCon.setAccessible(true);         
        //通过Constructor类中的newInstance(参数)创建对象
        Object obj3 = deCon.newInstance("张三",17);
        System.out.println(obj3); 
        
        
        
        
    }

}
 

转载于:https://my.oschina.net/Watto/blog/874105

你可能感兴趣的:(Java之反射--8.2.1反射创建类的对象)