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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 杨兴庭 于 2013-7-28 23:24 编辑

这图是从老师的视频上截下来的.  
第一句就不懂,   一个string的 字符串.  等号右边怎么能是个数组呢. ?   咋回事啊.
第二句还是不懂. . Class.forName()  这个括号里 不应该是 完整的地址吗. ? 就是 包名啊类名什么的. ?咋传过来一个字符串也行啊. ?
第三句如果真拿到这个类了.  那能看懂.  但是 怎么拿到的啊. ?.     就用 args  就拿到一个类了. ?  .   别的类里也有args呢. ?   
老师把一个类的完整名字添加到了不知道一个什么地方- - .  那一步是关键吗. ?  他把完整的类名添加到哪一步之后 .  args就规定是哪个类里的了. ?
哎呀懵了.  

111.jpg (16.25 KB, 下载次数: 0)

111.jpg

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

8 个回复

倒序浏览
第一句是通过主函数传值的形式获取一个字符串,等号右边的不是一个数组,而是数组的0角标元素。也就是运行main方法时候传入的字符串数组参数的第一个元素。
第二句是通过类名的字符串形式获取字节码文件,并用这个字节码文件创建出该类中的main方法的对象。

如果这两个能看懂了   那第三句应该就能懂了吧。。
回复 使用道具 举报
王磊 发表于 2013-7-28 19:52
第一句是通过主函数传值的形式获取一个字符串,等号右边的不是一个数组,而是数组的0角标元素。也就是运行m ...

谢谢 . 谢谢 .  第一句 懂了- -   . 是我眼瞎.   
可是 第二句 还是 不明白.  
Class.forName()  这个里面 不就应该是 地址吗. ? 如果不是地址 也应该是类似的东西吧. ?
通过一个空参数 是怎么获得类名的字节码文件的啊. ?
求解答
回复 使用道具 举报
本帖最后由 王磊 于 2013-7-28 20:11 编辑
王峰230321 发表于 2013-7-28 20:01
谢谢 . 谢谢 .  第一句 懂了- -   . 是我眼瞎.   
可是 第二句 还是 不明白.  
Class.forName()  这个 ...

通过forName方法获取字节码文件,是日后开发最常用的一种方式了,也就是通过类名来获取字节码文件。
如果第一句你懂了的话,那你看视频里老师的操作实际上就是在传入这个类名的字符串形式。不是传入地址,你看到的那个类似地址的东西,其实就是全类名,也就是包名+类名。
以下是API里的forName方法说明,看一下就应该懂了。

forNamepublic static Class<?> forName(String className)                        throws ClassNotFoundException

返回与带有给定字符串名的类或接口相关联的 Class 对象。调用此方法等效于:
  Class.forName(className, true, currentLoader)
其中 currentLoader 表示当前类的定义类加载器。 例如,以下代码片段返回命名为 java.lang.Thread 的类的运行时 Class 描述符。
   Class t = Class.forName("java.lang.Thread")
调用 forName("X") 将导致命名为 X 的类被初始化。

参数:className - 所需类的完全限定名。
返回:具有指定名的类的 Class 对象。
  抛出:LinkageError[/url] - 如果链接失败
ExceptionInInitializerError - 如果此方法所激发的初始化失败
ClassNotFoundException- 如果无法定位该类


评分

参与人数 1技术分 +2 收起 理由
杨兴庭 + 2 赞一个!

查看全部评分

回复 使用道具 举报
王磊 发表于 2013-7-28 20:07
通过forName方法获取字节码文件,是日后开发最常用的一种方式了,也就是通过类名来获取字节码文件。
如果 ...

如果老师是把全类名放入. forName里 . 那我知道 是怎么回事 也能理解.   . 关键就是.  不是这么回事啊.
我也知道forName返回的是类的字节码.. . 可是.  咋就返回了呢. ?   
还有就是 .  这个怎么确定 这个args[0]  ,就是他想要的args[0]呢?   下面一个类.  上面一个类,..  他做视频的时候是在上面那个类里.  写的这些编码 . 目的就是要反射下面那个类.. .   可是 一般语法上来看.  在本类中写args[0] 不就是自己本身这个类里面吗. ?  
我墨迹点 对不起 但是是真的不懂..
回复 使用道具 举报
王磊 发表于 2013-7-28 20:07
通过forName方法获取字节码文件,是日后开发最常用的一种方式了,也就是通过类名来获取字节码文件。
如果 ...

嗯 这个API我刚找到.   说白了吧 . 哥..  咱这个 forName里  都能传什么吧.
forName(String className)
          返回与   带有给定字符串名的    类或接口相关联的 Class 对象。
这句话 我实在是没理解上去.   是. 类里面有这个名.  就返吗.- - ?
回复 使用道具 举报
王磊 高级黑马 2013-7-28 20:29:21
7#
王峰230321 发表于 2013-7-28 20:19
如果老师是把全类名放入. forName里 . 那我知道 是怎么回事 也能理解.   . 关键就是.  不是这么回事啊.
...

主函数外部传值,是按照书写的顺序,依次存入数组,并将这个数组作为参数传递给main方法又其操作。
至于怎么确定args[0]就是他想要的,是因为他传值的时候,就值传递了一个值,那么它就在数组的0角标位。
如果说把全类名传入方法你能理解,那用一个变量来指向一个全类名的字符串,并将变量作为参数传递给方法,不就是一个道理么。。。。
视频中是一种模拟方法,也就是说上边的类属于一个框架,而下边的类是日后被创建的,也就是说这个类被创建了,就可以拿到它的全类名,并将其作为参数传递给上边的框架类中,又上边的类对这个参数进行操作。
等拿到了下边类的字节码文件以后,就可以获取去内部的main方法对象,并对main方法对象进行invoke操作。

至于你说问的这个咋返回了呢?说实话。。我没明白。。。
回复 使用道具 举报
王磊 高级黑马 2013-7-28 20:35:58
8#
王峰230321 发表于 2013-7-28 20:26
嗯 这个API我刚找到.   说白了吧 . 哥..  咱这个 forName里  都能传什么吧.
forName(String className)  ...

195737328   加我QQ吧   研究研究
回复 使用道具 举报
王磊 发表于 2013-7-28 20:29
主函数外部传值,是按照书写的顺序,依次存入数组,并将这个数组作为参数传递给main方法又其操作。
至于 ...

怎么确定args[0]   就是他想要的那个类的   还是 不太懂.. . 主函数都知道.  都有args . 都是String类型的. 都是main.   可以说. 两个类里的main语句  是一模一样.. .     怎么分辨- -
args[0]  这个变量能指向一个全类名的字符串吗. ?!!  关键就是这点..   ?  
其余的我都懂了 .     哥  谢谢你 为我解答- - .
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马