1.读取配置文件常见方法
public class Test {
public static void main(String[] args) throws Exception {
//获取properties的绝对路劲,一定要把配置文件放在类路径下面
String path = Thread.currentThread().getContextClassLoader()
.getResource("classinfo.properties").getPath();
FileReader reader = new FileReader(path);
Properties pro = new Properties();
pro.load(reader);
reader.close();
String className = pro.getProperty("className");
System.out.println(className);
//---------------------------------------------------------------------------------------------
//上面获取配置文件的绝对路径比较麻烦,可以使用java.util.包下提供的资源绑定器,ResourceBundle
//配置文件必须在类路径下面,而且必须是.properties结尾的文件才可以
ResourceBundle bundle = ResourceBundle.getBundle("classinfo");
String name = bundle.getString("className");
System.out.println(className);
}
}
2.类加载器简单概述
1,启动类加载器:rt.jar(java的核心类库)
2,扩展类加载器:ext目录
3,应用类加载器:classpath路径下面
4,执行顺序:1->2->3
5,双亲委派机制:自己写的String永远不会执行,因为首先会使用启动类加载器,增加安全
3,Field(反射对象的属性)
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
public class Test {
public static void main(String[] args) throws Exception {
Class student = Class.forName("java.lang.String");
StringBuilder buffer = new StringBuilder();
buffer.append(Modifier.toString(student.getModifiers()) + "class" + student.getSimpleName()+ "{\n");
Field[] fields = student.getDeclaredFields();
for(Field fs:fields){
buffer.append("\t");
buffer.append(Modifier.toString(fs.getModifiers()));
buffer.append(" ");
buffer.append(fs.getType().getSimpleName());
buffer.append(" ");
buffer.append(fs.getName());
buffer.append(";\n");
}
buffer.append("}");
System.out.println(buffer);
}
}
4,对象属性赋值
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
public class Test {
public static void main(String[] args) throws Exception {
Class stu = Class.forName("com.luoyi.Student");
Object o = stu.newInstance();
Field field = stu.getDeclaredField("name");
field.setAccessible(true);
field.set(o,"ly");
System.out.println(field.get(o));
}
}
5,Method
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
public class Test {
public static void main(String[] args) throws Exception {
Class stu = Class.forName("com.luoyi.Student");
Method[] methods = stu.getMethods();
for(Method method:methods){
//获取修饰符列表
System.out.println(Modifier.toString(method.getModifiers()));
//获取返回值
System.out.println(method.getReturnType().getSimpleName());
//获取方法名
System.out.println(method.getName());
//获取参数列表
Class[] parameterTypes = method.getParameterTypes();
for(Class para: parameterTypes){
System.out.println(para.getSimpleName());
}
}
}
}
6,调用方法
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
public class Test {
public static void main(String[] args) throws Exception {
Class stu = Class.forName("com.luoyi.Student");
Object o = stu.newInstance();
Method method = stu.getDeclaredMethod("login",String.class,String.class);
//四要素
//1,调用方法
//2,object对象
//3,实参
//返回值
method.setAccessible(true);
Object retValue = method.invoke(o,"admin","123");
System.out.println(retValue);
}
}
7,反射Construct<T>
Constructor[] constructors = stu.getDeclaredConstructors();
8,调用构造函数
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
public class Test {
public static void main(String[] args) throws Exception {
Class stu = Class.forName("com.luoyi.Student");
Constructor con = stu.getConstructor(String.class);
Object o = con.newInstance("success");
}
}
9,获取父类和父类接口
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
public class Test {
public static void main(String[] args) throws Exception {
Class stu = Class.forName("java.lang.String");
//获取父类
Class superClass = stu.getSuperclass();
System.out.println(superClass.getName());
Class[] interfaces = stu.getInterfaces();
for(Class inter:interfaces){
System.out.println(inter.getName());
}
}
}