获取字节码文件对象的三种方式(反射机制)

1.写一个Person类,用于测试,如下

package com.bean;


public class ReflectDemo {
	public static void main(String[] args) {
		getClassObject_3();
	}


	/*
	 * 获取字节码方式一:通过Object类中的getClass()方法 此方式必须要明确具体的类, 并且需要创建对象
	 */
	public static void getClassObject_1() {
		Person p = new Person();
		Class classP = p.getClass();


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


		System.out.println(classP == classP2);
	}


	/*
	 * 方式二:任何数据类型,都具备一个静态的属性 .class来获取其对应的Class对象 还是需要明确用到类中的静态成员
	 */
	public static void getClassObject_2() {


		Class classP = Person.class;
		Class classP2 = Person.class;


		System.out.println(classP == classP2);
	}


	/*
	 * 方式三:只要通过给定的类的字符串名称就可以获取该类 可用Class 类的方法完成 forName(); 需要把类名写全,写上包名
	 */


	public static void getClassObject_3() {


		Class classP = null;
		Class classP2 = null;
		String className = "com.bean.Person";
		try {
			classP = Class.forName(className);
			classP2 = Class.forName(className);
		} catch (ClassNotFoundException e) {
			System.out.println("此类不存在");
			e.printStackTrace();
		}


		System.out.println(classP == classP2);
	}
}
public class Person {
	private int age;
	private String name;

	public Person() {
		System.out.println("Person run");
	}

	public Person(int age, String name) {

		this.age = age;
		this.name = name;

		System.out.println("Person param run");
	}

	public void show() {
		System.out.println(name + "……show run....");
	}

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

	public void paramMethod(String str, int num) {
		System.out.println("paramMethod run....." + str + ":" + num);
	}

	public static void staticMethod() {
		System.out.println("staticMethod ....run.....");
	}
}
2.获取一个类的字节码文件对象,如下

package com.bean;

public class ReflectDemo {
	public static void main(String[] args) {
		getClassObject_3();
	}

	/*
	 * 获取字节码方式一:通过Object类中的getClass()方法 此方式必须要明确具体的类, 并且需要创建对象
	 */
	public static void getClassObject_1() {
		Person p = new Person();
		Class classP = p.getClass();

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

		System.out.println(classP == classP2);
	}

	/*
	 * 方式二:任何数据类型,都具备一个静态的属性 .class来获取其对应的Class对象 还是需要明确用到类中的静态成员
	 */
	public static void getClassObject_2() {

		Class classP = Person.class;
		Class classP2 = Person.class;

		System.out.println(classP == classP2);
	}

	/*
	 * 方式三:只要通过给定的类的字符串名称就可以获取该类 可用Class 类的方法完成 forName(); 需要把类名写全,写上包名
	 */

	public static void getClassObject_3() {

		Class classP = null;
		Class classP2 = null;
		String className = "com.bean.Person";
		try {
			classP = Class.forName(className);
			classP2 = Class.forName(className);
		} catch (ClassNotFoundException e) {
			System.out.println("此类不存在");
			e.printStackTrace();
		}

		System.out.println(classP == classP2);
	}
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值