java基础学习日志20

反射、、练习

myproperties.propertise
file文件
mykey=myValue
name=java
address=\u5317\u4EAC


仿制昨上个



public class Student extends person implements InterfaceDemo {

	public String name = null;
	private int age = 0;
	public String address = null;
	String schoolname;
	protected Long time;

	public Student() {
		// TODO Auto-generated constructor stub
	}

	private Student(String name, int age, String address) {

		this.name = name;
		this.age = age;
		this.address = address;
	}

	public Student(String name, int age) {

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

	public String getSchoolname() {
		return schoolname;
	}

	public void setSchoolname(String schoolname) {
		this.schoolname = schoolname;
	}

	public Long getTime() {
		return time;
	}

	public void setTime(Long time) {
		this.time = time;
	}

	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 String getAddress() {
		return address;
	}

	public void setAddress(String address) {
		this.address = address;
	}

	public void run(String str) {
		System.out.println("this is run");
	}

	public void sleep(long time) {
		this.time = time;
	}

}

Test



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

public class classtest {

	public static void main(String[] args) {
		// 三种获取类名的方式
		Class className = Student.class;

		System.out.println(className.getName());
		System.out.println(className.getSimpleName());
		System.out.println(className.getCanonicalName());
		System.out.println("1---------------------------------");

//		Student className1 = new Student("俊成", 23, "甘肃");
//		Class cn = className1.getClass();
//		System.out.println(cn.getName());
//		System.out.println(cn.getSimpleName());
//		System.out.println(cn.getCanonicalName());
//		System.out.println("2---------------------------------");
//
//		try {
//			Class className2 = Class.forName("com.hisoft.reflect.Student");
//		} catch (ClassNotFoundException e) {
//			e.printStackTrace();
//		}
//		System.out.println(cn.getName());
//		System.out.println(cn.getSimpleName());
//		System.out.println(cn.getCanonicalName());
//		System.out.println("3---------------------------------");

		// 获取父类
		Class sperClass = Student.class.getSuperclass();
		System.out.println(sperClass.getName());

		// 获取对应接口Class对象
		Class<?>[] interfaceClass = Student.class.getInterfaces();
		System.out.println(interfaceClass[0].getName());
		System.out.println("4---------------------------------");

		// 获取方法
		Method[] stumet = Student.class.getDeclaredMethods();
		System.out.println(stumet[0].getName() + "\t" + stumet[0].getAnnotations());// 获取注释
		Method[] studen = Student.class.getMethods();
		// for(Method stu:studen){
		// System.out.println(stu.getName()+"\t"+stu.getReturnType()+"\t"+stu.getParameters()[0].getType());//获取的是没有参数的方法
		// }
		System.out.println("5----------------------------------");

		// 获取当前类自己定义属性,包括所有的权限修饰符
		Field[] f1 = Student.class.getDeclaredFields();
		for (Field f : f1) {
			System.out.println(f.getName() + "\t" + f.getType() + "\t" + f.getModifiers());
		}
		System.out.println("6----------------------------------");

		// 取得所有public的属性,包括继承的,接口中的和自己定义的
		Field[] f2 = Student.class.getFields();
		for (Field f : f2) {
			System.out.println(f.getName() + "\t" + f.getType() + "\t" + f.getModifiers());
		}
		System.out.println("7----------------------------------");

		// 用lass对象创建类的对象
		try {
			Class c = Class.forName("com.hisoft.reflect.Student");
			Student stu2 = (Student) c.newInstance();
			stu2.setName("俊成");
			System.out.println(stu2.getName());
		} catch (Exception e) {
			e.printStackTrace();
		}
		System.out.println("8----------------------------------");

		//
		Student stu3 = new Student();
		Field namefie;
		Field agefie;
		Field addressfie;
		try {
			Class c = Class.forName("com.hisoft.reflect.Student");
			stu3 = (Student) c.newInstance();
			stu3 = (Student) c.newInstance();
			stu3 = (Student) c.newInstance();
			namefie = c.getField("name");
			agefie = c.getDeclaredField("age");
			// 只可以操作私有的
			agefie.setAccessible(true);
			addressfie = c.getField("address");
			namefie.set(stu3, "嗷呦呦");
			agefie.set(stu3, 53);
			addressfie.set(stu3, "嗷aa");
			System.out.println(stu3.getName());
			System.out.println(stu3.getAge());
			System.out.println(stu3.getAddress());
		} catch (Exception e) {
			e.printStackTrace();
		}
		System.out.println("9----------------------------------");

		// 反射获取访问权限
		Field[] n = getPrivateField("com.hisoft.reflect.Student", "protected");
		for (Field f : n) {
			System.out.println(f.getName());
		}
		System.out.println("10----------------------------------");

		// 获取方法
		try {
			Class d = Class.forName("com.hisoft.reflect.Student");
			Student stu4 = new Student();
			Method m = d.getDeclaredMethod("run", String.class);
			m.invoke(stu4, "run");
			System.out.println(m.getName());
		} catch (Exception e) {
			e.printStackTrace();
		}
		System.out.println("10----------------------------------");

		try {
			Class c = Class.forName("com.hisoft.reflect.Student");
			Student stu5 = (Student) c.newInstance();
			Constructor[] con = c.getDeclaredConstructors();
			for (Constructor cw : con) {
				System.out.println(cw.getName());
			}
			Constructor c1 = c.getDeclaredConstructor(String.class, int.class, String.class);
			c1.setAccessible(true);
			Student stu6 = (Student) c1.newInstance("苏州", 34, "江苏");
			System.out.println(stu6.getName() + "\t" + stu6.getAge() + "\t" + stu6.getAddress());

			Constructor c2 = c.getConstructor(String.class, int.class);
			Student stu7 = (Student) c2.newInstance("盖伦", 234);
			System.out.println(stu7.getName() + "\t" + stu7.getAge());
			
			
		} catch (Exception e) {
			e.printStackTrace();
		}
		System.out.println("11----------------------------------");

	}

	public static Field[] getPrivateField(String className, String quxiang) {
		int qx = 0;
		switch (quxiang) {
		case "public":
			qx = 1;
			break;
		case "private":
			qx = 2;
			break;
		case "protected":
			qx = 4;
			break;
		default:
			qx = 0;
			break;
		}
		Field[] f = null;
		try {
			Class c = Class.forName(className);
			Field f1[] = c.getDeclaredFields();
			int x = 0;
			for (int i = 0; i < f1.length; i++) {
				if (f1[i].getModifiers() == qx) {
					x++;
				}
			}
			f = new Field[x];
			int j = 0;
			for (int i = 0; i < f1.length; i++) {
				if (f1[i].getModifiers() == qx) {
					f[j] = f1[i];
					f[j].setAccessible(true);
					j++;
				}
			}
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
		return f;

	}

}


评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值