dark008 发表于 4-8-2010 00:51:32

有人能从语法上分析getClass().getResource(String blahblah)吗?

大家好,我刚刚申请了IT专区的话题主持人,现在发个帖子活跃一下气氛:lol

在Java GUI编程中,把一个JLabel用来显示图片会用到类似下边的语句jLabel1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/accepted_48.png")));

前边部分咱们都知道啥意思,一时不清楚的话,也能从JDK文档中查出来,但是后边这部分:getClass().getResource(String blahblah),大家能从语法的角度说明一下是怎么回事吗?

欢迎大家前来探讨。:lol

dark008 发表于 4-8-2010 03:55:03

今晚上我真背,从上次俺的硬盘不幸坏了之后,我的JDK也运行不正常了,刚才把环境变量检查了多遍,JDK还是找不到main文件:Q 。最后不得不卸载了旧版本,从Oracle那里下了最新版,才总算弄好了。不过弄到现在,困得眼睛都睁不开了:ppb_78

周星星1832 发表于 4-8-2010 08:50:33

Most nontrivial applications are packaged with "resource files," which are nothing more than files used by the application for various purposes. Some examples of these resources include image (GIF, JPEG) files, message/text data, configuration/initialization information, and so on. There are several of ways to read these resources, but most of them are closely tied to the way in which the code is packaged. For example, one way will work correctly for a Java application, while another will work only for an applet. Obviously, the most desirable approach is to use a mechanism that functions correctly regardless of the packaging of the code. This is where the getResource() method in java.lang.Class is useful. It returns a URL that represents a resource, which can then be used to read the resource.

清风不写字 发表于 4-8-2010 09:39:12

这个跟语法没多大关系
任何类都会继承Object 类的 getClass()方法, 该方法会返回当前实例的 Class 对象
然后Class对象的 getResource() 会调用 它的class loader 来查找资源文件。

看一下下面三个API就清楚了。Object.getClass

public final Class<?> getClass()
Returns the runtime class of this Object. The returned Class object is the object that is locked by static synchronized methods of the represented class.
The actual result type is Class<? extends |X|> where |X| is the erasure of the static type of the expression on which getClass is called. For example, no cast is required in this code fragment:

Number n = 0;
Class<? extends Number> c = n.getClass();

Returns:
The Class object that represents the runtime class of this object.Class.getResource

public URL getResource(String name)
Finds a resource with a given name. The rules for searching resources associated with a given class are implemented by the defining class loader of the class. This method delegates to this object's class loader. If this object was loaded by the bootstrap class loader, the method delegates to ClassLoader.getSystemResource(java.lang.String).
Before delegation, an absolute resource name is constructed from the given resource name using this algorithm:

If the name begins with a '/' ('\u002f'), then the absolute name of the resource is the portion of the name following the '/'.
Otherwise, the absolute name is of the following form:
   modified_package_name/name

Where the modified_package_name is the package name of this object with '/' substituted for '.' ('\u002e').

Parameters:
name - name of the desired resource
Returns:
A URL object or null if no resource with this name is foundClassLoader.getResource

public URL getResource(String name)
Finds the resource with the given name. A resource is some data (images, audio, text, etc) that can be accessed by class code in a way that is independent of the location of the code.
The name of a resource is a '/'-separated path name that identifies the resource.

This method will first search the parent class loader for the resource; if the parent is null the path of the class loader built-in to the virtual machine is searched. That failing, this method will invoke findResource(String) to find the resource.

Parameters:
name - The resource name

dark008 发表于 4-8-2010 11:29:48

多谢楼上两位高人:lol

其实我写code有点不求甚解的,管它什么getClass+getResource+............,只要它能实现我要的功能,直接copy就完了。:lol

感觉这就是高级语言的不足,咱们看不到底层是怎样实现的(对于研究JDK底层和源码的圣人除外),getClass什么的用法,定义都是SUN告诉咱们的,他怎么说咱们就怎么用,但是为什么要加上这一个类,多设计上这一行代码,就不是咱们考虑的问题了。

这时候挺怀念在硬件上写C的日子,任何语句的实现过程都有直观的硬件含义,容易理解多了。

key 发表于 4-8-2010 11:57:16

呵呵,刚开始是这样了,慢慢就会求甚解。

