Java反射机制:
在java语言中,通过反射机制可以操作字节码文件;(可以直接修改/读取字节码文件)
反射机制在java.lang.reflect.*包下;
反射机制重要的相关类:
Java.lang.class; 代表整个字节码,代表一个类型;
Java.lang.reflect.Method; 代表字节码中的方法字节码;
Java.lang.reflect.Constructor; 代表字节码中的构造方法字节码;
Java.lang.reflect.Field; 代表字节码中的属性字节码;
如何获取一个类的字节码?(三种方式)
字节码文件在装载JVM的时候,只装载一份;
第一种:Class.forName();是一个静态方法,可以获取一个类的字节码,括号中传入的是一个字符串类型的完整类名(类名必须带有包名),
例如:Class.forName(“java.lang.String”);
第二种:getClass();该方法是java中任何一个对象都有的方法;调用时,对象.getClass()即可;
第三种:class属性;在java语言中,任何一个类型,包括基本数据类型都有点class属性;例如:String.class\Integer.class;等;
使用反射机制更具有灵活性;
如果想执行一个类的静态代码块,直接调用Class.forName(“”)即可自动执行静态代码块;
任何获取一个文件的绝对路径?
Thread.CurrentThread().getContextClassLoader().getResource(“文件名”).getPath();
以上方法可以获取一个文件的绝对路径;
该方法是相当通用的,因为只要获取的文件在src类的路径下,都可以;
以流的形式返回一个路径:
InputStream in=Thread.currentThread().getContextClassLoader.getResourceAsStream(“文件路径名”);
资源绑定器:
在java.util包下提供了一个资源绑定器,便于获取属性配置文件中的内容,
但该种方式,配置文件xxx.properties文件必须是放在类路径下的,文件也是必须以properties结尾的;
语法:ResourceBundle rb=ResourceBundle.getBundle(“配置属性文件名”);(配置属性名不包括.properties后缀)
可变长参数:
在方法的括号中类型后面加上3个点即可;
语法:public void fun(int… id){}
这个写法,在调用时,可以不写参数,亦可以写多个参数,没有限制;但类型需要统一,而且可变长参数在括号中只能出现在最后,且只能出现一个;

浙公网安备 33010602011771号