java 反射 基础知识

  • 反射:reflection
  • 反射关键类
  • java 反射部分应用

反射:reflection

  • 在运行中分析类。
  • 在运行中查看和操作对象。
  1. 基于反射自己创建对象。
  2. 调用不可以访问的方法。
  3. set或者get无法访问的成员变量。
  4. 反射构建出无法直接访问的类。
  • 实现通用的数组操作代码。
  • 类似函数指针的功能。

使用反射创建对象。
newInstance, 调用构造函数。

方法一:

public class A{public void hello(){System.out.println("I am inevitable");}
}
Object obj1 = Class.forName("A").newInstance();
Method m = Class.forName("A").getMethod("hello");
m.invoke(obj1);//第一句也可如下:
A obj2 = (A) Class.forName("A").newInstance();

方法二:

//获取构造函数
Constructor<A> constructor = A.class.getConstructor();
//使用构造函数创建对象
A obj3 = constructor.newInstance();
//对象调用方法
obj3.hello();

反射关键类

  • Class:类型标识。
    – 三种获取类型标识的方法:
//方法1:
String s1 = "abc";
Class c1 = s1.getClass();
System.out.println(c1.getName());//方法2:
Class c2 = Class.forName("java.lang.String");
System.out.println(c2.getName());//方法3:
Class c3 = String.class;
System.out.println(c3.getName());

– 成员变量,方法,构造函数,修饰符,父类,父接口,包。。。
各地有对应的方法去获取数据。

如:
Fields:成员变量。
getFields(); 获取本类和父类的所有public字段。
getDeclaredFields(); 获取本类所有声明的字段,包括private的。

Method:成员方法。
getMethod(); 获取本类和父类,父接口的所有public方法。
getDeclaredMethod(); 获取本类所有的方法,包括private。

Constructor:构造函数。
getConstructors(); 获取构造函数。

父类:
getSuperclass(); 获取父类。

父接口:
getInterfaces();

java 反射部分应用

  1. 数据库连接。
  2. 数组扩充:新建一个大数组,将原数组中内容拷贝过去。
int[] a = {1, 2, 3, 4, 5};
a = (int[])Copy(a, 10);
for(int i : a)System.out.println(i);public static Object Copy(Object oldArrays, int newLength){//获取原数组的类型标识
Class c = oldArrays.getClass();
//获取每个数组中每个元素的类型。
Class componentType = c.getComponentType();
//获取老数组的长度。
int oldLength = Array.getLength(oldArrays);
//创建新数组。
Object newArray = Array.newInstance(componentType, newLength);
//拷贝数据。
System.arraycopy(oldArrays, 0, newArray, 0, oldLength);
//返回新数组。
return newArray;
}
  1. 动态执行方法:给定类名称,方法名称,即可执行。
public class Worker{public static void hello(){System.out.println("Hello world!");}
}//其他类使用反射技术,动态的使用Worker类的hello方法。
public class myWork extends TimerTask{public void run()throws Exception{//静态方法无需,new对象。Method m = Class.forName("Worker").getClass().getMethod("hello");m.invoke(null);}
}

java 反射基础知识相关推荐

  1. Java基础知识第二讲:Java开发手册/JVM/集合框架/异常体系/Java反射/语法知识/Java IO

    Java基础知识第二讲(Java编程规范/JVM/集合框架/异常体系/Java反射/语法知识/Java IO/码出高效) 分享在java学习及工作中,常使用的一些基础知识,本文从JVM出发,讲解了JV ...

  2. 你觉得什么才是 Java 的基础知识?

    近日里,很多人邀请我回答各种j2ee开发的初级问题,我无一都强调java初学者要先扎实自己的基础知识,那什么才是java的基础知识?又怎么样才算掌握了java的基础知识呢?这个问题还真值得仔细思考. ...

  3. hashcode是什么意思_什么才是 Java 的基础知识?

