java反射_01
为什么要用反射?
举个栗子:
package com.imooc.reflect; public class Work { // 定义一个word方法 public void word() { System.out.println("厉害了word哥"); } }
package com.imooc.reflect; public class Word { public static void main(String[] args) { Work work = new Work(); work.word(); // 厉害了word哥 work.excel(); // 报错,因为work类中没有这个方法 } }
我们希望既然定义了word方法就能使用该方法,而不受是否有excel()方法的影响。
反射的作用就是避开编译期不通过的影响,运行期需要调用word()方法就能调用,不用管excel()方法是否存在。
编译时刻加载类是静态加载类、运行时刻加载类是动态加载类。
动态加载类的三种方式:
1 package com.imooc.reflect; 2 3 public class ClassDemo1 { 4 5 public static void main(String[] args) { 6 //Foo的实例对象如何表示 7 Foo foo1 = new Foo(); 8 //Foo这个类 也是一个实例对象,Class类的实例对象,如何表示呢 9 //任何一个类都是Class的实例对象,这个实例对象有三种表示方式 10 11 //第一种表示方式--->实际在告诉我们任何一个类都有一个隐含的静态成员变量class 12 Class c1 = Foo.class; 13 14 //第二中表达方式 已经知道该类的对象通过getClass方法 15 Class c2 = foo1.getClass(); 16 17 /* 18 * c1 ,c2 表示了Foo类的类类型(class type) 19 * 万事万物皆对象, 20 * 类也是对象,是Class类的实例对象 21 * 这个对象我们称为该类的类类型 22 * 23 */ 24 25 //不管c1 or c2都代表了Foo类的类类型,一个类只可能是Class类的一个实例对象 26 System.out.println(c1 == c2); 27 28 //第三种表达方式 29 Class c3 = null; 30 try { 31 c3 = Class.forName("com.imooc.reflect.Foo"); 32 } catch (ClassNotFoundException e) { 33 // TODO Auto-generated catch block 34 e.printStackTrace(); 35 } 36 System.out.println(c3 == c2); 37 38 //我们完全可以通过类的类类型创建该类的对象实例---->通过c1 or c2 or c3创建Foo的实例对象 39 Foo foo; 40 try { 41 foo = (Foo)c1.newInstance();//需要有无参数的构造方法 42 foo.print(); 43 } catch (InstantiationException e) { 44 // TODO Auto-generated catch block 45 e.printStackTrace(); 46 } catch (IllegalAccessException e) { 47 // TODO Auto-generated catch block 48 e.printStackTrace(); 49 } 50 } 51 } 52 53 class Foo{ 54 void print() { 55 System.out.println("hahahahahaha"); 56 } 57 }
以上是自己在慕课网学习java反射的一点点理解,肯定不精准,只是为了快速理解反射。毕竟越简单越方便入门。等自己达到一定水平再追求精确吧。希望读到此篇的同学,不要太把本文太当真,理解就好。
java反射_01的更多相关文章
- 第28章 java反射机制
java反射机制 1.类加载机制 1.1.jvm和类 运行Java程序:java 带有main方法的类名 之后java会启动jvm,并加载字节码(字节码就是一个类在内存空间的状态) 当调用java命令 ...
- Java反射机制
Java反射机制 一:什么事反射机制 简单地说,就是程序运行时能够通过反射的到类的所有信息,只需要获得类名,方法名,属性名. 二:为什么要用反射: 静态编译:在编译时确定类型,绑定对象,即通过 ...
- java反射(基础了解)
package cn.itcast_01; /** *Person类 */ public class Person { /** 姓名 */ private String name; ...
- java基础知识(十一)java反射机制(上)
java.lang.Class类详解 java Class类详解 一.class类 Class类是java语言定义的特定类的实现,在java中每个类都有一个相应的Class对象,以便java程序运行时 ...
- java基础知识(十一)java反射机制(下)
1.什么是反射机制? java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法,对于任意一个对象都能够调用他的属性和方法,这种动态获取属性和方法的功能称为java的反射机制. ...
- java反射学习之二万能EXCEL导出
一.EXCEL导出的实现过程 假设有一个对象的集合,现在需要将此集合内的所有对象导出到EXCEL中,对象有N个属性:那么我们实现的方式是这样的: 循环这个集合,在循环集合中某个对象的所有属性,将这个对 ...
- java反射学习之一反射机制概述
一.反射机制背景概述 1.反射(reflection)是java被视为动态语言的一个关键性质 2.反射机制指的是程序在运行时能获取任何类的内部所有信息 二.反射机制实现功能概述 1.只要给定类的全名, ...
- java反射 之 反射基础
一.反射 反射:JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为 ...
- java反射 cglib asm相关资料
有篇文章对java反射的调用的效率做了测试,写的比较好.猛击下面地址 http://www.blogjava.net/stone2083/archive/2010/09/15/332065.html ...
随机推荐
- STM32串口IAP实验笔记
STM32的IAP功能确实方便,以前对此如何实现有所了解,但是一直没去测试,这两天来练了下,可谓困难重重,搞了两天问题也一一解决,下面做些简要的笔记 IAP就是在线应用编程,方便程序升级,可以不用打开 ...
- 3.1 一个简单的Java应用程序
如下一个最简单的应用程序,它将只发送一条消息到控制台窗口中: package myjavapp; public class FirstSample { public stati ...
- SSL/TLS 协议介绍
SSL/TLS 协议(RFC2246 RFC4346)处于 TCP/IP 协议与各种应用层协议之间,为数据通讯提供安全支持. 从协议内部的功能层面上来看,SSL/TLS 协议可分为两层: 1. SSL ...
- (41)Spring Boot 使用Java代码创建Bean并注册到Spring中【从零开始学Spring Boot】
已经好久没有讲一些基础的知识了,这一小节来点简单的,这也是为下节的在Spring Boot中使用多数据源做准备. 从Spring 3.0开始,增加了一种新的途径来配置Bean Definition,这 ...
- hdu 3605 最大流sap+二进制思想(啊啊)
/*因为n非常大如果正常建边的话会超内存,每种状态的数目共2--10种状状体记录起来,源点与状态建边权值为状态数,状态与星球建边,星球与汇点建边*/ #include<stdio.h> # ...
- oracle导入少量数据(少于10M)
工具用PL/SQL Developer select * from temp1 for update;开锁,点+号,直接从Excel复制,然后粘贴. 程序猿必读
- 洛谷——P1034 矩形覆盖
https://www.luogu.org/problem/show?pid=1034 题目描述 在平面上有 n 个点(n <= 50),每个点用一对整数坐标表示.例如:当 n=4 时,4个点的 ...
- Spring MVC-视图解析器(View Resolverr)-内部资源视图解析器(Internal Resource View Resolver)示例(转载实践)
以下内容翻译自:https://www.tutorialspoint.com/springmvc/springmvc_internalresourceviewresolver.htm 说明:示例基于S ...
- open cursor too much error
今天遇到一个错误ORA-01000: maximum open cursors exceeded. 客户想增加 DB 的open_cursor这个参数. 但是我看了下,她的程序要打开几千个cursor ...
- Smobiler实现列表展示—GridView(开发日志十二)
一.列表功能展示 二.具体步骤 2.1,列表控件设计部分 2.1-① 在窗口SmoiblerForm1中加入gridview控件 2.1-② 在属性栏设置gridview控件的大小和位置 ...