java反射机制

一、

1、了解反射的作用

2、掌握Class类的操作及使用

3、可以通过反射取得一个类的实例化对象

4、可以通过反射取得类的结构,可以通过反射进行属性方法的调用

二、认识反射

Java反射机制就好像是一面镜子,照镜子可以发现自己的所有的特征,一个类可以通过反射(照镜子)发现自己的所有的方法。

反射机制在框架上面运用的尤其多!(怎么应用的?)

比如,javascript就是动态语言,有如下代码:

Var  a=1;

a=”weiwei”;

a=false;

由这三行代码可知:a可以在运行时动态的改变,由int类型改为字符串类型,又由字符串类型变为boolean类型,即在程序运行时,允许改变程序结构或变量类型,这就是动态语言。而java、C++等式不允许这样的如果a是int类型,就不能随便改动了。所以说java是静态语言。

解释:Class.forName("org.lxh.demo.classdemo02.Person")。//程序在编译的时候并不知道org.lxh.demo.classdemo02.Person是一个person类,只知道它是一个字符窜,只有在程序运行的时候才知道是个person类,即我们可以与运行时加载、探知、使用编译期间完全未知的classes。

如下所以:运用getDeclaredMethods()方法,可以知道一个已知名称的类中有哪些方法的申明,包括私有方法。

正常情况下,一个类要想使用,则必须找到此类,然后通过此类实例化一个对象,必须先有类再有对象,那么现在如果想通过一个对象找到其所在的类呢?

三、认识Class类

在反射机制中,Class类是一个操作的源头,所有的反射操作从此类展开,但是如果想实例化此类的对象,可以通过三种方式;

1、        Object类的getClass()方法

2、        通过类Class的形式,如:Person.class(第二常用)

3、        Class.forName()(最常用)

四、通过Class类实例化对象

在Class类的使用中,实例化对象是最常用的一种操作,而且日后所有框架的各个程序的实现原理都是依靠Class类完成的。

1、实例化无参构造的类

如果一个类中存在无参的构造方法,那么就可以直接通过Class类进行实例化操作。

现有如下代码:

步骤:1、获取class对象

2、生产类的实例 package org.lxh.demo.classdemo02;

public class Person {

public String toString() {

return "hello world!!!";

}

}

public class InstanceDemo01 {

public static void main(String[] args) {

Class> c = null;

try {

c = Class.forName("org.lxh.demo.classdemo02.Person");//先实例化对象

} catch (ClassNotFoundException e) {

e.printStackTrace();

}

try {

Person p = (Person) c.newInstance();//创建对象

System.out.println(p);

} catch (InstantiationException e) {

e.printStackTrace();

} catch (IllegalAccessException e) {

e.printStackTrace();

}

}

}

