使用java反射机制编写Student类并保存

定义Student类

 1 package org;
 2 
 3 public class Student {
 4     private String _name = null;
 5     private int _age = -1;
 6     private int _score = -1;
 7     
 8     public Student()
 9     {
10         
11     }
12     
13     public Student(String name, int age, int score)
14     {
15         _name = name;
16         _age = age;
17         _score = score;
18     }
19     
20     public void setName(String name)
21     {
22         _name = name;
23     }
24     
25     public String getName()
26     {
27         return _name;
28     }
29     
30     public void setAge(int age)
31     {
32         _age = age;    
33     }
34     
35     public int getAge()
36     {
37         return _age;
38     }
39     
40     public void setScore(int score)
41     {
42         _score = score;
43     }
44     
45     public int getScore()
46     {
47         return _score;
48     }
49     
50     public void set(Student stu)
51     {
52         setName(stu._name);
53         setAge(stu._age);
54         setScore(stu._score);
55     }
56     
57     public String toString()
58     {
59         return "Name: " + _name + ", age: " + _age + ", score: " + _score; 
60     }
61 }

 

保存Student类的信息  SaveStudents类

package org;
import java.io.FileOutputStream;
import java.io.OutputStream;

public class SaveStudents {
    private String _file_name = null;
    
    public SaveStudents(String file_name)
    {
        _file_name = file_name;
    }
    
    public boolean save(Student stu) throws Exception
    {
        OutputStream os = new FileOutputStream(_file_name, true);
        boolean flag = false;        //    是否保存成功的标志
        
        if (null != stu.getName()) {
            os.write(stu.toString().getBytes());
            os.close();
            flag = true;
        }
        
        return flag;
    }
}

 

代理调用类InvokeProxy

 1 package org;
 2 import java.lang.reflect.Method;
 3 
 4 public class InvokeProxy {
 5     public static String init_metName(String met_name)
 6     {
 7         return met_name.substring(0, 1).toUpperCase() + met_name.substring(1);
 8     }
 9     
10     public static void setter(Object obj, String met_name, Object value, Class<?> type)
11     {
12         try {
13             Method met = obj.getClass().getMethod("set" + init_metName(met_name), type);
14             met.invoke(obj, value);
15         } catch (Exception e) {
16             e.printStackTrace();
17         }
18     }
19     
20     /*
21     public static Object getter(Object obj, String met_name)
22     {
23         Object result = null;
24         
25         try {
26             Method met = obj.getClass().getMethod("get" + init_metName(met_name));
27             result = met.invoke(obj);
28         } catch (Exception e) {
29             e.printStackTrace();
30         }
31         
32         return result;
33     }
34     */
35 }

 

 1 package org;
 2 import java.io.BufferedReader;
 3 import java.io.InputStreamReader;
 4 import java.io.OutputStream;
 5 import java.lang.reflect.Constructor;
 6 import java.lang.reflect.Method;
 7 
 8 public class tmp {
 9     public static void main(String[] args)
10     {
11         Class<?> c0 = null;
12         Class<?> c1 = null;
13         String obj_name = "org.Student";
14         String save_name = "org.SaveStudents";
15         String file_name = "F:\\Code\\java\\text\\test15.txt";
16         
17         try {
18             c0 = Class.forName(obj_name);
19             c1 = Class.forName(save_name);
20         } catch (ClassNotFoundException e) {
21             e.printStackTrace();
22         }
23         
24         String name = null;
25         int age = -1;
26         int score = -1;
27         
28         //    Inputs
29         {
30             BufferedReader buf = new BufferedReader(new InputStreamReader(System.in));
31             OutputStream os = System.out;
32             
33             try {
34                 os.write("Input name: ".getBytes());
35                 name = buf.readLine();
36                 
37                 os.write("Input age: ".getBytes());
38                 age = Integer.parseInt(buf.readLine());
39                 
40                 os.write("Input score: ".getBytes());
41                 score = Integer.parseInt(buf.readLine());
42             } catch (Exception e) {
43                 e.printStackTrace();
44             }
45         }
46         
47         //    instance Student
48         Student stu = null;
49         try {
50             stu = (Student)c0.newInstance();
51         } catch (Exception e) {
52             e.printStackTrace();
53         }
54         
55         //    set
56         {
57             InvokeProxy.setter(stu, "name", name, String.class);
58             InvokeProxy.setter(stu, "age", age, int.class);
59             InvokeProxy.setter(stu, "score", score, int.class);
60         }
61         
62         //    instance SaveStudents and invoke save() method
63         SaveStudents ss = null;
64         Constructor<?> con1 = null;
65         try {
66             con1 = c1.getConstructor(String.class);
67             ss = (SaveStudents)con1.newInstance(file_name);
68             Method met = ss.getClass().getMethod("save", Student.class);
69             met.invoke(ss, stu);
70             
71         } catch (Exception e) {
72             e.printStackTrace();
73         }
74     }
75 }

 

转载于:https://www.cnblogs.com/hcxc/p/4498622.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值