A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© stream 中级黑马   /  2014-5-16 19:01  /  1382 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

这个方便只要看到就基本跳过去了,没有一点概念。。求粗略讲解概念。。

点评

视频慢慢听.你最主要的思想没有学到。看视频的时候肯定出小差了  发表于 2014-5-16 21:01

4 个回复

正序浏览
本帖最后由 pandapan 于 2014-5-16 21:15 编辑

首先声明,本人不是大神。不过我说说个人的一些理解吧,从熟悉的知识慢慢过渡到这个话题。1. 先说说最基本的吧,我们编写完java代码,是要先编译为class文件,然后运行,是吧。为什么不能直接运行,而需要编译呢,这是因为java虚拟机不认识.java文件,但是他认识.class文件。也就是说他能够将.class文件加载到java虚拟机中,然后进行处理,这个是肯定知道的吧。(当然,如果你自己设计一个虚拟机,将编译和运行识别为一体也是可以的,不过没有什么重大的意义吧。)
2.那么在思考第二个问题,为什么我自己编写的类也能够创建对象呢,java虚拟机是怎么处理的呢?这就用到了.class文件了,根据我们import的规定,我们相当于将自己的类存放的地址,告诉了java虚拟机,所以他找到了。找到了之后,他做什么呢?把这个.class文件加载到虚拟机中,进行处理.但是.class文件和加载到内存中的东东是否一样呢?这个是有差异的,(差异的部分我们先不说,这里我就是概括的说了一下类加载器,但是说法有些差异),我们知道有差异就可以了,加载后的东东我们称之为类的字节码。
3。通过第二点便知道,用到一个类,虚拟机会加载的,这个过程是虚拟机(实际是类加载器)做的,那么我们能否自己来找这个类的.class文件,并且将他加载到内存中呢?举一个小的例子吧,我们通过一个相对包的地址,例如传智播客下的一个类叫做Example,相对顶层的类的全路径为com.itcast.Example,我们要把他加载到内存中,怎么做呢?java语言呢?已经把这部分实现的过程给我们封装好了。说到这里,我们先不说实现使用的是什么。先来说说实现的思想
4. 类中有属性,方法,构造方法,访问修饰符,方法的参数等等乱七八糟的东西,假如我们可以自己手工来加载这个类的信息,加载之后用来做什么呢?加载一个类,肯定是想我们自己来调用这个类的方法,但是怎么调用呢?考虑到这个问题,需求我们分析的就已经差不多了,我们知道,万物都是对象,那么字节码,方法,属性,构造方法,访问修饰符是不是也可以抽象为对象呢?答案是肯定可以的。
(1)字节码->Class
(2)方法->Method
(3)构造方法->Constructor
(4)属性->Field
(5)访问修饰符->Modifier
我先说道这里吧,希望能够帮到你。
下面是我个人在csdn博客中比上述具体一点的知识,涉及到具体用法的,链接地址给你吧。
http://blog.csdn.net/shifengzhongdexiao/article/details/25552329


评分

参与人数 1技术分 +1 收起 理由
轻语。 + 1 赞一个!

查看全部评分

回复 使用道具 举报
引用《黑马程序员学习总结》
理解反射的概念:
反射就是把Java类中的各种成分映射相成Java类。

例如:众多的人用一个Person类来表示,那么众多的Java类就用一个Class类来表示。




反射也称为对类的解剖。把类的各个组成部分映射成一个个相应的Java类。

例如:一个类有:成员变量,方法,构造方法,包等等信息。

利用反射技术可以对一个类进行解剖。

其实只要拿到Java类的字节码对应的Class对象,就等于拿到了Java类中的各个成分。


回复 使用道具 举报
通俗来讲,你只要给我个类的名字,其他什么都不给我,我就可以创建对象。调用类里的方法。
想干啥就干啥。。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马