JAVA高级基础(55)---通过Class对象获取类的构造方法并创建对象及获取普通方法并执行方法

版权声明:如需转载请标明出处 https://blog.csdn.net/yj201711/article/details/84976269

获取类的信息
             从访问权限来分
                                       private
                                       public        
            信息的本质
                                       属性
                                      构造方法
                                                           //获取该类的无参构造器
                                                          Constructor<?> c = clazz.getConstructor();    
                                                          //创建对象
                                                          c2.newInstance();
                                                          创建出来的对象是使用默认值进行初始化对象的
                                                          //获取带参构造器
                                                          Constructor<?> c2 = clazz.getConstructor(String.class,int.class);
                                                          //创建对象
                                                          c2.newInstance("张三",22);
                                                         使用newInstance时传入的实参进行初始化对象    
                                     普通方法
                                                         Method[] methods = clazz.getMethods();
                                                        返回本类所有的public的方法以及从父类继承而来的方法

package org.lanqiao.classdemo;

public class Student {
	private String name;
	private int age;
	public Student() {
	}
	public Student(String name, int age) {
		this.name = name;
		this.age = age;
	}
	private Student(String name) {
		this.name = name;
		
	}
	public String getName() {
		//System.out.println(this.name);
		return name;
		
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	@Override
	public String toString() {
		return "Stduent [name=" + name + ", age=" + age + "]";
	}
	private void showInfo() {
		
		
	}
	
	
}
package org.lanqiao.classdemo;

public class TestClass {
	public static void main(String[] args) throws ClassNotFoundException {
		//获取Student类的Class对象
		Class<?> clazz = Class.forName("org.lanqiao.classdemo.Student");
		System.out.println(clazz);
		// 通过Object类的一个方法getClass来获取Class对象
		Student  stu  = new Student();
		Class<?> clazz1 = stu.getClass();
		System.out.println(clazz1);
		//通过使用类的属性class属性类获取该类的Class对象
		Class<?> clazz2 = Student.class;
		System.out.println(clazz2);
		//获取该类的类加载器
		ClassLoader cl = clazz.getClassLoader();
		System.out.println(cl);
	}
}
package org.lanqiao.classdemo;

import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

/*
 * 通过Class对象来获取类的信息
 */
public class GetClassInfo {
	public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, SecurityException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
		// 获取类的构造方法
		Class<?>  clazz = Class.forName("org.lanqiao.classdemo.Student");
		/*获取该Class对象中的所有的public构造方法*/
		 /*Constructor<?>[]  cs =  clazz.getConstructors();
		for(Constructor c :cs) {
			System.out.println(c);
			
		}*/
		//获取该类的无参构造器
		Constructor<?> c = clazz.getConstructor();
		System.out.println(c);
		Student stu = (Student) c.newInstance();
		System.out.println(stu);
		//获取带参构造器
		Constructor<?> c2 = clazz.getConstructor(String.class,int.class);
		Student stu2 = (Student) c2.newInstance("张三",22);
		System.out.println(stu2);
		System.out.println("----------获取所有的方法---------");
		//获取该类的方法
		Method[] methods = clazz.getMethods();
		for(Method m:methods) {
			System.out.println(m);
			
		}
		System.out.println("--------获取特定的无参方法-----------");
		Method m = clazz.getMethod("getName");
		System.out.println(m);
		String name = (String) m.invoke(stu2);
		System.out.println(name);
		System.out.println("--------获取特定的带参方法-----------");
		Method mm = clazz.getMethod("setName", String.class);
		//执行方法
		mm.invoke(stu2, "李四");
		System.out.println(stu2);
	}
}

 

 

猜你喜欢

转载自blog.csdn.net/yj201711/article/details/84976269
今日推荐