- 浏览: 93063 次
- 性别:
- 来自: 苏州
文章分类
最新评论
-
jameswolf:
补肾啊!冬天多喝,但是补只是后招,别漏才是真理,呵呵
朋友告诉我的神粥秘方 -
wa327114652:
很想学习,但能再详细点吗?
for java beginner 5-2 - 自己实现枚举-下 -
superlittlefish:
不错,简单易懂.一直在看你的blog,感觉反射写的挺好的.让我 ...
for java beginner 15 下java反射在框架里的应用 读取properties文件
java 反射 的基础基础 Class的理解
反射 在 1.2 的时候就有了,
基本上所有的框架都会用到.
有的小东西 e.g. junit 也用到了,
反射无处不在的
要了解 反射 必须必须必须了解一个 类 类的类 Class
类-->描述一类事物,规定你应该有什么属性,不应该有什么属性
至于属性的具体值是什么,无所谓!由具体对象决定
User类--> 规定了你有姓名,年龄等属性的一类东西
生活里还有一类东西,就是我们编程时用的 类
这一类东西, 我们用 Class 来抽象
那么Class类 规定了编程时用的类 应该有些什么东西呢???
最最起码要规定
你应该有一个名字吧
你应该有一个包名吧
你应该有一堆属性信息
你应该有一堆方法信息
父类是什么
实现了什么接口
等等。。。
.................
=========================
Person p1 = new Person();
Person p2 = new Person();
上面人人都知道
那么下面呢??
Class clazz1 = ?;
Class clazz2 = ?;
这几个问号该怎么办呢??
Class clazz = new Class(); //JAVA里没有这种规定
Class代表内存里的一堆 字节码 的抽象
Class clazz = 字节码 ; 这是对的
解释一下什么是 字节码?
当程序去compile 这一行代码时
Person p1 = new Person();
JVM需要去 disk 上加载Person 的字节码 *.class 文件 到内存里
把p1指向那一堆 字节码,改属性就是改 这堆东西的内容.
当然一个程序不仅仅是需要一堆 Person 字节码,
还需要其他的,比如 Date Math 等,
那么 内存就有三堆 字节码,
★也就是 三个 Class的实例 !!!
我们可以这样写
Class clazz = Person.class ;
Class clazz = Date.class ;
可以这么简单的理解
Class 是一堆一堆 字节码 的抽象 [码里有名字,包名,属性信息,方法信息..]
clazz 是一堆字节码的 引用
Person.class 代表一堆实实在在的 字节码
Person p1 = new Person();
p1代表什么呢??
代表那一堆 字节码 生成 的对象,
那么这有没有方法得到 那堆 字节码呢?
有!!p1.getClass();
现在有两种方法 得到 字节码:
Class clazz1 = Person.class;
Class clazz2 = p1.getClass();
还有一种方法
Class.forName("java.lang.String")
这也可以得到一份 字节码
[直接内存里拿,内存里没有就用 类加载器去加载]
总的有三种方法!!!
Class clazz1 = Date.class;
p1.getClass();
Class.forName("java.lang.String");
最后一种用法最最广: 你给我名字好了,我自己去找那份字节码,不用写死!
[记得动态Form么?就是在XML写好的类名字]
最后一种写法有两个用途:
1 返回一份字节码
2 把那份字节码 import 到 JVM 里
整个JAVA里有9个预定义的 Class实例
就是9份 字节码
8个基本 加 一个void
Class clazz = void.class;//呵呵,从来不会有人用,但是是对的
int.class == Integer.TYPE;
======================
=======================
反射 在 1.2 的时候就有了,
基本上所有的框架都会用到.
有的小东西 e.g. junit 也用到了,
反射无处不在的
要了解 反射 必须必须必须了解一个 类 类的类 Class
类-->描述一类事物,规定你应该有什么属性,不应该有什么属性
至于属性的具体值是什么,无所谓!由具体对象决定
User类--> 规定了你有姓名,年龄等属性的一类东西
生活里还有一类东西,就是我们编程时用的 类
这一类东西, 我们用 Class 来抽象
那么Class类 规定了编程时用的类 应该有些什么东西呢???
最最起码要规定
你应该有一个名字吧
你应该有一个包名吧
你应该有一堆属性信息
你应该有一堆方法信息
父类是什么
实现了什么接口
等等。。。
.................
=========================
Person p1 = new Person();
Person p2 = new Person();
上面人人都知道
那么下面呢??
Class clazz1 = ?;
Class clazz2 = ?;
这几个问号该怎么办呢??
Class clazz = new Class(); //JAVA里没有这种规定
Class代表内存里的一堆 字节码 的抽象
Class clazz = 字节码 ; 这是对的
解释一下什么是 字节码?
当程序去compile 这一行代码时
Person p1 = new Person();
JVM需要去 disk 上加载Person 的字节码 *.class 文件 到内存里
把p1指向那一堆 字节码,改属性就是改 这堆东西的内容.
当然一个程序不仅仅是需要一堆 Person 字节码,
还需要其他的,比如 Date Math 等,
那么 内存就有三堆 字节码,
★也就是 三个 Class的实例 !!!
我们可以这样写
Class clazz = Person.class ;
Class clazz = Date.class ;
可以这么简单的理解
Class 是一堆一堆 字节码 的抽象 [码里有名字,包名,属性信息,方法信息..]
clazz 是一堆字节码的 引用
Person.class 代表一堆实实在在的 字节码
Person p1 = new Person();
p1代表什么呢??
代表那一堆 字节码 生成 的对象,
那么这有没有方法得到 那堆 字节码呢?
有!!p1.getClass();
现在有两种方法 得到 字节码:
Class clazz1 = Person.class;
Class clazz2 = p1.getClass();
还有一种方法
Class.forName("java.lang.String")
这也可以得到一份 字节码
[直接内存里拿,内存里没有就用 类加载器去加载]
总的有三种方法!!!
Class clazz1 = Date.class;
p1.getClass();
Class.forName("java.lang.String");
最后一种用法最最广: 你给我名字好了,我自己去找那份字节码,不用写死!
[记得动态Form么?就是在XML写好的类名字]
最后一种写法有两个用途:
1 返回一份字节码
2 把那份字节码 import 到 JVM 里
整个JAVA里有9个预定义的 Class实例
就是9份 字节码
8个基本 加 一个void
Class clazz = void.class;//呵呵,从来不会有人用,但是是对的
int.class == Integer.TYPE;
======================
package com.ncs; public class ReflectTest { public static void main(String[] args) throws Exception { String str = "hubin"; Class clazz1 = str.getClass(); Class clazz2 = String.class; Class clazz3 = Class.forName("java.lang.String"); System.out.println(clazz1 == clazz2); //true System.out.println(clazz1 == clazz3); //true //所以,在内存里 字节码 都是一份的, System.out.println(clazz1.isPrimitive()); // false 不是基本类型 String肯定不是基本类型 System.out.println(int.class.isPrimitive()); // true 这个是基本类型 System.out.println(int.class == Integer.class); //false int是一分字节码 Integer 也是另一份字节码 System.out.println(int.class == Integer.TYPE); //true 这是SUN给我们弄的 那个TYPE 得到包装类基本类的 字节码 System.out.println(int[].class.isPrimitive()); // false 你这个数组了 System.out.println(int[].class.isArray()); // true 这可以判断数组 //void 也是TYPE //总之,只要在源程序里出现的类型 //都有自己的Class实例对象 //e.g. int[] void //void 也是类型, 这个类型表示没有类型 } }
=======================
发表评论
-
pull解析器通用解析XML与生成XML
2013-02-23 14:52 0pull解析器,简单易用,android都在用,肯定有他的优 ... -
java decompiler - a tool to view jar file
2012-02-15 22:26 963有时候还是很需要看看人家JAR包里写的什么乱七八糟的东西,这东 ... -
JAVA工作
2011-07-20 21:11 689################## Applet ... -
helios-use-subversion-behind-proxy
2011-04-04 16:30 734download the eclipse helios in ... -
IBM发布时间不足解决方法
2011-02-17 19:16 727D:\IBM\SDP\runtimes\base_v61\p ... -
log4j简单例子
2010-10-03 18:27 823简单点说, 写程序时,有时懒得debug,就直接Sy ... -
java 泛型-1-使用而已
2009-12-01 23:39 1027023-java1.5泛型-1 懒人想的 把检查代码的工作交 ... -
java 1.5 annotation-3 设值让反射拿
2009-12-01 20:39 1545java 1.5 annotation 的use 前面的什么 ... -
java 1.5 annotation-2
2009-11-30 23:28 1149java 1.5 注解-2[非常重要 比每举重要] 刚刚只是 ... -
java 1.5 annotation-1
2009-11-30 21:07 1271java 1.5 注解[非常重要 比每举重要] 1.5后的新 ... -
for java beginner-19 beanutils包
2009-11-29 22:20 725019-使用BeanUtils工具包操 ... -
for java beginner-18 JAVABEAN规范-1
2009-11-29 21:12 988018-JAVABEAN规范-1 IntroSpec ... -
for java beginner 17 配置文件的知识
2009-11-29 19:29 752017 配置文件的知识 刚刚已经说到 配置文件,我说放 工程 ... -
for java beginner 15 下java反射在框架里的应用 读取properties文件
2009-11-29 17:44 1344java 框架基础 ------------------- ... -
for java beginner 14 ArrayList HashSet HashCode(中)
2009-11-29 13:24 1093java 反射 数组的反射 ArrayList HashSe ... -
for java beginner13java 反射 数组的反射(上)其实是讲ArrayList HashSet HashCode
2009-11-29 12:35 890java 反射 数组的反射(上 ... -
for java beginner12数组的反射的应用
2009-11-29 10:04 956java 反射 数组的反射 数组也是一种类型,当然可以反射 ... -
for java beginner11 java 反射 Method类
2009-11-29 08:30 1209java 反射 Method类 str1.charAt() ... -
for java beginner10 java 反射 Field类
2009-11-29 07:17 3501java 反射 Field类 -------用到一个bea ... -
for java beginner 9 java反射的概念和Constructor 类
2009-11-29 07:13 1342java 反射 的概念 和 Constructor 类 反 ...
相关推荐
introduce in english
Pentaho 8 Reporting for Java Developers 英文azw3 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn删除
Java A Beginner's Guide(6th) 英文无水印pdf 第6版 pdf所有页面使用FoxitReader和PDF-XChangeViewer测试都可以打开 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系...
Java Programming for the Absolute Beginner.pdf
Fully updated to cover Java Platform, Standard Edition 7 (Java SE 7), Java: A Beginner's Guide, Fifth Edition starts with the basics, such as how to compile and run a Java program, and then discusses...
This book is for anyone who wants to learn computer programming and knows absolutely nothing about it. If you are wondering whether this book is going to teach you how to create amazing applets or ...
Java Programming for the Absolute Beginner
黑皮书 Learn Java 8 In a Week_ A Beginner's Guide to Java Programming,新手一个星期学好JAVA,推荐
Java For Absolute Beginner
java beginner guide,
Java A Beginner's Guide(6th) 英文epub 第6版 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn删除
Java A Beginner’s Guide(7th) 英文epub 第7版 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn删除
Java A Beginner's Guide(6th) 英文mobi 第6版 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn删除
Java A Beginner’s Guide(7th) 英文azw3 第7版 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn删除
一本适用于java初学者的英文版教材,很全面的介绍了Java的初阶内容。
Learn to design and create video games using the Java programming language and the LibGDX software library. Working through the examples in this book, you will create 12 game prototypes in a variety ...
Welcome to C# and the world of Windows, Internet and World-Wide-Web programming with Visual Studio and the .NET platform! This book is the second in our new .NET How to Program series, which presents ...
jQuery for Designers Beginner's Guide Second Edition 英文无水印原版pdf pdf所有页面使用FoxitReader、PDF-XChangeViewer、SumatraPDF和Firefox测试都可以打开 本资源转载自网络,如有侵权,请联系上传者或...
Python Programming for the Absolute Beginner
Algorithm-Machine-Learning-for-Beginner-by-Python3.zip,斯克莱恩、坦索流。,算法是为计算机程序高效、彻底地完成任务而创建的一组详细的准则。