【0】README

1)本文旨在 review java反射荔枝;

【1】荔枝如下

【2】实例化Class类对象

@Test // 实例化Class类对象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】返回一个类实现的接口

@Test // 返回一个类实现的接口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 // 方法将分别返回类中声明的全部域、方法和构造器;其中包括私有方法和受保护成员,但不包括超类成员.

【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}); // 调用方法.// sayShape() -> i am a triangle 9999 } catch (Exception e) {e.printStackTrace();}}

【5】实例化对象

@Test // 实例化对象public void testInstanceObject() {Class c1;try {c1 = Class.forName("com.basic.reflection.Demo");Demo d1 = (Demo)c1.newInstance(); // 调用默认构造器System.out.println(d1.getIntField()); // 1// 利用构造器创建对象实例(推荐).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】通过反射取得并修改数组的信息

@Test // 通过反射取得并修改数组的信息public void testOperateArray() {int[] array = {1, 1, 0};Class<?> demo = array.getClass().getComponentType(); // 数组类型的Class对象.out.println("array type = " + demo.getName()); // 数组类型为int.out.println("array length = " + Array.getLength(array)); out.println("1st element in array = " + Array.get(array, 0)); // 通过下标取得数组元素Array.set(array, 0, 100); //修改数组的第一个元素为100(下标为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*/// 通过反射修改数组大小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);//当新数组长度大于原始数组长度的时候System.out.println("after modifying the array size to 8.");print(newArray);} // 通过反射修改数组大小 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 */

java_basic_review(5)java反射荔枝相关推荐

  1. java反射机制+继承设计技巧

    [0]README 0.1) 本文描述+源代码均 转自 core java volume 1, 旨在理解 java反射机制 :最后还顺带提出了 继承设计的技巧: [1]反射相关 1)反射定义:能够分析 ...

  2. Java 反射 (快速了解反射)

    反射的概念 JAVA反射机制是在运行状态中,对于任意一个实体类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意方法和属性:这种动态获取信息以及动态调用对象方法的功能称为java ...

  3. java反射最佳实践,java反射性能测试分析

    java反射性能测试分析 java有别于其他编程语言而让我着迷的特性有很多,其中最喜欢的是接口设计,他让我们设计的东西具有美感.同样反射也是我比较喜欢的一个特性,他让程序自动运行,动态加载成为了可能, ...

  4. java 获取 反射 方法 名_乐字节Java反射之一:反射概念与获取反射源头Class

    一.Java反射机制概念 "程序运行时,允许改变程序结构或变量类型,这种语言称为动态语言",如Python, Ruby是动态语言:显然C++,Java,C#不是动态语言,但是JAV ...

  5. Java反射以及应用

    需求:需要通过反射动态获取类的字段类型,然后做特殊处理 Java反射getDeclaredField和getField的区别 getDeclaredFiled 只能获取类本身的属性成员(包括私有.共有 ...

  6. java反射用在哪里_Java反射

    昨天去参加比赛了,所以没有进行博客迁移.人生中的第一场健体比赛,虽然没得奖,但是收获和带来的思考颇丰.意外地进入了男子B组(174以上)的半决赛,然后在半决赛的时候还被裁判员点名出去单独比较,这个很让 ...

  7. Java反射(详述版)

    一.什么是反射? 我们先来看一个例子: package venus; public class Student {public String name;public Student(){System. ...

  8. java 反射 动态代理

    在上一篇文章中介绍Java注解的时候,多次提到了Java的反射API.与javax.lang.model不同的是,通过反射API可以获取程序在运行时刻的内部结构.反射API中提供的动态代理也是非常强大 ...

  9. Java反射 - 私有字段和方法

    尽管普遍认为通过Java Reflection可以访问其他类的私有字段和方法. 这并不困难. 这在单元测试中可以非常方便. 本文将告诉你如何. 访问私有字段 要访问私有字段,您需要调用Class.ge ...

最新文章

  1. cssbefore图片大小_两小时学会CSS-before after 伪元素
  2. lnmp安装博客系统WordPress
  3. 【迁移学习(Transfer L)全面指南】零次学习(Zero-Shot Learning)入门
  4. 用 WEKA 进行数据挖掘,第 3 部分: 最近邻和服务器端库
  5. DX使用随记--GroupControl
  6. LibreOJ #2006. 「SCOI2015」小凸玩矩阵 二分答案+二分匹配
  7. 看微软 Windows 30年发展简史,你用过最早的系统版本是什么?
  8. springboot日志配置
  9. 【Leetcode | 】93. 复原IP地址
  10. python--之np.any,np.a;;
  11. hibernate_09_关联映射_多对一
  12. 软件测试接口测试测试用例模板
  13. DNS Server
  14. micropython stm32源码修改_网上买了ps2手柄,按stm32 代码 改写了个micropython
  15. 原装win10下安装双系统win7
  16. Nodejs学习记录: koa2
  17. Matlab subs函数的使用方法
  18. 自学报告:创新设计思维
  19. 【人物专访】从12K到20+K,中间只差一个来学吧
  20. DZZOffice(大桌子)企业文档协同平台教程系列(二)——应用安装、系统设置和使用

热门文章

  1. H - Great Cells Gym - 101194H(数学推导/思维)
  2. A Hard Problem
  3. 第十二届蓝桥杯C++赛后感
  4. Musical Theme pku1743 (后缀数组)
  5. [SDOI2016] 生成魔咒(后缀数组SA + st表 + set)动态不同子串个数
  6. 洛谷P5110:块速递推(特征根方程、光速幂)
  7. P5405-[CTS2019]氪金手游【树形dp,容斥,数学期望】
  8. 亿些模板【数论数学】
  9. 【dfs】GCD与LCM(jzoj 1608)
  10. 【DP】小明游天界(zjoj 2149)