    作者:晓风轻 链接:zhuanlan.zhihu.com/p/28615617 近日里,很多人邀请我回答各种j2ee开发的初级问题,我无一都强调java初学者要先扎实自己的基础知识,那什么才是java ...

  4. Java SE 基础知识

    Java SE 基础知识 1 2 @(Notes)[J2SE, Notes] VICTORY LOVES PREPARATION. 特别说明: 该文档在马克飞象查阅最佳: 本部分知识还在迭代中,欢迎补 ...

  5. 什么才是java的基础知识?

    作者:晓风 出处:https://xwjie.github.io 关于资源视频下载的说明 常用设计模式完整系列篇 [强化编程功底]算法文摘 近日里,很多人邀请我回答各种j2ee开发的初级问题,我无一都 ...

  6. java薄弱基础知识记录

    java薄弱基础知识记录(一) 总结了我认为需做笔记的地方 基础知识 面向抽象编程 异常处理 反射 注解Annotation 泛型 集合 I/O 时间与日期 单元测试 正则表达式 安全和加密 多线程( ...

  7. Java进阶基础知识

    Java进阶基础知识 1.Java 基础 Java类设计的原则就是内聚性,一致性和封装性是Java设计的基本原则 1.1 Java基础理论 Java基础理论知识 1.2继承的优缺点 1.2.1优点 : ...

  8. java培训基础知识都学哪些

    很多人都开始学习java技术,觉得java语言在未来的发展前景空间非常大,事实却是如此,那么针对于零基础的同学, 学习java技术需要学哪些呢?下面我们就来看看java培训基础知识都学哪些? java ...

  9. 计算机java语言教程,计算机JAVA教程二讲Java语言基础知识.doc

    计算机JAVA教程二讲Java语言基础知识 2.1简单数据类型 2.1.1 标识符和保留字 1.标识符 程序员对程序中的各个元素加以命名时使用的命名记号称为标识符(identifier).Java语言 ...

最新文章

  1. 回归 好坏 机器学习_机器学习下的多元回归
  2. 一个蛮复杂的LINQ表达式
  3. VC++多线程工作笔记0001---认识与创建线程
  4. IE 中开发,兼容与性能测试工具汇总
  5. Latex排版技巧:上下方可输入文字的箭头
  6. 奇兔recovery卡刷教程_奇兔刷机小编为你详解recovery界面中的功能
  7. 小水智能-智慧工地与传统工地相比,数字科技赋予了以下三大优势
  8. java程序员修炼教学视频,快来看鸭~
  9. 【C++零散】计时chrono
  10. Android之页面添加水印
  11. 解决Windows11 Microsoft Store微软商店无法联网 Windows聚焦不更新 微软账户无法登录等
  12. 新概念英语(第四册,旧版)复习(原文及全文翻译)——Lesson 1 - Finding Fossil Man(寻找化石人)
  13. The Biggest Water Problem
  14. Python 最近两条好消息:①TIOBE排名超过C和Java②新版本发布3.10.0,还有今天刚发布的《What’s New in Python(2021.10.15)》
  15. 【IDEA】com.intellij.openapi.project.IndexNotReadyException
  16. BJDCTF 2nd WEB
  17. 3Ds Max快速入门(一)
  18. 常见可控硅带驱动 光耦 三极管 电阻三种方式
  19. vue3 draggable拖拽
  20. js中取一个对象的部分属性

热门文章

  1. 您已到达6300千米深度,速度8 公里/秒,正在穿过地心 [置顶]
  2. 算法-----python实现
  3. requests获取响应时间(elapsed)与超时(timeout)
  4. UVALive 4794 Sharing Chocolate DP
  5. Function spec
  6. 家的N次方 经典台词
  7. CentOS下yum操作gnome和kde桌面
  8. JBoss-4.2.3.GA下发布EJB3项目遇到的问题之JSF篇
  9. shell下移动文件
  10. python语法参数_python默认参数语法