??xml version="1.0" encoding="utf-8" standalone="yes"?>
在说 Reflection 之前Q我感觉q是先对静态语a和动态语a有一个了解比较好Q下面来看一下一些资料:
1 ?/span> http://cavingdeep.cnblogs.com/archive/2005/08/03/206374.html 说明了什么是静态的Q什么是动态的Qȝ一下就是:
动态语aQ准地_是指E序在运行时可以改变其结构:新的函数可以被引q,已有的函数可以被删除{在l构上的变化。比如众所周知?/span>
ECMAScript(JavaScript)
便是一个动态语a。除此之外如
Ruby
?/span>
Python
{也都属于动态语aQ?/span>
C
?/span>
C++
{语a则不属于动态语a。(通俗的说法就是:静态的是事先进行规划,考虑到后面需要做的一些事情;而动态的是管他后面会是怎么样呢Q先开始再_要的是速度Q呵呵,q有点和我们生活中做人做事的方式有些怼
~
Q?/span>
2
?/span>
http://www.javaeye.com/topic/35763
对动态语a和静态语a的一个比较新颖的认识Q主要从内存的分配和利用情况来说的,也就是说Q动态语a不事先分配内存,到用的时候再_而静态语a会先分配内存Qƈq行查,大了放不下啊Q呵?/span>
3
?/span>
http://robbin.javaeye.com/blog/33971
讨论了静态语a和动态语a在开发方面的优势和用情늭Q还在讨ZQ不好定论?/span>
注:一般来_静态语a比较Ҏ调试Q而动态语a不太Ҏ调试Q因为变数太多,呵呵?/span>
׃静态语a不够灉|Q再加上现在随着pȝ的扩大,以及框架建立的需要,所以说静态语a也需要越来越多的动态的Ҏ,而作为现在首当其冲的 Java 语言Q也要通过反射Q在执行期间做一些动态的调整以适应多变的需求?/span>
?/span> Reflection 机制中,最重要的一个类是 Class c,q里面记录了我们所定义?/span> class 中的一些信息,我们可以通过其获得我们定义的 变量、方法、构造函C及父cȝ{,q且可以动态的对其q行调用Q这样就可以在某些时候将我们没有事先设计的代码在q行期间执行Q而不对原有的E序q行改变?/span>
具体的用样例可以参考: Core Java 2 W六、七版,或者侯L java Reflection 教程Q下载地址Q?a href="/Files/wqhtomcat/Java">http://www.aygfsteel.com/Files/wqhtomcat/Java反射机制-javatwo-2004-reflection.rarQ?/span>
2?span style="FONT: 7pt 'Times New Roman'">
׃ Java 范型的实现采用的?/span> Erasure 方式Q仅仅是在编译期q行查,所以在q行q程中我们就不能q行范型的实例化Q因为我们不知道到底要实例化什么类型的对象Q与原来我们手动q行强制cd转换的一P我们如果知道我们能够转换成什么对象,那么我们可以将我们知道的类型的信息传递过去,也就是吧 XX.class 传递过去,q样 jvm q道我们要实例化什么样的对象了?br />3?span style="FONT: 7pt 'Times New Roman'">
原来 Class<T> 表示的是一个范型的 Class cdQؓ什么搞的像 List<T> 样式的范型声明呢Q搞得我qL了好长时_一致以为是一个类似容器的东西呢,q个语法感觉到有些奇怪,见笑了:Q,q个cM般用来接?/span> XX.class q回的对象?/span>4?span style="FONT: 7pt 'Times New Roman'">
要想?/span> java 中范型用得爽Q还得配合用反才行啊。由?/span> Java 采用了擦拭法q行范型的支持,所以我们依旧不能在q行期获取到具体的类型的信息Q而至能够在我们进行设计的时候对其类型信息进行指定,那么我们指定的类型的信息可以存攑֜~译后生成的 class 文g中了Q我们可以通过反射来获取到具体的存攄信息Q要获取到动态的传入的信息就不行了?/span>
如下所C:
定义一个超c:
再定义一个子c:
那么我们只能够获得我们实现定义好的要传入?/span>
SuperClass
cM?/span>
Integer
cd的范型信息,而不能得到我们在E序中传入的
Shit
cȝcd信息Q因?/span>
java
范型的信息不记录的实例中Q仅仅在cMq行了记录(q点感觉
java
的范型还不够成熟Q可能因向后兼容{原因吧Q?/span>
参考资料:
http://www.duduwolf.com/wiki/2006/51.html
http://calvin.javaeye.com/blog/33139 白衣?/span> SpringSide 中对范型使用的说?/span>
http://www-128.ibm.com/developerworks/cn/java/j-jtp01255.html Java 理论和实践关于范型的讲解
http://www.nirvanastudio.org/java/dont-repeat-the-dao.html 范型实现可重?/span> DAO 的文?/span>
http://buaawhl.javaeye.com/blog/22020 范型的实现原理,讲的比较清楚
在进?/span> Log4J 的用过E中Q我对下面的两个问题比较敏感Q?/span>
1?span style="FONT: 7pt 'Times New Roman'">
Log4J 是如何进行工作的Q?/span>q是?/span> Log4J 目中对 Log4J 的介l中的一D话
With log4j it is possible to enable logging at runtime without modifying the application binary. The log4j package is designed so that these statements can remain in shipped code without incurring a heavy performance cost. Logging behavior can be controlled by editing a configuration file, without touching the application binary.
对于 Log4J 的具体如何进行工作的原理Q在 javaeye ?/span> buaawhl l出了一个解释:
http://buaawhl.javaeye.com/blog/6450
ȝ一下就是利?/span> JDK 提供?/span> new Throwable().getStackTrace() Ҏq回当前q行栈的l构层次Q然后对q回的调用栈的信息进行分析,扑ֈ调用该类的类的名U。(也就是Log4J自己说的Runtime期间实现LogQ?/span>
׃?/span> Log4J ?strong>只存在一个根 Logger Qƈ?/span> Logger 之间存在l承的关p?/strong>Qƈ且我们可?strong>在配|文Ӟ log4J.proerties 或?/span> XML Q中q行配置Q可以初始化指定?/span> Logger Qƈ且对指定?/span> Logger q行一些相关的配置Q如讄如何q行输出Q以及如何将输出q行布局。ƈ且由?/span> Logger 之间会存在承的关系Q会找一个最q的 Logger q行l承Q如果没有就以根 Logger 作ؓ父类Q共享父cȝ配置信息Q,以及父子cM间初始化没有先后的顺序,所以我们可以在配置文g中,对各个程序以及不同的包中使用?/span> Log4j ?/span> Log U录方式q行配置?/span>
如果在同一?/span> APPLICATION 对相同名U的 Logger q行调用Q那么只会返回一?/span> Logger 实例?/span>
2?span style="FONT: 7pt 'Times New Roman'">
Log4J 会不会对pȝ的性能造成大的影响Q?/span>
q是?/span> Log4J 性能的一些描qͼ看来q是不错的,呵呵Q在调整一?/span> Log 的等U就可以了?/span>
On an AMD Duron clocked at 800Mhz running JDK 1.3.1, it costs about 5 nanoseconds to determine if a logging statement should be logged or not. Actual logging is also quite fast, ranging from 21 microseconds using the SimpleLayout, 37 microseconds using the TTCCLayout. The performance of the PatternLayout is almost as good as the dedicated layouts, except that it is much more flexible.
注:对于 Common Logging ?/span> Log4J 的关pd以参?/span> Q其?/span> JCL 是一个规范,对一?/span> Log 工具q行了包装,我们怼使用到的具体实现q是 Log4j Q当然也可以使用其他的实玎ͼ
http://hedong.3322.org/archives/000316.html
参考资料:
http://www-128.ibm.com/developerworks/cn/java/l-log4j/index.html 使用 Log4J q行日志操作
http://zooo.51.net/heavyz_cs/notebook/log4j.html Log4J 学习W记Q推荐)
http://www.dingl.com/view.shtml?xh=485 log4j 配置
http://hedong.3322.org/archives/000193.html 竹笋炒肉?/span> Log4J 学习W记
http://forum.springside.org.cn/redirect.php?fid=3&tid=382&goto=nextoldset SpringSide ?/span> Log4j 的用要?/span>