Java8基础之反射
生活随笔
收集整理的這篇文章主要介紹了
Java8基础之反射
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
簡介
反射是Java開發(fā)中一個非常重要的概念,掌握了反射的知識,才能更好的學習Java高級課程,因此必須要學習!本博客主要介紹Class類的使用,方法和成員變量的反射。
實體類User
package reflect; public class User {// 屬性定義private String name;public Integer age;// 無參構(gòu)造方法public User(){super();}// 有參構(gòu)造方法public User(String name, Integer age) {super();this.name = name;this.age = age;}// 定義普通方法public void say() {System.out.println("say方發(fā):我叫" + name + "," + age + "歲了!");}// 定義重載方法public void say(String name, Integer age) {System.out.println("重載say方法:我叫" + name + "," + age + "歲了!");}// 私有方法private void desc() {System.out.println("我超甜!");} }獲取User類對象
@Testpublic void getClassObject() {try {// 第一種方式:通過類加載器(動態(tài))Class userClassA = Class.forName("reflect.User");// 第二種方式:通過類Class userClassB = User.class;// 第三種方式:通過類的對象User user = new User();Class userClassC = user.getClass();// 查看三種方式得到的對象是否相同System.out.println(userClassA == userClassB && userClassB == userClassC);} catch (ClassNotFoundException e) {e.printStackTrace();}}結(jié)果:ture
獲取User對象
@Testpublic void getBean(){try {// 括號里面的寫法很有講究!User user = (User)Class.forName("reflect.User").newInstance("費哥",18);;user.say("費哥哥", 18);} catch (ClassNotFoundException | InstantiationException | IllegalAccessException e) {e.printStackTrace();}}結(jié)果:重載say方法:我叫費哥哥,18歲了!
通過User類對象,獲取方法信息
@Testpublic void test(){try {Class userClass = Class.forName("reflect.User");// 獲取所用聲明方法Method[] ms = userClass.getDeclaredMethods();for(Method m : ms) {// 獲取方法名字System.out.print("方法名:"+ m.getName());// 獲取返回值類型System.out.print(",返回值類型:"+m.getReturnType().getName());// 獲取參數(shù)類型Class[] cs = m.getParameterTypes();for(Class c : cs) {System.out.print(",參數(shù)類型:"+c.getSimpleName());}System.out.println();}} catch (Exception e) {e.printStackTrace();}}結(jié)果:
方法名:say,返回值類型:void,參數(shù)類型:String,參數(shù)類型:int
方法名:say,返回值類型:void
方法名:desc,返回值類型:void
通過User類對象,獲取成員變量信息
@Testpublic void test(){try {Class userClass = Class.forName("reflect.User");Field[] field = userClass.getDeclaredFields();for(Field f : field) {System.out.println("成員名字:"+f.getName()+",成員類型:"+f.getType().getSimpleName());}} catch (Exception e) {e.printStackTrace();}}結(jié)果:
成員名字:name,成員類型:String
成員名字:age,成員類型:Integer
通過User類對象,獲取構(gòu)造函數(shù)信息
@Testpublic void test(){try {Class userClass = Class.forName("reflect.User");Constructor[] con = userClass.getDeclaredConstructors();for(Constructor c : con) {// 構(gòu)造方法名字System.out.print(c.getName()+"(");Parameter[] para = c.getParameters();// 獲取構(gòu)造方法參數(shù)類型for(Parameter cc : para) {System.out.print(cc.getType()+" ");}System.out.println(")");}} catch (Exception e) {e.printStackTrace();}}結(jié)果:
reflect.User()
reflect.User(class java.lang.String class java.lang.Integer )
利用反射調(diào)用類的方法
@Testpublic void getMethod(){User user = null;try {user = (User)Class.forName("reflect.User").newInstance();Method method = user.getClass().getMethod("say", String.class, int.class);// 通過Method對象,調(diào)用對象中的方法。method.invoke(user, "費強勝", 24);} catch (Exception e) {e.printStackTrace();} }結(jié)果:重載say方法:我叫費強勝,24歲了!
轉(zhuǎn)載于:https://www.cnblogs.com/feiqiangsheng/p/11075612.html
總結(jié)
以上是生活随笔為你收集整理的Java8基础之反射的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Review】Review of Sp
- 下一篇: Exported activity do