原帖由 dark008 于 4-8-2010 11:29 发表 http://www.freeoz.org/ibbs/images/common/back.gif
多谢楼上两位高人:lol

其实我写code有点不求甚解的,管它什么getClass+getResource+............,只要它能实现我要的功能,直接copy就完了。:lol

感觉这就是高级语言的不足,咱们看不到底层是怎样实现的(对 ...

dark008 发表于 4-8-2010 15:34:57

回复 #6 key 的帖子

呵呵呵,也许吧,现在先把东西做出来再说,可能到以后做得深入了,都开始考虑到代码安全和可靠性了,再去研究细节吧。:lol

不过真正研究这些语法细节也很枯燥的,有那个功夫,都可以多做出几个项目了。

准备买悉尼公寓 发表于 5-8-2010 23:20:08

提高都靠查错,我的经验:L

写东西,写多了,90%的工作就是CTRL+C +V

准备买悉尼公寓 发表于 5-8-2010 23:20:41

还有优化~这个忘了

key 发表于 5-8-2010 23:57:52

我写过7万行的 C 系统,印象中没有一行是copy & paste

原帖由 准备买悉尼公寓 于 5-8-2010 23:20 发表 http://www.freeoz.org/ibbs/images/common/back.gif
提高都靠查错,我的经验:L

写东西,写多了,90%的工作就是CTRL+C +V

key 发表于 5-8-2010 23:59:00

语法不需要研究,直接把specification读完就行了,或者上一个课程下来,什么都懂了。
语法是小事

原帖由 dark008 于 4-8-2010 15:34 发表 http://www.freeoz.org/ibbs/images/common/back.gif
呵呵呵,也许吧,现在先把东西做出来再说,可能到以后做得深入了,都开始考虑到代码安全和可靠性了,再去研究细节吧。:lol

不过真正研究这些语法细节也很枯燥的,有那个功夫,都可以多做出几个项目了。

dark008 发表于 6-8-2010 01:30:04

回复 #11 key 的帖子

好的,有空再去折腾这些事,现在的问题是没空啊:lol

dark008 发表于 6-8-2010 01:44:59

回复 #10 key 的帖子

好像C程序用CTRL+C +V确实比Java少很多,不过有还是有的,也可能是我写的不够精炼吧。

不过程序的关键不在乎多少行的,而在与可靠性和可维护性(公司里的一高人说的),只要功能一样,编译之后都是一样的,又不会因为我的C代码写长了占用更多的硬件存储空间。

Anyway,请大家继续探讨,我已经快一年没写C了,在一边旁听就成。:lol

准备买悉尼公寓 发表于 6-8-2010 12:15:12

原帖由 key 于 5-8-2010 23:57 发表 http://www.freeoz.org/ibbs/images/common/back.gif
我写过7万行的 C 系统,印象中没有一行是copy & paste



你执着,我懒惰,哈哈;P ;P

你玩儿的新东西,当然没处去copy啦,我玩儿的是老东西,当然把原来写的copy过来啦。其实我说的copy的意思是拿过来用,

譬如说吧,一个简单的UCOS2,核你是不要重新写的,人家给你干好了,你要自己写,估计也没那水平

移植一下,写几行asm,重新定义下数据类型,搞几个中断向量列表,事情也差不多了,系统上的应用软件,如果和以前的类似,还是把以前的拿过来用:victory: :victory: 不过就是升级了一个cpu嘛

只是举个例子,和你干的应该没有任何相似性,不过你不能否认,咱这也是软件工作

唉,回帖,饭都没吃好,坚决不回贴了,好好吃饭

key 发表于 6-8-2010 13:09:17

为什么不封装成库来用呢?
我就是因为懒,所以从来不copy & paste。

原帖由 准备买悉尼公寓 于 6-8-2010 12:15 发表 http://www.freeoz.org/ibbs/images/common/back.gif


你执着,我懒惰,哈哈;P ;P

你玩儿的新东西,当然没处去copy啦,我玩儿的是老东西,当然把原来写的copy过来啦。其实我说的copy的意思是拿过来用,

譬如说吧,一个简单的UCOS2,核你是不要重新写的,人家给 ...

准备买悉尼公寓 发表于 6-8-2010 13:34:58

原帖由 key 于 6-8-2010 13:09 发表 http://www.freeoz.org/ibbs/images/common/back.gif
为什么不封装成库来用呢?
我就是因为懒,所以从来不copy & paste。



这是一个好问题,

如果一开始你就有一个好的结构,那OK。
如果你就需要写这一次,而且下次再也不会用了,你会封装吗?
类推,如果3个月或者1年才升级一次,升级你就需要改个版本号而已,你会封装吗?

我觉得你的回答应该是:会,这是你坚持的,呵呵:good 我支持你的观点,就是不这么做而已

电子工程师和软件工程师总是互相看对方的工作不顺眼,都有优越感,我很有感触:L :L
软件工程师说,你那写的什么破玩意儿,模式不好,结构不好,调试困难,升级繁琐
电子工程师说,你那破玩意儿有什么用?微软马上出个新产品,你那玩意儿就是狗屎

;P ;P ;P ;P ;P ;P ;P ;P ;P ;P ;P ;P ;P ;P ;P

楼又歪了:D

dark008 发表于 6-8-2010 14:23:50

回复 #16 准备买悉尼公寓 的帖子

楼歪得好;P ,欢迎大家接着扯

woodheadz 发表于 6-8-2010 14:30:34

原帖由 准备买悉尼公寓 于 6-8-2010 13:34 发表 http://www.freeoz.org/ibbs/images/common/back.gif
电子工程师和软件工程师总是互相看对方的工作不顺眼,都有优越感,我很有感触
软件工程师说,你那写的什么破玩意儿,模式不好,结构不好,调试困难,升级繁琐
电子工程师说,你那破玩意儿有什么用?微软马上出个新产品,你那玩意儿就是狗屎

呵呵,这个就是屁股决定脑袋的典型案例了。
电子工程师没有软件工程师的经历,当然不能理解模式和结构对软件工程师的重要了。
我是做软件的,不太了解电子工程师的工作。我猜电子工程师不重视程序结构模式的原因是不是因为代码在你们的工作中只占很小的一部分,一般真正会给你们带来麻烦的大多不是代码上的问题而是硬件上的问题?

dark008 发表于 6-8-2010 15:10:13

回复 #18 woodheadz 的帖子

差不多是这样的,电子工程师写code肯定没有软件工程师多,当然写出的软件结构也要逊色一些。电子工程师关心的也确实主要是硬件问题,很多时候没有任何错误的程序在电路板上就跑不起来,这时候就是电子工程师的事了。

简单来说,电子工程师的职责是把东西做出来,把电路板设计好,调试好,code写好,实现了功能就OK。

而软件工程师做的是软件的结构和code优化,包括提高软件可靠性和可维护性。可能软件工程师做的是:优化代码让软件运行的时候少用几个寄存器,优化算法让软件跑起来用更少的时间,优化结构让软件方便维护和升级。

所以二者还是很不一样的。

准备买悉尼公寓 发表于 6-8-2010 15:19:54

我只说我,不是我们,我代表不了我们,:lol :lol

硬件有问题,全部报废。软件,咱有的是办法。
我做的东西,串口,网口,蓝牙,红外,拨号猫,GPRS,无线网,该有的全有:lol :lol :lol :lol 自动远程升级,很easy。
但谈这些没什么意义,咱玩儿的软件和你玩儿的不一样。估计你那应用层的,要发布到客户那里,运行在PC里面的。在我看来,浮在上面的而已,能做的人多了去了。你不靠windows永远玩不起来。LINUX一样。
虽然都是软件,讨论起来没有意义。
什么不能hardcode,操作系统都是我写的,还不能hardcode,不是好笑吗。我的产品也发布到客户那里,客户安装好,产品自动给我干活,OK,封闭的。
我的产品也卖给第三方公司,他们做二次开发,在我提供的API的基础上做,重复下,是我提供的API函数。

-----------------------------------------华丽的分割线------------------------------------------------------------------------------------------------

现在不是上面的想法了。人老了,心态就变了很多。
还是年轻时候有冲劲啊。:Q :Q :Q :Q

------------------------------------------还是很华丽-------------------------------------------------
我当然不否认软件开发的规则,定义对于电子工程师做软件也同样重要。

只是觉得,没事儿上升到理论的高度,有点累:lol :lol
再自吹自擂一下,哎呦那个酸呐~~

woodheadz 发表于 6-8-2010 15:49:05

原帖由 准备买悉尼公寓 于 6-8-2010 15:19 发表 http://www.freeoz.org/ibbs/images/common/back.gif
我只说我,不是我们,我代表不了我们,:lol :lol

硬件有问题,全部报废。软件,咱有的是办法。
我做的东西,串口,网口,蓝牙,红外,拨号猫,GPRS,无线网,该有的全有:lol :lol :lol :lol 自动远程升级,很ea ...
呵呵,还好碰到的是已经“人老了”的你,要不然我们这种只会在别人的操作系统上“做应用层”的人,岂不是要被你鄙视致死? :lol
我也老啦,当年大学的时候咱玩儿的硬件和你玩的也不一样,那时我们是拿着木板+电线搭与或非门做“CPU”的,不像你们还要买芯片,离了别人的芯片就永远跑不起来。我爹当年玩的硬件更牛,人家直接用算盘搞定一切,连电都不用。:lol
现在老啦,就只会写写代码喽...:D

准备买悉尼公寓 发表于 6-8-2010 15:54:47

确实是的,那个时候,在操作系统上做开发的确实被我鄙视致死,这没什么不好意思承认的。

准备买悉尼公寓 发表于 6-8-2010 15:56:13

现在依然觉得做应用层没什么,很简单,我也能做,好坏而已。我确实是这么想的,你不能不让我这么想啊,是吧?

woodheadz 发表于 6-8-2010 15:56:44

原帖由 准备买悉尼公寓 于 6-8-2010 15:54 发表 http://www.freeoz.org/ibbs/images/common/back.gif
确实是的,那个时候,在操作系统上做开发的确实被我鄙视致死,这没什么不好意思承认的。
难道你就是那个传说中用小刀在硬盘上刻操作系统的师兄? :funk:

准备买悉尼公寓 发表于 6-8-2010 15:57:48

就是这么想的,没办法啦,你真给我个任务,我也真的能干起来,别管我用什么东西做,做的好不好,是吧。
给你个电子工程师的活,你抓瞎了吧?

准备买悉尼公寓 发表于 6-8-2010 15:59:53

原帖由 woodheadz 于 6-8-2010 15:56 发表 http://www.freeoz.org/ibbs/images/common/back.gif

难道你就是那个传说中用小刀在硬盘上刻操作系统的师兄? :funk:

明明用的是大头针:Q :Q :Q 中指都要断了,刻的

woodheadz 发表于 6-8-2010 16:00:21

原帖由 准备买悉尼公寓 于 6-8-2010 15:56 发表 http://www.freeoz.org/ibbs/images/common/back.gif
现在依然觉得做应用层没什么,很简单,我也能做,好坏而已。我确实是这么想的,你不能不让我这么想啊,是吧?
是啊,只是好坏而已。:lol

pinxinge 发表于 6-8-2010 16:02:12

准备买悉尼公寓 发表于 6-8-2010 16:04:00

原帖由 woodheadz 于 6-8-2010 15:49 发表 http://www.freeoz.org/ibbs/images/common/back.gif

呵呵,还好碰到的是已经“人老了”的你,要不然我们这种只会在别人的操作系统上“做应用层”的人,岂不是要被你鄙视致死? :lol
我也老啦,当年大学的时候咱玩儿的硬件和你玩的也不一样,那时我们是拿着木板+电线 ...

你大概和我差不多大,但你记性不太好,我也记得面包板加电线和与非门之类的,还有发光的8字管,似乎要有BCD码解码器的吧,但那个是脉冲数字电路的实验

模拟CPU的是计算机原理的实验课,一个大箱子,里面有键盘的,0101的键盘,自己写汇编语言,然后查表,翻译成01010101,输入进去,运行看结果,嘿嘿~~~~~~

我记性比你好;P ;P

coredump 发表于 6-8-2010 16:07:13

以上若干回复为IT男讨论问题退化的经典模式:lol

与之非常类似的是宅男们讨论小JJ长短
页: [1] 2
查看完整版本: 有人能从语法上分析getClass().getResource(String blahblah)吗?