java_basic_review(5)java反射荔枝
生活随笔
收集整理的這篇文章主要介紹了
java_basic_review(5)java反射荔枝
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
【0】README
1)本文旨在 review?java反射荔枝;
【1】荔枝如下
【2】實(shí)例化Class類對(duì)象
@Test // 實(shí)例化Class類對(duì)象public void testInitializeClassObject() {Class c1;Class c2;Class c3;try {c1 = Demo.class; // way1.c2 = new Demo().getClass(); // way2.c3 = Class.forName("com.basic.reflection.Demo"); // way3.System.out.println(c1);System.out.println(c2);System.out.println(c3);System.out.println(c3.getName());} catch (Exception e) {e.printStackTrace();}/*** class com.basic.reflection.Demo* class com.basic.reflection.Demo* class com.basic.reflection.Demo* com.basic.reflection.Demo*/}
【3】返回一個(gè)類實(shí)現(xiàn)的接口
@Test // 返回一個(gè)類實(shí)現(xiàn)的接口public void testGetInstancesImplemented() {Class c1;try {c1 = Triangle.class;Class[] interfaces = c1.getInterfaces();for (Class temp: interfaces) {System.out.println(temp.getName());}// com.basic.reflection.Shape} catch (Exception e) {e.printStackTrace();}}// Class 類的 getDeclareFields、getDeclareMethods、getDeclaredConstructors // 方法將分別返回類中聲明的全部域、方法和構(gòu)造器;其中包括私有方法和受保護(hù)成員,但不包括超類成員.【4】利用反射分析類的能力
@Test // 利用反射分析類的能力public void testAnalyzeClass() {Class c1;try {c1 = Triangle.class;Field df1 = c1.getDeclaredField("width");df1.setAccessible(true);System.out.println(df1.getName()); // width.Triangle t = new Triangle(1000, "i am a triangle.");int age = df1.getInt(t);System.out.println(age); // 1000Method m1 = c1.getDeclaredMethod("sayShape", new Class[]{String.class, int.class});m1.invoke(t, new Object[]{"i am a triangle", 9999}); // 調(diào)用方法.// sayShape() -> i am a triangle 9999 } catch (Exception e) {e.printStackTrace();}}
【5】實(shí)例化對(duì)象
@Test // 實(shí)例化對(duì)象public void testInstanceObject() {Class c1;try {c1 = Class.forName("com.basic.reflection.Demo");Demo d1 = (Demo)c1.newInstance(); // 調(diào)用默認(rèn)構(gòu)造器System.out.println(d1.getIntField()); // 1// 利用構(gòu)造器創(chuàng)建對(duì)象實(shí)例(推薦).Constructor con = c1.getDeclaredConstructor(new Class[]{int.class, String.class});Demo d2 = (Demo) con.newInstance(new Object[]{110, "110"});System.out.println(d2.getIntField() + d2.getStrField()); // 110110} catch (Exception e) {e.printStackTrace();}} 【6】通過(guò)反射取得并修改數(shù)組的信息 @Test // 通過(guò)反射取得并修改數(shù)組的信息public void testOperateArray() {int[] array = {1, 1, 0};Class<?> demo = array.getClass().getComponentType(); // 數(shù)組類型的Class對(duì)象.out.println("array type = " + demo.getName()); // 數(shù)組類型為int.out.println("array length = " + Array.getLength(array)); out.println("1st element in array = " + Array.get(array, 0)); // 通過(guò)下標(biāo)取得數(shù)組元素Array.set(array, 0, 100); //修改數(shù)組的第一個(gè)元素為100(下標(biāo)為0)out.println("after modification, 1st element in array is " + Array.get(array, 0));} /* output.array type = intarray length = 31st element in array = 1after modification, 1st element in array is 100*/// 通過(guò)反射修改數(shù)組大小public static Object modifyArraySize(Object obj, int start, int newLen) {int oldLen = Array.getLength(obj);Class<?> arrayType = obj.getClass().getComponentType();Object newArray = Array.newInstance(arrayType, newLen);newLen = newLen > oldLen ? oldLen : newLen;System.arraycopy(obj, start, newArray, 0, newLen);return newArray;}public static void print(Object obj) {int length = Array.getLength(obj);Class<?> c = obj.getClass();if(!c.isArray())return ;out.println("array length :" + length);for (int i = 0; i < length; i++)out.print(Array.get(obj, i) + " "); // Array.get(obj, i) == obj[i] }@Test// modify the size of arraypublic void testModifyArraySize() {int[] array = {1, 7, 6, 0, 8};int[] newArray = (int[])modifyArraySize(array, 0, 3);System.out.println("after modifying the array size to 3.");for(int i : newArray) {out.print(i + " ");}out.println();print(newArray);newArray = (int[])modifyArraySize(array, 0, 8);//當(dāng)新數(shù)組長(zhǎng)度大于原始數(shù)組長(zhǎng)度的時(shí)候System.out.println("after modifying the array size to 8.");print(newArray);} // 通過(guò)反射修改數(shù)組大小 over. /*after modifying the array size to 3.1 7 6 array length :31 7 6 after modifying the array size to 8.array length :81 7 6 0 8 0 0 0 */總結(jié)
以上是生活随笔為你收集整理的java_basic_review(5)java反射荔枝的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 微信个人头像怎么设置(微信中的个人信息头
- 下一篇: openfire log4j:ERROR