`
hubin4
  • 浏览: 97181 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

for java beginner 8 java 反射的基础基础Class的理解

    博客分类:
  • JAVA
阅读更多
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;


======================
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 也是类型, 这个类型表示没有类型
	}

}

=======================
分享到:
评论

相关推荐

    java for the beginner

    introduce in english

    Pentaho 8 Reporting for Java Developers azw3

    Pentaho 8 Reporting for Java Developers 英文azw3 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn删除

    Java A Beginner's guide

    综上所述,《Java A Beginner’s Guide》第六版是一本针对初学者的全面且权威的Java编程指南,作者赫伯特·席尔德特结合自己在编程语言领域的深厚知识和广泛经验,为读者提供了一个理解Java语言的框架,同时由Java...

    JAVA A beginner's guide sixth edition

    该书全面介绍了Java的基础知识,适合那些没有编程经验的读者。 3. 作者Herbert Schildt:Herbert Schildt是一位畅销书籍作家,拥有近三十年的编程写作经历,是Java语言方面的权威专家。他的作品包括《Java:The ...

    Java A Beginner's Guide(6th) 无水印pdf

    Java A Beginner's Guide(6th) 英文无水印pdf 第6版 pdf所有页面使用FoxitReader和PDF-XChangeViewer测试都可以打开 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系...

    Java: A Beginner's Guide 5th Edition

    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...

    Java and Algorithmic Thinking for the Complete Beginner – Compact Edition

    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

    1. **基础语法**:包括变量、数据类型(如整型、浮点型、字符串等)、运算符、控制结构(如if语句、for循环、while循环)、函数定义与调用等。 2. **类与对象**:讲解面向对象编程的基本概念,如类的定义、对象的...

    Java_Programming_for_the_Absolute_Beginner.rar_absolute java_jav

    "Java_Programming_for_the_Absolute_Beginner.rar_absolute java_jav"这个标题表明这是一份针对完全初学者的Java编程教程,可能包含了从最基础的概念到实际编程技巧的全面介绍。 1. **基础概念**:在学习Java之前...

    Java-Programming-for-Beginner:书

    这本书《Java-Programming-for-Beginner》将引领你走进这个充满无限可能的世界。Java以其“一次编写,到处运行”的特性,使得开发者可以在多种平台上无缝地运行代码,极大地提高了开发效率。 1. **Java基础知识**:...

    Java 7 A Beginner’s Tutorial, 3rd Edition.pdf

    通过以上总结,我们可以看到《Java 7 初学者教程》第三版涵盖了 Java 编程语言的基础知识,包括语言特性、基本语法、面向对象编程等内容,并提供了丰富的实例和练习,非常适合初学者作为入门教材使用。

    Java A Beginner's Guide(6th) epub

    Java A Beginner's Guide(6th) 英文epub 第6版 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn删除

    Java A Beginner’s Guide(7th) epub

    Java A Beginner’s Guide(7th) 英文epub 第7版 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn删除

    Java A Beginner's Guide(6th) mobi

    Java A Beginner's Guide(6th) 英文mobi 第6版 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn删除

    Java A Beginner’s Guide(7th) azw3

    Java A Beginner’s Guide(7th) 英文azw3 第7版 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn删除

    Java2:A Beginner's Guide Second Edition 原版 pdf

    《Java2: A Beginner's Guide Second ...总之,《Java2: A Beginner's Guide Second Edition》是一本全面的Java入门教程,通过学习,读者可以系统地掌握Java编程语言,为日后深入学习和开发Java应用打下坚实基础。

    Java - Java A Beginner's Guide 9th edition

    ### Java - Java A Beginner's Guide ...综上所述,《Java: A Beginner’s Guide》第九版为读者提供了从Java基础知识到实际编程实践的全面指南。无论是初学者还是有一定经验的开发者,都能从中获得有价值的指导和启发。

    Java Game Development with LibGDX: From Beginner to Professional.pdf

    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 ...

Global site tag (gtag.js) - Google Analytics