Java反射获取class对象方式解析
1、获取Class对象
在JavaAPI中,提供了获取Class类对象的三种方法:
第一种,使用Class.forName静态方法。
前提:已明确类的全路径名。
第二种,使用.class方法。
说明:仅适合在编译前就已经明确要操作的Class
第三种,使用类对象的getClass()方法。
适合有对象示例的情况下
User类
packagecom.reflection;
/**
*CreatedbyLiuxdon2018-08-15.
*/
publicclassUser{
privateStringname;
privateIntegerage;
publicUser(){
}
publicUser(Stringname,Integerage){
this.name=name;
this.age=age;
}
publicStringgetName(){
returnname;
}
publicvoidsetName(Stringname){
this.name=name;
}
publicIntegergetAge(){
returnage;
}
publicvoidsetAge(Integerage){
this.age=age;
}
@Override
publicStringtoString(){
return"User{"+
"name='"+name+'\''+
",age="+age+
'}';
}
}
packagecom.reflection;
/**
*CreatedbyLiuxdon2018-08-15.
*/
publicclassTestReflection{
publicstaticvoidmain(String[]args){
//第一、通过Class.forName方式
Classclazz1=null;
try{
clazz1=Class.forName("com.reflection.User");
}catch(ClassNotFoundExceptione){
e.printStackTrace();
}
//第二、通过对象实例方法获取对象
Classclazz2=User.class;
//第三、通过Object类的getClass方法
Useruser=newUser();
Classclazz3=user.getClass();
System.out.println(clazz1);
System.out.println(clazz2);
System.out.println(clazz3);
}
}
2、获取对象实例
共两种方法:
一、直接用字节码文件获取对应实例
//调用无参构造器,若是没有,则会报异常 Objecto=clazz.newInstance();
二、有带参数的构造函数的类,先获取到其构造对象,再通过该构造方法类获取实例:
//获取构造函数类的对象
Constroctorconstroctor=clazz.getConstructor(String.class,Integer.class);
//使用构造器对象的newInstance方法初始化对象
Objectobj=constroctor.newInstance("龙哥",29);
packagecom.reflection;
importjava.lang.reflect.Constructor;
/**
*CreatedbyLiuxdon2018-08-15.
*/
publicclassTestReflection{
publicstaticvoidmain(String[]args){
//第一、通过Class.forName方式
Classclazz1=null;
try{
clazz1=Class.forName("com.reflection.User");
}catch(ClassNotFoundExceptione){
e.printStackTrace();
}
//第二、通过对象实例方法获取对象
Classclazz2=User.class;
//第三、通过Object类的getClass方法
Useruser=newUser();
Classclazz3=user.getClass();
System.out.println(clazz1);
System.out.println(clazz2);
System.out.println(clazz3);
Useruser1=null;
try{
user1=(User)clazz1.newInstance();
}catch(InstantiationExceptione){
e.printStackTrace();
}catch(IllegalAccessExceptione){
e.printStackTrace();
}
user1.setName("终结者");
user1.setAge(1500);
System.out.println("user1:"+user1.toString());
Useruser2=null;
try{
//获取构造函数
Constructorconstroctor=clazz2.getConstructor(String.class,Integer.class);
//通过构造器对象的newInstance方法进行对象的初始化
user2=(User)constroctor.newInstance("龙哥",29);
}catch(Exceptione){
e.printStackTrace();
}
System.out.println("user2:"+user2.toString());
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。
热门推荐
10 对患者生日祝福语简短
11 结婚祝福语简短装备
12 周岁祝福语学生文案简短
13 订婚领证祝福语简短精辟
14 导师获奖祝福语大全简短
15 新婚购房祝福语简短精辟
16 牛年祝福语简短的爱人
17 送芒果的祝福语简短
18 送给学长毕业祝福语简短