java反射1
一.Class部分
加載類的幾種方式
// 1.
Class clazz = Class.forName("com.wzh.test.reflect.Person");
// 2.
Class clazz1 = new Person().getClass();
// 3.
Class clazz2 = Person.class;
// 4.
ClassLoader cl = ClassLoader.getSystemClassLoader();
Class clazz3 = cl.loadClass("com.wzh.test.reflect.Person");
?
獲取加載器
ClassLoader cl = ClassLoader.getSystemClassLoader();
?Class c = cl.loadClass("com.wzh.test.Student");
?System.out.println(c);
?System.out.println(c.getName());
// //SSH的配置文件都是放在src(classpath)
// InputStream is= ClassLoader.getSystemResourceAsStream("user.properties");
// System.out.println(is);
//獲取類對象
Class myc=Class.forName("com.wzh.test.Student");
System.out.println(myc);
//獲取類實例,必須要有無參構造器
Student s= (Student)myc.newInstance();
System.out.println(s);
// 絕對路徑
InputStream is = this.getClass().getResourceAsStream("/");
?
System.out.println(is);
// 相對路徑
InputStream is2 = this.getClass().getResourceAsStream("a.xml");
System.out.println(is2);
// 相對路徑
InputStream is3 = this.getClass().getResourceAsStream("b.xml");
System.out.println(is3);
//絕對路徑 d:/test.xml
InputStream is4=new FileInputStream("d:/test.xml");
System.out.println(is4);
?
------------------------------------------------------------------------------
?
二.構造器部分
public static void main(String[] args) {
try {
Class c=Class.forName("com.wzh.test.Student");
//
try {
Constructor cs=c.getDeclaredConstructor(String.class,Integer.class);
Student stu=(Student)cs.newInstance("myname",123);
System.out.println(stu);
//獲取所有構造器
Constructor[] css=c.getConstructors();
for (Constructor constructor : css) {
System.out.println(constructor);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
?
-----------------------------------------------
三.字段
public static void main(String[] args) throws Exception {
Class c = Class.forName("com.wzh.test.Student");
Student stu = (Student) c.newInstance();
Field[] fs = c.getDeclaredFields();
for (Field field : fs) {
System.out.println(field.getName());
if (!field.isAccessible())
field.setAccessible(true);
System.out.println(field.get(stu));
}
Field f = c.getDeclaredField("age");
if (!f.isAccessible())
f.setAccessible(true);
System.out.println("stu:" + f.get(stu));
}
?
---------------------------------------------------------
?
四.方法
public static void main(String[] args) throws Exception {
Class c = Class.forName("com.wzh.test.Student");
Student stu=(Student)c.newInstance();
Method m=c.getDeclaredMethod("play");
m.invoke(stu);
Method m2=c.getDeclaredMethod("play", String.class);
m2.invoke(stu, "依琳");
Method[] ms=c.getDeclaredMethods();
for (Method method : ms) {
System.out.println(method.getName());
}
}
?
新人創作打卡挑戰賽發博客就能抽獎!定制產品紅包拿不停!總結
- 上一篇: C# 文件操作 全收录 追加、拷贝、删除
- 下一篇: IE6下的text-indent属性BU