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类的使用)的主要内容,如果未能解决你的问题,请参考以下文章

Java反射机制(Class类的使用)

Java反射机制demo—获取一个类的父类和实现的接口

java 中反射机制和内省机制的区别是啥?

Java讲课笔记36:初探反射机制

Java反射机制

反射机制