作为一个新手,很多时候都是压根不知道代码怎么写,没有总体思路,有时候又是写完一句,不知道下一局写什么了。下面我来讲一讲我作为一个新手的编程过程吧
首先要准备3个类一个注解
1. 做第一个类 Dogbean
package Test.net.study; public class DogBean { private String name; private String sex; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } }2.第二个类 DogImpl
package Test.net.study; public class DogImpl { @AutoWrite private DogBean dogBean; public DogBean getDogBean() { return this.dogBean; } }3.第三个,需要一个注解了
4.这也是最后的一个BOSS了,所有的代码都会集中在这里了,让我们来看看package Test.net.study; import java.lang.annotation.*; //注解需要表明清楚,整个编程才能运行,如果这里没有写明注解,那么你会运行出错(这是我最初遇到的问题) @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.FIELD) @Documented public @interface AutoWrite { }
package Test.net.study; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; public class TestCase { public static void main(String[] args) throws ClassNotFoundException, IllegalAccessException, InstantiationException, NoSuchMethodException, InvocationTargetException { //获取项目包的位置 String pkgName = TestCase.class.getPackage().getName(); String classPath = ".DogImpl"; //通过包名加类名获取class(这里用到线程的知识了) Class clazz = Thread.currentThread().getContextClassLoader().loadClass(pkgName+classPath); //通过class创建一个对象 Object object = clazz.newInstance(); //遍历匿名类里的所有的字段并执行 for (Field field : clazz.getDeclaredFields()){ //判断字段是否为空 if (field.getAnnotation(AutoWrite.class) !=null){ //获取类中所有的字段方法 Class fieldClass = field.getType(); //创建一个对象 Object fieldObject = fieldClass.newInstance(); //遍历匿名类里的所有字段,并获取值 for (Field field1 : fieldClass.getDeclaredFields()) { //让第一个字母大写(这是一个获取字段首字母的句式,网上一搜就有了,不过还是要自己记住最好) String fieldName = field1.getName(); fieldName = fieldName.substring(0, 1).toUpperCase() + fieldName.substring(1); fieldName = "set" + fieldName; //这里开始赋值了 if(fieldName.equals("setName")){ //获取方法对象 Method method = fieldClass.getMethod(fieldName, String.class); method.invoke(fieldObject, "格格"); } else if(fieldName.equals("setSex")){ Method method = fieldClass.getMethod(fieldName, String.class); method.invoke(fieldObject, "女"); } } //取消private等声明的检查,强制放入 field.setAccessible(true); //第一个变量是需要塞东西的对象,第二个变量是需要塞进去的东西 field.set(object,fieldObject); } } //强制转换object对象 DogImpl impl = (DogImpl) object; //打印输出 System.out.println(impl.getDogBean().getName()); System.out.println(impl.getDogBean().getSex()); } }要以上4个代码都要OK没错了,那么运行结果就是这样的
格格
女
Process finished with exit code 0
我这是第一次自己写博客,喜欢大家能够喜欢,多多关注我,我会努力每天都把自己每天所学到的,发到网上与大家一起学习讨论,有什么不好的地方欢迎大家能指出来。
最后,送大家一句话:
越努力 ,越幸运
美滋滋的说,哈哈~