介绍一些Java语言的细节。

this

this关键字只能在方法内部使用,表示对“调用这个方法的对象”的引用。如果在同一个方法内部调用同一个类的另一个方法,不必使用this。返回对当前对象的引用有的时候是一种有效的方法。经常在构造器中使用this。

static

static方法就是没有this的方法。在static方法的内部不能调用非静态方法,反过来是可以的。通过类本身调用static方法,实际上正是static方法的主要用途。

static确实具有全局语义。如果代码中出现大量的static方法,就该重新考虑自己的设计了。

无论创建多少个对象,静态数据都只占用一份内存区域。static关键字不能应用于局部变量,因此它只能作用于域(类的成员变量)。

构造器是静态方法。

初始化

Java尽量保证,所有变量在使用前都能得到恰当的初始化。

对于方法的局部变量,Java以编译时错误的形式来贯彻这种保证。

对于类的数据成员则略有不同。如果类的数据成员是基本类型,则会被赋予一个初始值。

  • boolean -> false
  • char -> 0(显示为空白)
  • byte/short/int/long -> 0
  • float/double -> 0.0
  • 对象引用 -> null

Set集合

Set 转 String[]:

String[] array = set.toArray(new String[0]);

但是这通常不是好的,摘自stackoverflow:

When you pass toArray() an array of too small size, the toArray() method has to construct a new array of the right size using reflection. This has significantly worse performance than passing in an array of at least the size of the collection itself. Therefore [0] should be replaced with [myset.size()] as in the accepted answer.

String[] array = set.toArray(new String[set.size()]);