了解下JAVA的也说Java的双括符初始化:实在就是使人隐晦的不标准代码
C++编译的是本地码,优点是启动快,而且可以精确控制资源因此可以开发很高效的程序.缺点是编程麻烦,而且容易留下安全隐患.跨平台靠源代码在各个平台间分别编译(一处编写到处编译)初看cgaolei翻译的Java技能之双括弧初始化一文,蜻蜓点水,只知用法,未细看前面的注释。蔚为冷艳,内心想Java居然有这么奇妙的语法而一向未得知。由于在初始化汇合时的确便利很多。本来做某些测试要初始化汇合时会用到commons-lang包和JDK的Arrays工具类,如今晓得能够这么用了:
01.Map map = new HashMap() {{
02. put("Name", "Unmi");
03. put("QQ", "1125535");
04.}};
05.
06.List stooges = new ArrayList() {{
07. add("Larry");
08. add("Moe");
09. add("Curly");
10.}};
看起来都是在一条语句里完成,而不必要分步骤写成:
1.Map map = new HashMap();
2.map.put("Name","Unmi");
3.map.put("QQ","1125535");
一不当心没好好了解的人大概觉得它是甚么出格的语法,关头是年夜括号连一块了,原作者也是在故作姿势,美其名曰:双括弧语法(double-bracesyntax)。真是乱用渐欲诱人眼,实在就是匿名类加初始块。该文有注释:第一层括弧实践是界说了一个外部匿名类(AnonymousInnerClass),第二层括弧实践上是一个实例初始化块(instanceinitializerblock),这个块在外部匿名类机关时被实行。
那怎样往更好了解它呢?假如我们写成以下的体例应当会更好了解吧,提个技能,在Eclipse中对第一段代码按下Ctrl+Shift+F就以下了:
1.Map map = new HashMap() {
2. {
3. put("Name", "Unmi");
4. put("QQ", "1125535");
5. }
6.};
实在就是匿名类啊,会创立出一个HashMap的子类来,匿名类中一个{}括起来的初始化块,内里天然可安排初始化代码。{}块中的代码编译后会放到<init>(),也就是机关办法中往,以是可用来初始化实例。假如是写在TestDoubleBrace类中,编译后你会看到会天生TestDoubleBrace$1.class文件,反编译该文件内容是:
01.final class com.unmi.TestDoubleBrace$1 extends java.util.HashMap{ //创立了一个 HashMap 的子类 TestDoubleBracke$1
02.com.unmi.TestDoubleBrace$1();
03. Code:
04. 0: aload_0
05. 1: invokespecial #8; //Method java/util/HashMap."<init>":()V //{} 中的代码放到了机关办法中往了
06. 4: aload_0
07. 5: ldc #10; //String Name
08. 7: ldc #12; //String Unmi
09. 9: invokevirtual #14; //Method put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
10. 12: pop
11. 13: aload_0
12. 14: ldc #18; //String QQ
13. 16: ldc #20; //String 1125535
14. 18: invokevirtual #14; //Method put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
15. 21: pop
16. 22: return
17.
18.}
以是说白了,甚么双括弧语法啊,就是代码写得不标准,才使得那末的使人隐晦。假如还不克不及了解,再列两个习用代码来:
01.JFrame frame = new JFrame();
02.frame.addMouseListener(new MouseAdapter() {
03. public void mouseClicked(MouseEvent e) {
04. // do womething here.
05. }
06.});
07.
08.Thread thread = new Thread() {{ // 也学着样把年夜括号也连一块写了
09. this.setName("功课处置线程");
10. }// 假如不从头界说 run() 办法,那末前面谁人年夜括号也能与这个并一块
11.
12. public void run() {
13. // do something here.
14. }
15.};
16.thread.start();
应当没成绩了吧,下面是事务监听器和多线程经常使用的写法,假如他不把年夜括号连在一同,而是标准的写代码,信任您一入手下手也不会对所谓的DoubleBraceSyntax有太多的狐疑。要说这类初始化办法使用到汇合中还挺便利的,只是无故的多了些匿名类。
刚入手下手我看到这类双括符写法也是把它奉若圣经,对它只一孔之见,今天在用XStream把一个对象天生XML文件时,个中有一个List属性,我就借用了这类双括符法来初始化元素,了局天生的XML文件走了样,缘故原由是XStream的Converter能处置ArrayList,但没法很好的处置天生的ArrayList的匿名子类。因而才转头仔细的从头审阅了一番这个所谓的双括符初始化语法。
什么时候上述的三种开发工具能和三为一,什么时候java的竞争力才更强,才有机会拉拢更多的程序员投入到对java的开发上,因为到时的开发工具将会比.net网页编程的更简单。还有一点也很关键,什么时候java推出的jsf能成为真正意义上的标准。 你就该学一学Servlet了。Servlet就是服务器端小程序,他负责生成发送给客户端的HTML文件。JSP在执行时,也是先转换成Servlet再运行的。虽说JSP理论上可以完全取代Servlet,这也是SUN推出JSP的本意,可是Servlet用来控制流程跳转还是挺方便的,也令程序更清晰。接下来你应该学习一下Javabean了,可能你早就看不管JSP在HTML中嵌Java代码的混乱方式了,这种方式跟ASP又有什么区别呢? 关于设计模式的资料,还是向大家推荐banq的网站 http://www.jdon.com/,他把GOF的23种模式以通俗易懂的方式诠释出来,纯Java描述,真是经典中的经典。 是一种将安全性(Security)列为第一优先考虑的语言 应用在电视机、电话、闹钟、烤面包机等家用电器的控制和通信。由于这些智能化家电的市场需求没有预期的高,Sun公司放弃了该项计划。随着1990年代互联网的发展 是一种语言,用以产生「小应用程序(Applet(s)) http://www.jdon.com/去下载,或到同济技术论坛的服务器ftp://nro.shtdu.edu.cn去下,安装上有什么问题,可以到论坛上去提问。 还好,SUN提供了Javabean可以把你的JSP中的 Java代码封装起来,便于调用也便于重用。 我大二,Java也只学了一年,觉得还是看thinking in java好,有能力的话看英文原版(中文版翻的不怎么好),还能提高英文文档阅读能力。 接着就是EJB了,EJB就是Enterprise JavaBean, 看名字好象它是Javabean,可是它和Javabean还是有区别的。它是一个体系结构,你可以搭建更安全、更稳定的企业应用。它的大量代码已由中间件(也就是我们常听到的 Weblogic,Websphere这些J2EE服务器)完成了,所以我们要做的程序代码量很少,大部分工作都在设计和配置中间件上。
页:
[1]