黑马程序员-----类加载器、内省学习日志,黑马-----
黑马程序员-----类加载器、内省学习日志,黑马-----
---------------------- android培训、java培训、期待与您交流! ----------------------
类加载器
类加载器(class loader)用来加载Java 类到Java 虚拟机中。一般来说,Java 虚拟机使用 Java 类的方式如下:
Java 源程序(.java 文件)在经过Java 编译器编译之后就被转换成Java 字节代码(.class 文件)。类加载器负责读取 Java 字节代码,并转换成java.lang.Class类的一个实例。每个这样的实例用来表示一个Java 类。通过此实例的newInstance()
方法就可以创建出该类的一个对象。
应用:类可以加载.class文件进内存,自然也可以加载其他的文件
文件路径:...cn/itcast/day1/config.prope
普通方法: InputStream ips = new FileInputStream("config.properties");
用类加载器进行加载: InputStream ips = ReflectTest2.class.getClassLoader().getResourceAsStream("cn/itcast/day1/config.properties");
使用相对路径,便于其他电脑加载:InputStream ips = ReflectTest2.class.getResourceAsStream("resources/config.properties");
绝对路径:InputStream ips = ReflectTest2.class.getResourceAsStream("/cn/itcast/day1/resources/config.properties");
整个过程是用对象类ReflectTest2.class搞到它的类加载器getClassLoader()再加载资源。
内省
JavaBean是通过反射机制来完成的,javabean是一个特殊的java类。在javabean中,去掉get或set方法中的get或set后就可以得到其属性名,但其字母的大小写是有规定的,去掉get或set后,若第二个字母是小写的,则第一个字母也应小写;若都是大写的(不包括仅一个字母的情况,一个字母时为小写),则不变。
写JavaBean和写普通的类的目的是一样的,都是为了实例化该类的对象,然后利用这个对象,就可以使用这个类了。
JavaBean和普通的类区别如下:
javabean是一个特殊的java类,这个类中的方法的名称符合约定的规则,例如,有getXxx和setXxx方法,javabean的属性名称,是通过其get和set方法得知的,而不能直接通过其属性得知(javabean的属性为private的)。
class Person
{
private int x;
public int getAge0
{
return x;
}
public void setAge(int age)
{
this.x=age;
}
}
Person person= new Person();
String propertyName = "age"; //得到属性名称
1、使用 PropertyDescriptor 的 getReadMethod 方法获得只读方法
PropertyDescriptor pd = newPropertyDescriptor(propertyName,person.getClass());
Method methodGetAge =pd.getReadMethod();
Object retVal =methodGetAge.invoke(person); //得到的属性值不明类型,所以使用Object
2、使用 PropertyDescriptor 的 getWriteMethod方法获得只写方法
PropertyDescriptor pd = newPropertyDescriptor(propertyName,person.getClass());
Method methodSetAge = pd.getWriteMethod();
methodSetAge.invoke(person,20); //设置属性值
Eclipse 可协助重构、抽取方法
----------------------android培训、java培训、期待与您交流! ----------------------
相关文章
- 暂无相关文章
用户点评