作爲一個新手,很多時候都是壓根不知道代碼怎麼寫,沒有總體思路,有時候又是寫完一句,不知道下一局寫什麼了。下面我來講一講我作爲一個新手的編程過程吧
首先要準備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.第三個,需要一個註解了
package Test.net.study; import java.lang.annotation.*; //註解需要表明清楚,整個編程才能運行,如果這裏沒有寫明註解,那麼你會運行出錯(這是我最初遇到的問題) @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.FIELD) @Documented public @interface AutoWrite { }4.這也是最後的一個BOSS了,所有的代碼都會集中在這裏了,讓我們來看看
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
我這是第一次自己寫博客,喜歡大家能夠喜歡,多多關注我,我會努力每天都把自己每天所學到的,發到網上與大家一起學習討論,有什麼不好的地方歡迎大家能指出來。
最後,送大家一句話:
越努力 ,越幸運
美滋滋的說,哈哈~