Java反射机制(Class类的使用)
Posted 新梦想
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java反射机制(Class类的使用)相关的知识,希望对你有一定的参考价值。
1:通过无参构造实例化对象 package cn.itcast; /* * 通过无参构造实例化对象 * 通过Class类本身实例化对象,使用newInstance方法 * 需要注意的是:实例化类中存在一个无参构造的方法,如果不存在将无法实例化Person对象; * 如果没有则报异常:InstantionException * */ public class ClassDemo03 { public static void main(String[] args) { //创建Class对象 Class class1 = null; try { class1=Class. forName("cn.itcast.Person"); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } //声明Person对象 Person p1 = null; //实例化Person对象 try { p1 = (Person) class1.newInstance(); } catch (InstantiationException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } System. out.println(p1); p1.setName("小李"); p1.setAge(20); p1.setSex(‘男‘); System. out.println(p1); } } 打印结果: Person [name=null, age=0,sex= ] Person [name=小李, age=20, sex=男]
2:通过有参构造实例化对象 如果实例化类中确实没有无参构造,就需要明确地调用类中的构造方法,将参数传递进去之后就可以才可以实例化操作; public final class Constructor<T> extends AccessibleObject implements GenericDeclaration, Member 操作步骤: 1:获取要实例化类的带参构造 Constructor<?> c2 = class1.getConstructor(String. class,int.class, char.class); //获取全部的构造方法 Constructor[] c1 = class1.getConstructors(); for (Constructor getCon : c1) { //输出的全是public方法 System. out.println(getCon); } 打印: public cn.itcast.Person() public cn.itcast.Person(java.lang.String,int,char) 2:通过c1=newInstance(),实例化对象 代码展示: package cn.itcast; import java.lang.reflect.Constructor; public class ClassDemo04 { public static void main(String[] args) { //创建Class对象 Class<?> class1 = null; try { class1=Class. forName("cn.itcast.Person"); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } //声明Person对象 Person p1 = null; //获取全部的构造方法 Constructor[] c1 = class1.getConstructors(); for (Constructor getCon : c1) { //输出的全是public方法 System. out.println(getCon); // System.out.println(getCon.getName()); // System.out.println(getCon.getParameterTypes()); // System.out.println(getCon.getModifiers()); } try{ //获取Person类中的带参构造 Constructor<?> c2 = class1.getConstructor(String.class ,int.class, char.class ); p1 = (Person) c2. newInstance("小张",24, ‘男‘); } catch(Exception e){ e.printStackTrace(); } System. out.println(p1); } }
package cn.itcast; public class Person { private String name; private int age; private char sex; public Person() { super(); } public Person(String name, int age, char sex) { super(); this.name = name; this.age = age; this.sex = sex; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public char getSex() { return sex; } public void setSex(char sex) { this.sex = sex; } public void eat() { System.out.println("吃了"); } @Override public String toString() { return "Person [name=" + name + ", age=" + age + ", sex=" + sex + "]"; } }
以上是关于Java反射机制(Class类的使用)的主要内容,如果未能解决你的问题,请参考以下文章