通过反射实例化SUser对象。
public static void main(String[] args) { Class<?> c = null; try{ c = Class.forName("com.wjl.reflect.SUser");//实例化class SUser user = null; user = (SUser)c.newInstance();//实例化SUser类 // (要求SUser类必须有无参构造方法,否则报错:java.lang.InstantiationException //因为newInstance()方法调用的是SUser类的无参构造方法进行的实例化 ) user.setUserName("admin"); user.setPassWord("123456"); System.out.println(user);//默认调用toString方法 }catch(Exception e){ e.printStackTrace(); } }
以上方法有一个问题:SUser对象必须有无参构造方法,若是没有则会报错 ,解决方法有俩:一个是为SUser明确指定无参构造方法,二是通过Class实例化SUser对象时指定构造方法。
指定构造方法测试代码如下:
public static void main(String[] args){ Class<?> c = null; try{ c = Class.forName("com.wjl.reflect.SUser");//实例化class //获取class所在类的所有构造方法 Constructor<?> con[] = null; con = c.getConstructors();//获取SUser类中的所有构造方法 for(int i=0;i<con.length;i++){ System.out.println(con[i]); //SUser类中定义了三个构造方法,输出结果依次为: /* public com.wjl.reflect.SUser(java.lang.String) public com.wjl.reflect.SUser(java.lang.String,java.lang.String) public com.wjl.reflect.SUser() */ } SUser user = null; SUser user2 = null; SUser user3 = null; user = (SUser)con[0].newInstance("admin");//带一个参数 user2 = (SUser)con[1].newInstance("admin","123456");//带两个参数 user3 = (SUser)con[2].newInstance();//没有参数 //以上三个构造方法分别实例化SUser时不能弄错,即con的下标与各个构造方法的顺序得一致,否则报错: // java.lang.IllegalArgumentException: wrong number of arguments System.out.println(user); System.out.println(user2); System.out.println(user3); /*结果: 用户名:admin,密码:null 用户名:admin,密码:123456 用户名:null,密码:null */ }catch(Exception e){ e.printStackTrace(); } }
通过getConstructors方法获取SUser的所有构造方法,再根据参数情况和返回的构造方法数组的顺序依次进行实例化。如代码中所说,这里有一个注意的地方, 即:con的下标与各个构造方法的顺序得一致。
con数组的第一个构造方法为:public com.wjl.reflect.SUser(java.lang.String),即带一个参数的构造方法,那么newInstance时就必须使用con[0]的构造方法且带有一个参数,若是使用con[1](带2个参数)就必须带两个参数,否则就会报错。
自己拼接构造方法格式:
public static void main(String[] args) { try{ Class c = Class.forName("com.wjl.reflect.Person"); Constructor<?> con[] = c.getConstructors(); for(int i=0;i<con.length;i++){ System.out.println("系统:"+con[i]); System.out.print("自定义:"); getConstructorInfo(con[i]); } }catch(Exception e){ e.printStackTrace(); } } //自己拼接构造方法 public static void getConstructorInfo(Constructor con){ System.out.print(Modifier.toString(con.getModifiers())+" ");//修饰符 System.out.print(con.getName());//类名称 System.out.print("("); //获取参数类型 Class<?> p[] = con.getParameterTypes(); for(int j=0;j<p.length;j++){ System.out.print(p[j].getName()); if(j<p.length-1){ System.out.print(","); } } System.out.print(")"+"\n"); }
相关推荐
通过`Class`对象的`newInstance()`方法可以实例化无参构造器的类;如果有参数的构造器,我们需要使用`getDeclaredConstructor()`或`getConstructor()`来获取指定的构造器,然后调用`newInstance()`传递参数。 4. **...
Java反射机制是Java编程语言中的一个强大特性,...通过学习和实践Java反射机制,你可以更深入地理解Java的运行机制,并在需要动态性、灵活性的场景中发挥其强大的功能。不过,使用反射时也应注意潜在的风险和性能影响。
总的来说,"JAVA反射机制的入门代码"是初学者理解Java反射机制的好教材,通过它,你可以学习如何动态地操作Java类,提高代码的灵活性,并掌握处理`properties`文件的基础方法。在深入学习和实践中,你将进一步理解...
Java反射机制是Java编程语言中一个强大的工具,它允许程序在运行时动态地获取类的信息并操作类的对象。反射机制的核心在于java.lang.reflect包中的API,主要包括Class类、Constructor类、Method类和Field类。以下是...
5. **枚举的构造函数**:枚举类默认是final且私有的,所以不能通过常规方式实例化新的枚举值。但反射可以访问私有构造函数,尽管不推荐这样做,因为这违反了枚举的设计原则。 在"test-enum-demo-master"项目中,...
Java 反射机制是 Java 语言提供的一种强大的工具,它允许程序在运行时动态地获取类的信息(如类名、属性、方法等)并进行操作。这种能力使得 Java 应用程序更加灵活,能够在运行时发现和修改自身的行为。然而,反射...
Java反射机制是Java编程语言中的一项核心特性,它允许程序在运行时动态地获取类的信息并进行操作。这使得Java能够在编译后仍然能够灵活地处理类和对象,增强了代码的动态性。在Android应用开发中,反射机制尤其重要...
总结来说,Java反射机制是Java语言的一个重要特性,它使得程序能够在运行时动态地获取类的信息并进行操作,提高了代码的通用性和适应性。在实际开发中,反射机制常用于框架设计、插件系统、数据持久化等领域,但同时...
Java反射机制是Java编程语言中的一个强大特性,它允许程序在运行时检查和操作类、接口、字段和方法等对象。这一机制对于理解和利用Java的动态性至关重要,尤其是在进行复杂系统设计、框架开发以及元数据驱动的应用中...
- 对象实例化:通过Class对象的newInstance()方法或Constructor对象的newInstance()方法创建对象。 - 访问类成员:获取Field、Method和Constructor对象,进而访问类的字段、调用方法或构造函数。 2. **Field类** ...
Java反射机制是Java编程语言中的一个重要特性,它允许程序在运行时动态地获取类的信息并进行操作。通过反射,开发者可以在程序执行时发现并访问类的字段(fields)、方法(methods)以及构造器(constructors),...
Java反射机制是Java编程语言中的一个重要特性,它允许程序在运行时动态地获取类的信息并操作类的对象。这种机制使得Java具有高度的灵活性和动态性,可以在编译时未知类的情况下进行类的加载、实例化、方法调用等操作...
在上述的示例中,`Util` 类的 `convertStr2ServiceBean` 方法展示了如何通过反射来创建对象并调用其方法。首先,`Class.forName()` 用于根据字符串 `beanName` 加载对应的类,这里可能是 `Son1` 或 `Son2`。然后,`...
### Java反射机制详解 #### 一、反射机制是什么 反射机制是Java编程语言的一个核心特性,它允许程序在运行时动态地获取类的信息,并且能够动态地创建对象和调用对象的方法。简单来说,反射机制使得Java程序可以...
Java反射机制是Java编程语言中的一个强大特性,它允许程序在运行时检查和操作类、接口、字段以及方法等对象。这一机制的核心在于`java.lang.Class`类和相关的API,它们提供了对类元数据的访问,使得我们能够在运行时...
这里使用了`getConstructor`方法来获取指定参数类型的构造方法,并通过`newInstance`方法来实例化一个新的`Student`对象。 #### 四、总结 Java反射机制为开发者提供了强大的动态操作能力,但同时也带来了性能开销...
首先,获取`Person`的`Class`对象,然后通过`getDeclaredMethod()`获取`setName`方法,接着使用`invoke()`设置姓名,最后通过`newInstance()`创建对象并调用`getName()`获取姓名。 通过以上介绍,我们了解了Java...