java课堂练习,反射
来源:互联网 发布:如何优化兵团经济结构 编辑:程序博客网 时间:2024/05/16 19:14
这是我们练习反射的作业,在此记录一下
TeacherFunction项目,导出作为jar包
package function.teacher;public class TeacherFunction {private String TName;private int TAge;public TeacherFunction() { super(); // TODO Auto-generated constructor stub}@Deprecated public void curriculaVariable(){ System.out.println("Teacher curricula-variable");}public void teaching(){ System.out.println("Teachers in class");}
}
导入第一个项目jar包到另外的项目,我命名为WorkClient
定义了两个类,ProfessorClient类,继承TeacherFunction重写了teaching方法,Client类用来动态创建TeacherFunction类,查看修改属性等
ProfessorClient classpackage work.client;import function.teacher.*;public class ProfessorClient extends TeacherFunction{public void teaching(){ System.out.println("professor in class");}
}
Client class
package work.client;import java.lang.reflect.Constructor;import java.lang.reflect.Field;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;import function.teacher.TeacherFunction;public class Client {public static void main(String[] args) { //使用多种方法生成一个教师类的class对象 //method one TeacherFunction tf = new TeacherFunction(); Class clazz = tf.getClass(); try { Object obj = clazz.newInstance(); } catch (InstantiationException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } catch (IllegalAccessException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } //method two try { Class clazz1 = Class.forName("function.teacher.TeacherFunction"); Object obj1 = clazz.newInstance(); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InstantiationException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } //Method three Class clazz2 = TeacherFunction.class; try { Object obj2 = clazz2.newInstance(); } catch (InstantiationException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } //使用Class类获取教师类的结构信息并输出 //字段名&类型 Field fields[] = clazz2.getDeclaredFields(); for(Field field:fields){ System.out.println(field.getName()+","+field.getType()); } //方法 Method methods[] = clazz2.getDeclaredMethods(); for(Method method:methods){ System.out.println(method.getName());; } //构造方法 Constructor constractors[] = clazz2.getDeclaredConstructors(); for(Constructor constructor:constractors){ System.out.println(constructor); } //包名 System.out.println(clazz2.getPackage().getName()); //完整名字 System.out.println(clazz2.getName()); //父类// System.out.println(clazz2.getSuperclass()); //通过无参构造方法,使用反射技术动态创建教师类对象 try { TeacherFunction teafun = (TeacherFunction)clazz.newInstance(); System.out.println(teafun); } catch (InstantiationException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } //是用反射修改和查询教师类的的教龄属性 try { Class clazz3 = Class.forName("function.teacher.TeacherFunction"); Object obj3 = clazz3.newInstance(); Field f = clazz2.getDeclaredField("TAge"); f.setAccessible(true); //查询 System.out.println(f.get(obj3)); //修改 f.set(obj3, 18); System.out.println(f.get(obj3)); //使用反射动态执行教师类的选课方法 Method cv = clazz3.getDeclaredMethod("curriculaVariable", null); Object result = cv.invoke(obj3, null); } catch (NoSuchFieldException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SecurityException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InstantiationException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (NoSuchMethodException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalArgumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InvocationTargetException e) { // TODO Auto-generated catch block e.printStackTrace(); }}}
0 0
- java课堂练习,反射
- Java反射课堂笔记
- JAVA课堂练习
- JAVA 反射练习
- java反射机制--练习
- java反射练习
- java反射练习
- java反射练习02
- java反射初级练习
- Java反射小练习
- Java反射小练习
- java反射练习
- Java之反射--练习
- 《两个精神病人》——Java课堂练习
- 课堂练习
- 课堂练习
- Java 反射机制 练习代码
- java反射的初步练习
- 课程练习一 Problem Q id 1016
- 二分查找
- 类选择器class词列表的问题
- android6.0 se问题
- PHP数组的相关处理函数1
- java课堂练习,反射
- OpenLayers 3+Geoserver+PostGIS实现点击查询
- 分布式系统几种典型一致性算法简述
- hdu2064 汉诺塔III
- Children's Dining POJ2438 哈密顿图
- ubuntu 安装mono Fiddler后The proxy server is refusing connections
- 线程控制 - AfxBeginThreadUI线程的封装类
- Android范例编程一:获取地理位置
- java多线程之(Exchanger)