温故知新:nested class & inner class

如果不是去读 Android 的源码,我不会想到在自己的 toolkit 里还有 inner class 这么一把小“锉刀”。如果不是发现non-static variable this cannot be referenced from a static context,我不会想到去查 inner class 的知识,也就不会发现自己对 inner class 的理解一直都是错误的。

七年前学习 Java 时,明白一个 class 可以定义在另外一个 class 里,编译后各自生一个后缀为 .class 的文件,此后很少用到这种方式,直到看到 Android ,叹其大量运用 inner class。当我试图对某个 inner class 进行修改,删去其类修饰符(class modifier)中的 static 时,Eclipse 给出了这样的提示:

[ Read More » ]

解读《The Open Source Developer Report》

eclipse

每一年 Eclipse 都会在社区内部进行一项调查,来了解开发者的动态,前不久他们公布了2010年的调查报告,从中可以看到一些有趣的趋势。

先从大的方面来看,我觉得有三个亮点,首先是越来越多的开发者采用 Linux 做为自己的 OS,我想这和 Eclipse 社区成员大多是开源“粉丝”这一现状有关,Eclipse 本身是 Open Source,它的用户绝大部分不会是 .net 程序员,因此不是非要使用 Windows。以我为例,Java, PHP, Python, Ruby, C, MySQL 是我经常接触到的技术,个人环境使用 Linux 完全可以胜任,不过公司环境还是使用 Windows,–这不是我能够控制的。

[ Read More » ]

小试 MD5 和 DES

读书那会儿,觉得密码学是个很难懂的学科,工作以后,加密和解密也基本没什么接触。不巧的是,眼下正好要有一项工作,需要对加密文件进行解密,具体的步骤如下:

  • 步骤1:对设备编号进行MD5加密,生成解密密钥;
  • 步骤2:对.cepub文件使用解密密钥进行DES解密,并生成文件到一个临时缓冲区。

书到用时方恨少,一番查阅 API 和 Google,期间找到两篇不错的资料 Java 加密技术(一)和 Java 加密技术(二),解了燃眉之急,顺便提一下,这两篇资料的作者也是《Java 加密和解密的艺术》一书的作者。

[ Read More » ]

认知 Java Class Loading

对 Java Class Loading 的认知,从OOP (Object Oriented Programming) 界的一句谚语开始,那就是:Everything is Object。以现实举例,张三是对象(object),李四也是对象(object),对这些个体加以抽象,形成了类(class)的概念。这类和对象的区别在于,前者是抽象的概念,不论是时间,还是空间均不存在这么一个东西;后者是具体的物件,可摸得着、看得见。

在 Java 中使用关键字 class 来定义一个类,经过编译之后,便会生成一个后缀为 .class 的文件。在 Java 程序运行时,JVM 需要载入这些 .class 文件到内存中,已构造成对应的 类(class)。而这载入的过程正是由 java.lang.ClassLoader 的实例来完成,根据 JVM 的策略,不同的类(class)被组织进不同的 jar 文件,进而按照重要级别划分成不同的等级,由不同的 class loader 来负责载入。

[ Read More » ]

Static Import 和 Constant Interface Antipattern

某日,一同事向我询问 Java 5 中为何要引入 Static Import,一时答不上来,自责平日里“学而不思”,Java 5 的发布已经是六年前(2004年9月30日)的事情了,到现在也只是“知其然”,而不“知其所以然”,之后遂决定对这一问题做一番探究。

此番探究从 SUN 的官方解释入手,从 Static Import 一文中,可以明白引入的目的在于解决 Constant Interface Antipattern。那么什么是 Constant Interface Antiparttern ? 这要从访问 static member 开始说起,如下面代码所示,在 member 之前需要有其对应的类名。

[ Read More » ]