回忆(一):反射中获得class对象的三种方法

package reflex;

/*
 * 反射:就是通过class文件对象 去使用该文件中的成员
 * 变量,构造方法,成员方法。
 * 
 * Person p = new Person(); p.使用
 * 
 * 要想这样使用,首先必须得到class文件对象,其实也 
 * 就是得到Class类的对象。 
 * Class类: 
 * 		成员变量 Field 
 * 		构造方法 Construtor
 * 		成员方法 Method
 * 
 * @author mzy
 * 
 * 获取class类的对象的方式:
 * 		A:Object类的getClass()方法
 * 		B:数据类型的静态class
 * 		C:Class类中的静态方法
 * 			public static Class<?> forName(String className)
 * 
 * 
 * 我们写的话:
 * 		获得Class对象,三种都可以;第二种最方便
 * 
 * 开发:
 * 		第三种最好:因为第三种是一个字符串,
 * 		而不是一个具体的类名,这样我们就可
 * 		以把这样的字符串配置到配置文件中。
 * 			
 * 		
 * 		
 *
 */
public class ReflectDemo01_visit_three_methods {
	public static void main(String[] args) throws ClassNotFoundException {
		// 获得Class的方法(感叹号问题为泛型)
		// 方式1:
		Person p = new Person();
		Class c = p.getClass();

		Person p2 = new Person();
		Class c2 = p2.getClass();

		System.out.println(p == p2); // false
		System.out.println(c == c2); // true

		// 方式2: 通过类名直接获得class对象
		Class c3 = Person.class;
		// 所有的数据类型都有它的class对象
		// int.class;
		// String.class;
		System.out.println(c == c3); // true

		// 方式3:
		/*
		 * 抛出ClassNotFoundException

6+	 * 找不到
		 * 以后涉及到通过类的名称来找的
		 * 一定要写全路径(带包名的全路径)
		 * Class c4 = Class.forName("Perosn");
		 * 
		 * 
		 * 打开.java文件上的箭头,右键点 Copy Qualified Name
		 */
		Class c4 = Class.forName("reflex.Person");
		System.out.println(c == c4); // true
	}
}

其中的person类:

package reflex;

public class Person {
	// 成员变量
	private String name;
	int age;
	public String address;

	// 构造方法
	public Person() {
	}

	Person(String name, int age) {
		this.name = name;
		this.age = age;
	}
	private Person(String name) {
		this.name = name;
	}
	public Person(String name, int age, String address) {
		this.name = name;
		this.age = age;
		this.address = address;
	}

	// 成员方法
	public void show() {
		System.out.println("show");
	}

	public void method(String s) {
		System.out.println("method" + s);
	}

	public String getString(String s, int i) {
		return s + "---" + i;
	}

	@Override
	public String toString() {
		return "Person [name=" + name + ", age=" + age + ", address=" + address + "]";
	}

	private void function() {
		System.out.println("function");
	}

}

猜你喜欢

转载自blog.csdn.net/qq_36791569/article/details/80343600