黑马程序员:Java基础总结----反射
Class类代表Java类,它的各个实例对象又分别对应什么呢?
对应各个类在内存中的字节码,例如,Person类的字节码,ArrayList类的字节码,等等。
一个类被类加载器加载到内存中,占用一片存储空间,这个空间里面的内容就是类的字节码,不同的类的字节码是不同的,所以它们在内存中的内容是不同的,这一个个的空间可分别用一个个的对象来表示,这些对象显然具有相同的类型,这个类型是什么呢?
如何得到各个字节码对应的实例对象( Class类型)
类名.class,例如,System.class
对象.getClass(),例如,new Date().getClass()
九个预定义Class实例对象:
参看Class.isPrimitive方法的帮助
Int.class == Integer.TYPE
boolean |
isPrimitive() 判定指定的 Class 对象是否表示一个基本类型。 |
Class.isArray()
boolean |
isArray() 判定此 Class 对象是否表示一个数组类。 |
总之,只要是在源程序中出现的类型,都有各自的Class实例对象,例如,int[],void…
Constructor<T> |
getConstructor(Class<?>... parameterTypes) 返回一个 Constructor 对象,它反映此 Class 对象所表示的类的指定公共构造方法。 |
Constructor<?>[] |
getConstructors() 返回一个包含某些 Constructor 对象的数组,这些对象反映此 Class 对象所表示的类的所有公共构造方法。 |
例子:Constructor [] constructors= Class.forName("java.lang.String").getConstructors();
得到某一个构造方法:
例子: Constructor constructor = Class.forName(“java.lang.String”).getConstructor(StringBuffer.class); //获得方法时要用到类型
java.lang.reflect.Constructor类中的方法
创建实例对象:
通常方式:String str = new String(new StringBuffer("abc"));
反射方式: String str = (String)constructor.newInstance(new StringBuffer("abc")); //调用获得的方法时要用到上面相同类型的实例对象
T |
newInstance(Object... initargs) 使用此 Constructor 对象表示的构造方法来创建该构造方法的声明类的新实例,并用指定的初始化参数初始化该实例。 |
T |
newInstance() 创建此 Class 对象所表示的类的一个新实例。 |
例子:String obj = (String)Class.forName("java.lang.String").newInstance();
该方法内部的具体代码是怎样写的呢?用到了缓存机制来保存默认构造方法的实例对象。
Field |
getField(String name) 返回一个 Field 对象,它反映此 Class 对象所表示的类或接口的指定[公共public]成员字段。 |
Field[] |
getFields() 返回一个包含某些 Field 对象的数组,这些对象反映此 Class 对象所表示的类或接口的所有可访问公共字段。 |
"a"
);
java.lang.reflect.Field中的方法
out
.println(fa.get(fi));
Field |
getDeclaredField(String name) 返回一个 Field 对象,该对象反映此 Class 对象所表示的类或接口的指定已声明字段。 |
Field[] |
getDeclaredFields() 返回 Field 对象的一个数组,这些对象反映此 Class 对象所表示的类或接口所声明的所有字段。 |
void |
setAccessible(boolean flag) 将此对象的 accessible 标志设置为指示的布尔值。 |
new
Fie(2, 3);
"a"
);
true
);
out
.println(fa.get(fi));
class
Ts0 {
public
static
void
main(String[] args)
throws
Exception {
new
Text();
for
(Field field : fields) {
// if(field.getType().equals(String.class)){
if
(field.getType() == String.
class
) {
'a'
,
'1'
);
out
.println(text);
Text {
public
String
a
=
"jfaiweonv"
;
public
String
b
=
"fewiojavo"
;
public
String
c
=
"fejwaofkpwel"
;
@Override
public
String toString() {
return
a
+
":"
+
b
+
":"
+
c
;
Method |
getMethod(String name, Class<?>... parameterTypes) 返回一个 Method 对象,它反映此 Class 对象所表示的类或接口的指定公共成员方法。 |
Method[] |
getMethods() 返回一个包含某些 Method 对象的数组,这些对象反映此 Class 对象所表示的类或接口(包括那些由该类或接口声明的以及从超类和超接口继承的那些的类或接口)的公共 member 方法。 |
"java.lang.String"
).getMethod(
"substring"
,
int
.
class
,
int
.
class
);
java.lang.reflect.Method类中的方法
Object |
invoke(Object obj, Object... args) 对带有指定参数的指定对象调用由此 Method 对象表示的底层方法。
|
-
如果底层方法是静态的,那么可以忽略指定的
obj
参数。该参数可以为 null。如果底层方法
所需的形参数为 0,则所提供的
args
数组长度可以为 0 或 null。
"java.lang.String"
).getMethod(
"substring"
,
int
.
class
,
int
.
class
);
new
String(
"abcdefg"
), 1,3);
out
.println(a);
"main"
, String[].
class
);
null
, (Object)
new
String[] {
"123"
,
"456"
,
"789"
});
int
[] a = { 1, 2, 3, 4, 5 };
"a"
,
"b"
,
"c"
,
"d"
,
"e"
};
out
.println(Arrays.asList(a));
//[[I@34780af5]
out
.println(Arrays.asList(b));
//[a, b, c, d, e]
"a"
,
"b"
,
"c"
,
"d"
,
"e"
};
if
(b.getClass().isArray()) {
out
.println(Array.getLength( b));
"1"
);
out
.println(Arrays.asList( b));
你做的门调用锁,锁是工具,你做的门被房子调用,房子是框架,房子和锁都是别人提供的。
java.io.InputStream;
java.util.Collection;
java.util.Properties;
class
Ts {
public
static
void
main(String[] args)
throws
Exception {
// 应该先直接用ArrayList和HashSet,然后才引入从配置文件读,这样便于学员学习。
new
Properties();
// 先演示相对路径的问题
完整路径:Jsp中
相对路径:
ClassLoader |
getClassLoader() 返回该类的类加载器。 |
InputStream |
getResourceAsStream(String name) 查找具有给定名称的资源。 |
// InputStream ips = new FileInputStream("config.properties");
/*
// InputStream ips =
// ReflectTest2.class.getClassLoader().getResourceAsStream("cn/ itcast/javaenhance /config.properties");
// Class提供了一个便利方法,用加载当前类的那个类加载器去加载相同包目录下的文件
// InputStream ips =
// ReflectTest2.class.getResourceAsStream("config.properties");
class
.getResourceAsStream(
"temp.properties"
);
"className"
);
// Collection collection = new ArrayList();
out
.println(collection.size());
黑马程序员:Java基础总结----反射的更多相关文章
- 黑马程序员——JAVA基础之反射
------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- Java 反射是Java语言的一个很重要的特征,它使得Java具体了"动态 ...
- 黑马程序员Java基础班+就业班课程笔记全发布(持续更新)
正在黑马学习,整理了一些课程知识点和比较重要的内容分享给大家,也是给自己拓宽一些视野,仅供大家交流学习,大家有什么更好的内容可以发给我 ,现有黑马教程2000G QQ 1481135711 这是我总 ...
- 黑马程序员_Java基础:反射机制(Reflection)总结
------- android培训.java培训.期待与您交流! ---------- 反射在java中有非常重大的意义,它是一种动态的相关机制,可以于运行时加载.探知.使用编译期间完全未知的clas ...
- 黑马程序员----java基础笔记中(毕向东)
<p>------<a href="http://www.itheima.com" target="blank">Java培训.Andr ...
- 黑马程序员----java基础笔记上(毕向东)
------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 笔记一共记录了毕向东的java基础的25天课程,分上.中.下 本片为上篇,涵盖前10天课程 1. ...
- 黑马程序员——JAVA基础之泛型和通配符
------- android培训.java培训.期待与您交流! ---------- 泛型: JDK1.5版本以后出现新特性.用于解决安全问题,是一个类型安全机制. 泛型好处: ...
- 黑马程序员——JAVA基础之简述面向对象,类,变量,匿名对象
------- android培训.java培训.期待与您交流! ---------- 面向对象: 面向对象是相对面向过程而言 面向对象和面向过程都是一种思想 面向过程 强调的是功能行为 面向对象 将 ...
- 黑马程序员——JAVA基础之语法、命名规则
------- android培训.java培训.期待与您交流! ---------- 1.java语言组成:关键字,标识符,注释,常量和变量,运算符,语句,函数,数组. 2.java关键字:被Jav ...
- 黑马程序员——JAVA基础之File类,递归,打印流,合并切割流
------- android培训.java培训.期待与您交流! ---------- File类 用来将文件或者文件夹封装成对象 方便对文件与文件夹的属性信息进行操作. File对象可以作为参数传递 ...
- 黑马程序员——JAVA基础之多线程的安全问题
------- android培训.java培训.期待与您交流! ---------- 导致多线程出现问题的一个特殊的状态:就绪.具备了执行资格,但是还没有获取资源. 导致安全问题的出现的原因: 1. ...
随机推荐
- Modernizr
Modernizr 目录 概述 CSS的新增class JavaScript侦测 加载器 参考链接 概述 随着HTML5和CSS3加入越来越多的模块,检查各种浏览器是否支持这些模块,成了一大难题.Mo ...
- UiAutomator源码分析之获取控件信息
根据上一篇文章<UiAutomator源码分析之注入事件>开始时提到的计划,这一篇文章我们要分析的是第二点: 如何获取控件信息 我们在测试脚本中初始化一个UiObject的时候通常是像以下 ...
- userAgent,JS这么屌的用户代理,你造吗?——判断浏览器内核、浏览器、浏览器平台、windows操作系统版本、移动设备、游戏系统
1.识别浏览器呈现引擎 为了不在全局作用域中添加多余变量,这里使用单例模式(什么是单例模式?)来封装检测脚本.检测脚本的基本代码如下所示: var client = function() { var ...
- Mvc 导出 Excel
Mvc 导出 Excel 之前接触过Webform,winfrom 的导出Excel方法 ,优点:省事.缺点:服务器必须安装Office 这几天做项目 和 大牛学习了一下 新的方法,自己加以总结.希望 ...
- 转载:Linux Used内存到底到哪里去了?
转自:http://blogread.cn/it/article/6264?f=wb2 有时在Linux下会碰到这样的问题:ps aux看到的RSS内存只有不到30M,但是free看到内存却已经使用了 ...
- 6. SQL Server数据库监控 - 如何告警
原文:6. SQL Server数据库监控 - 如何告警 常用的告警方式大致有:短信.邮件.应用程序 (beep提示,图标提示,升窗提示等),可是不能一直坐在电脑前看着应用程序,或者用脚本部署监控,根 ...
- C# 通过扩展WebBrowser捕获网络连接错误信息
想捕获WebBrowser连接指定网站过程中发生的错误信息,包括网络无法连接.404找不到网页等等错误!经过网上的搜集,找到了以下解决方案,该解决方案不会在网站连接前发出多余的测试请求. 向Webbr ...
- JQuery Smart UI
JQuery Smart UI 个人开发的一套使用htm+js的开发框架 SmartUI2.0后续声明 摘要: 感谢很多朋友关注,因为今年一直在另外一个公司做顾问,网络环境管制相当严格,所以一直没有更 ...
- Smarty从配置文件读取的变量
从配置文件读取的变量 配置文件中的变量需要通过用两个"#"或者是smarty的保留变量 $smarty.config.来调用(下节将讲到) 第二种语法在变量作为属性值并被引号括住的 ...
- Attribute Routing
Attribute Routing 系列导航地址http://www.cnblogs.com/fzrain/p/3490137.html 题外话:由于这个技术点是新学的,并不属于原系列,但借助了原系列 ...