反射
java按照万物皆对象的原则,将复杂的事物都封装成了对象。如:字节码文件封装了Class对象。将类中的成员封装成了Field对象。类中的方法封装成了Method对象。类中的构造函数封装成了Constructor对象。
Class类中的这些方法可以获取到或者访问到指定一个字节码文件中的任意成员。
其实对类的解剖。反射技术其实代码体现依赖与Class与java.lang.reflect包中的对象。
Class:
//获取自定义类的Class对象:
//一、 Person p=new Person(); Class c=p.getClass(); //二、 Class c=Person.class; //三、将类名作为字符串传递给Class类中的static方法forName即可。其他俩种方式必须要明确具体的数据类型。而这种方式只需要将类的名称作为字符串传递即可。forName()会自动查找该类并进行加载和封装。并返回该类的Class对象。 //注:传入的字符串类名必须是全类名(带包名) Class c=Class.forName("packageName.person");
//获取指定类的方法:java.lang.reflect Class c=Person.class; Method[] methods=c.getMethods();//getMethods();获取的是共有的方法 methods=c.getDeclaredMethods();//获取本类中所有的方法。包含私有 Method method=c.getMethod("方法名称",参数(无参传null));//获取单个方法 Object obj=c.newInstance();//通过Class对象的newInstance()获取指定类的一个实例 method.invoke(obj,参数);//invoke()运行指定方法 method=c.getDeclaredMethods("方法名称",参数(无参传null));//获取并访问单个私有的方法 //因为私有,不可以直接访问,但可以通过其父类的方法来改变其访问权限 method.setAccessible(true);//实现暴力访问。 Object obj=c.newInstance(); method.invoke(obj,参数);
//指定类的构造函数: Object obj=c.newInstance();//创建指定类的一个实例,并调用当前指定类的一个空参数的构造函数进行初始化。 Constructor constructor=c.getConstructor(String.class,int.class);//获取指定的构造函数,并通过该构造函数对象进行对象的初始化 Object obj=Constructor.newInstance("值",值);
GET和POST区别:
1、get:会将提交的信息显示在地址栏中。post:不会将提交的敏感信息显示在地址栏中。
2、get:对于敏感信息不安全。post:敏感信息安全
3、get:地址栏中信息的数据量有限,所以不能提交大数据。post:可以提交大数据。
4、get:将信息封装在请求行,也就是http请求信息头之前。post:会将信息封装到请求体,也就是http请求信息头之后,请求体和请求头之间是通过空行分隔的。