java 反射 镜子,java反射机制 - 巍巍的个人页面 - OSCHINA - 中文开源技术交流社区...相关推荐

  1. java 1m几个字节_1m等于多少kb - 巍巍的个人页面 - OSCHINA - 中文开源技术交流社区...

    经常上网的朋友可能对M这个单位比较的熟悉,比如下载一个文件,下载一首音乐或者电影,它们的文件大家通常都是以M为单位,一首歌通常为几M左右,一部电影可能达到了几百上千M了.还有我们的手机流量套餐,比如有 ...

  2. weka+em算法+java使用_WEKA学习笔记2 - lyle_5的个人页面 - OSCHINA - 中文开源技术交流社区...

    昨天老大布置任务后,我浏览了WEKA的Home Page,文档和WIKI等,当时想慢慢踏实的整理资料和文档,于是边看边翻译WekaManual.pdf,今天中午老大来检查任务时,表示我进度太慢,他需要 ...

  3. java方法调用机制_Java方法调用机制 - osc_bkdv2it5的个人空间 - OSCHINA - 中文开源技术交流社区...

    最近在编程时,修改方法传入对象的对象引用,并没有将修改反映到调用方法中.奇怪为什么结果没有变化,原因是遗忘了Java对象引用和内存分配机制.本文介绍3个点: ① 该问题举例说明 ② 简要阐述Java内 ...

  4. java诸神之战游戏_mj回溯算法 - osc_7bgz0no1的个人空间 - OSCHINA - 中文开源技术交流社区...

    1)js版本 ​ /** * 基本思路: * 回溯法: 先挑选中将,再依次拆接出3个,3个的...直到结束,那么说明当前可以胡牌 */ let mahjong = [ "1T", ...

  5. java 在界面上画一个时钟_编写程序显示一个时钟 - javaCoder的个人页面 - OSCHINA - 中文开源技术交流社区...

    编写程序显示一个时钟.示例输出如图所示. 代码: package com.DisplayClock; import javax.swing.*; import java.awt.*; import j ...

  6. java log4j 实例_log4j使用例子 - 小代码2016的个人页面 - OSCHINA - 中文开源技术交流社区...

    目录结构: D:\code\kongee\log4jtest>tree 卷 软件 的文件夹 PATH 列表 卷序列号为 000D-CD8E D:. ├─.settings ├─bin │ └─c ...

  7. java版如何使区块常加载,Java类加载机制 - suer27zhu的个人空间 - OSCHINA - 中文开源技术交流社区...

    首先上图 如图所示,Java类加载机制的六个阶段 Java代码编译完成后会生成对应的class文件,接着我们运行java命令的时候,其实是启动了JVM虚拟机执行class字节码文件的内容.大致分为六个 ...

  8. 申请一个Java公众号怎么命名_警惕不规范的变量命名 - Java公众号_Kirito的技术分享的个人空间 - OSCHINA - 中文开源技术交流社区...

    就在最近,项目组开始强调开发规范了,今天分享一个变量名命名不规范的小案例,强调一下规范的重要性. Boolean变量名命名规范 16年底,阿里公开了<Java开发规范手册>,其中有一条便是 ...

  9. java知识理论_JAVA理论知识 - OSC_rnoszD的个人空间 - OSCHINA - 中文开源技术交流社区...

    1. final关键字可以用来修饰什么?分别起什么作用? a) final可以修饰类,这样的类不能被继承. b) final可以修饰方法,这样的方法不能被重写. c) final可以修饰变量,这样的变 ...

最新文章

  1. Google Pixel 超分辨率--Super Resolution Zoom
  2. 日本漫画巨匠力作,看漫画就能学会Python,简直不要太轻松
  3. 一些实用的 jQuery 技巧
  4. python turtle库画图案-python之绘制图形库turtle(转)
  5. ROS的工作模式和ESXI网卡工作模式的关系
  6. snmp在企业网中的简单应用
  7. Unix Regex
  8. Android Sdk 国内镜像下载地址
  9. webview 本地 html空白,WKWebView加载本地html遇到的坑与解决办法
  10. win7下如何建立ftp服务器
  11. 现实世界的Windows Azure: 采访LexisNexis的Marc Slovak 和 Manish Bhargava
  12. erlang 小程序:整数序列,搜索和为正的最长子序列
  13. MENTOR PADS软件菜单显示不完整?这里有妙招
  14. 联想笔记本腾讯会议摄像头灰屏或黑屏问题解决
  15. php满一百人随机发放奖品,php按照奖品百分比随机抽奖 阿星小栈
  16. NLP-Beginner:自然语言处理入门练习----task 1基于机器学习的文本分类
  17. ODR, BSRR, BRR的差别
  18. 朋友圈点赞,微信发红包,视频的播放,Pc端微信加群,app端微信加群的测试点
  19. 论计算机取证工具软件及其检测(转)
  20. 科技云报道原创:没有一个行业,能拒绝“通信中台”的诱惑

热门文章

  1. Horizon View 7 发布Win10桌面三:链接克隆桌面池配置
  2. Java基础学习总结(114)——System之系统变量和环境变量
  3. Java基础学习总结(54)——JSON和Map转换的工具类
  4. Mysql学习总结(2)——Mysql超详细Window安装教程
  5. pycharm2019新建python文件_PyCharm 2019安装教程
  6. java.util.list e_java.util 类 StackE - Java 中文参考手册
  7. hive udaf_Hive UDAF 函数的编写
  8. 20051129: NetBeans
  9. php+redis实现消息队列
  10. JS判断两个日期的差或者判断两个日期的大小