黑马程序员: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. ...
 
随机推荐
- css mainDiv和popbox居中
			
<style> .beCenter { width:460px; height:212px; background:#ccc; ...
 - JQ优化性能
			
一.注意定义jQuery变量的时候添加var关键字这个不仅仅是jQuery,所有javascript开发过程中,都需要注意,请一定不要定义成如下:$loading = $('#loading'); / ...
 - 【 c语言中无符号和有符号的加法运算】【深入理解】--【sky原创】
			
原文:[ c语言中无符号和有符号的加法运算][深入理解]--[sky原创] 第一题 #include<stdio.h> int main() { unsigned int a=6; i ...
 - Linux多命令顺序运行
 - IIS服务器  远程发布(Web Deploy)配置  VS2010 开发环境 Windows Server 2008服务器系统
			
原文:IIS服务器 远程发布(Web Deploy)配置 VS2010 开发环境 Windows Server 2008服务器系统 asp.net 网站有三种常用的发布方式:分别是拷贝开发机上发布好的 ...
 - Codeforces Round #FF  446A DZY Loves Sequences
			
预处理出每一个数字能够向后延伸多少,然后尝试将两段拼起来. C. DZY Loves Sequences time limit per test 1 second memory limit per t ...
 - 快速构建Windows 8风格应用32-构建辅助磁贴
			
原文:快速构建Windows 8风格应用32-构建辅助磁贴 引言 Windows Phone中,我们开发者可能会开发的一个功能点是将数据列表中某一项"Pin To Start(固定到开始屏幕 ...
 - leetcode[158] Read N Characters Given Read4 II - Call multiple times
			
想了好一会才看懂题目意思,应该是: 这里指的可以调用更多次,是指对一个文件多次操作,也就是对于一个case进行多次的readn操作.上一题是只进行一次reandn,所以每次返回的是文件的长度或者是n, ...
 - SQL远程备份
			
原文:SQL远程备份 set ANSI_NULLS ON set QUOTED_IDENTIFIER ON go -- ====================================== ...
 - WITH (NOLOCK)浅析
			
SQL Server 中WITH (NOLOCK)浅析 2014-08-30 11:58 by 潇湘隐者, 503 阅读, 2 评论, 收藏, 编辑 概念介绍 开发人员喜欢在SQL脚本中使用WITH( ...