使用java反射机制编写Student类并保存
定义Student类
package org;
public class Student {
private String _name = null;
private int _age = -;
private int _score = -;
public Student()
{
}
public Student(String name, int age, int score)
{
_name = name;
_age = age;
_score = score;
}
public void setName(String name)
{
_name = name;
}
public String getName()
{
return _name;
}
public void setAge(int age)
{
_age = age;
}
public int getAge()
{
return _age;
}
public void setScore(int score)
{
_score = score;
}
public int getScore()
{
return _score;
}
public void set(Student stu)
{
setName(stu._name);
setAge(stu._age);
setScore(stu._score);
}
public String toString()
{
return "Name: " + _name + ", age: " + _age + ", score: " + _score;
}
}
保存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
package org;
import java.lang.reflect.Method; public class InvokeProxy {
public static String init_metName(String met_name)
{
return met_name.substring(, ).toUpperCase() + met_name.substring();
} public static void setter(Object obj, String met_name, Object value, Class<?> type)
{
try {
Method met = obj.getClass().getMethod("set" + init_metName(met_name), type);
met.invoke(obj, value);
} catch (Exception e) {
e.printStackTrace();
}
} /*
public static Object getter(Object obj, String met_name)
{
Object result = null; try {
Method met = obj.getClass().getMethod("get" + init_metName(met_name));
result = met.invoke(obj);
} catch (Exception e) {
e.printStackTrace();
} return result;
}
*/
}
package org;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.lang.reflect.Constructor;
import java.lang.reflect.Method; public class tmp {
public static void main(String[] args)
{
Class<?> c0 = null;
Class<?> c1 = null;
String obj_name = "org.Student";
String save_name = "org.SaveStudents";
String file_name = "F:\\Code\\java\\text\\test15.txt"; try {
c0 = Class.forName(obj_name);
c1 = Class.forName(save_name);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} String name = null;
int age = -1;
int score = -1; // Inputs
{
BufferedReader buf = new BufferedReader(new InputStreamReader(System.in));
OutputStream os = System.out; try {
os.write("Input name: ".getBytes());
name = buf.readLine(); os.write("Input age: ".getBytes());
age = Integer.parseInt(buf.readLine()); os.write("Input score: ".getBytes());
score = Integer.parseInt(buf.readLine());
} catch (Exception e) {
e.printStackTrace();
}
} // instance Student
Student stu = null;
try {
stu = (Student)c0.newInstance();
} catch (Exception e) {
e.printStackTrace();
} // set
{
InvokeProxy.setter(stu, "name", name, String.class);
InvokeProxy.setter(stu, "age", age, int.class);
InvokeProxy.setter(stu, "score", score, int.class);
} // instance SaveStudents and invoke save() method
SaveStudents ss = null;
Constructor<?> con1 = null;
try {
con1 = c1.getConstructor(String.class);
ss = (SaveStudents)con1.newInstance(file_name);
Method met = ss.getClass().getMethod("save", Student.class);
met.invoke(ss, stu); } catch (Exception e) {
e.printStackTrace();
}
}
}
使用java反射机制编写Student类并保存的更多相关文章
- 利用Java反射机制对实体类的常用操作工具类ObjectUtil
代码: ObjectUtil类: import java.lang.reflect.Field; import java.math.BigDecimal; import java.text.Simpl ...
- 浅谈Java反射机制 之 使用类的 属性、方法和构造函数
前面两篇我们总结了Java反射机制如何获取类的字节码,如何获取构造函数,属性和方法, 这篇我们将进一步验证如何使用我们获取到的属性.方法以及构造函数 1.使用 反射 获取到的 属性 import ja ...
- 浅谈Java反射机制 之 获取类的字节码文件 Class.forName("全路径名") 、getClass()、class
另一个篇:获取 类 的 方法 和 属性(包括构造函数) 先贴上Java反射机制的概念: AVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法: 对于任意一个对象,都能够调用它 ...
- 利用java反射机制编写solr通用的java客户端
一.前言 通过上一篇的讲解,我们知道了dynamicFiled字段,它是动态的,不需要显示的声明.而且一些常用的基本类型solr已经默认给我们创建好了. 例如:*_i,*_is,等. 如果我们要使用动 ...
- JAVA反射机制教程-获取类对象
1. 什么是类对象 类对象,就是用于描述这种类,都有什么属性,什么方法的 2. 获取类对象 获取类对象有3种方式(1). Class.forName(2). Hero.class(3). new He ...
- 浅谈Java反射机制 之 获取类的 方法 和 属性(包括构造函数)
上一篇 获取 类 的字节码文件 我们讲到了获取类的字节码文件的三种方法 第三种方法通过getClass("全路径名")获取字节码文件最符合要求 1.获取构造方法 先贴上我们要获取的 ...
- Java反射机制(取得类的结构)
通过反射得到一个类中的完整的结构,就要使用java.lang.reflect包中的以下几个类: Constructor:表示类中的构造方法 Field:表示类中的属性 Method:表示类中的方法 ...
- Java反射机制 之 获取类的 方法 和 属性(包括构造函数)(Day_06)
把自己立成帆,才能招来凤. 运行环境 JDK8 + IntelliJ IDEA 2018.3 本文中使用的jar包链接 https://files.cnblogs.com/files/papercy ...
- Java反射机制(Class类的使用)
1:通过无参构造实例化对象 package cn.itcast; /* * 通过无参构造实例化对象 * 通过Class类本身实例化对象,使用newInstance方法 * 需要注意的是:实例化类中存在 ...
随机推荐
- 素数的平方阶群必为Abel群
定理 设$p$为素数,则$p^2$阶群$G$必为Abel群.
- VS 2013编译64位版本QT 4.8.6及使用cmake为依赖QT生成VS项目时Could NOT find Qt4
对于一些已经解决的问题,本博客不再讨论.只将本人遇到的问题做简单的说明. 一.VS 2013编译64位版本QT 4.8.6 QT项目官网中,对于QT4,其只提供了windows X86的版本,并且支持 ...
- vnc远程运行3D游戏
使用的版本:VNC-5.2.3-Windows.exe vnc官网 安装的过程中需要输入license key,以下给出一些enterprise license(最大权限的License): K5 ...
- winform快速开发平台->让有限的资源创造无限的价值!
最近一直在维护一套自己的快速开发平台. 主要应对针对C/S架构下的项目.然而对winform这快,还真没有看到过相对好的快速开发平台, 何为快速,在博客园逛了了好久, 预览了很多通用权限管理系统. 确 ...
- winform快速开发平台 -> 基础组件之分页控件
一个项目控件主要由及部分的常用组件,当然本次介绍的是通用分页控件. 处理思想:我们在处理分页过程中主要是针对数据库操作. 一般情况主要是传递一些开始位置,当前页数,和数据总页数以及相关关联的业务逻辑. ...
- eclipse项目上面有个红叉,但是没有任何地方有错误
eclipse项目上面有个红叉,但是没有任何地方有错误,clear,refresh,重启都试过了,依然没用, 后来我换了一个workspace,编译的时候提示: Description Resourc ...
- swift 命令
http://blog.chinaunix.net/uid-15063109-id-5144658.html http://www.cnblogs.com/fczjuever/p/3224022.ht ...
- CSS实现小三角小技巧
<style> .box{ width: 20px; height: 20px; background-color: #424; border: 10px solid #9C27B0; b ...
- html 超文本标记语言
1.html超文本标记语言 2.在html中存在着大量的标签,我们用html中存在的标签将要显示在网页的内容包含起来. 3.css 控制网页显示内容的效果. 4.html+css 只能是静态网页. 5 ...
- 【转】oracle中rowid的用法 (全面)
ROWID是数据的详细地址,通过rowid,oracle可以快速的定位某行具体的数据的位置. ROWID可以分为物理rowid和逻辑rowid两种.普通的堆表中的rowid是物理rowid,索引组织表 ...