work-2014-01-27

今天的效率十分的低,让我自己都有点看不下去了。

今天所做的全部工作就是看了《Java编程思想》的构造器这一章,但是看了这一章之后的收获还是挺多的。下面是我简单记录的一些知识点。

构造器没有返回值(与返回值void是不同的),在创建对象的时候调用。

构造器是强制重载方法名的一个原因。参数顺序的不同,也可以用来区分重载方法。重载中,如果传入的基本数据类型小于方法中的声名的形式参数类型,实际数据类型就会被提升。

编译器会暗自把所操作对象的引用作为第一个参数传递给方法。这个偷偷传入的对象用this关键字表示,this关键字只能在方法内部使用。表示对“调用方法的那个对象”的引用。如果在方法内部调用同一个类的其它方法,就不必使用this。只有当需要明确指出当前对象的引用时,才使用this关键字,比如返回语句中,return this

在构造器中调用构造器,使用this关键字,在构造器中如果为this添加参数列表,将产生对符合此参数列表的某个构造器的明确调用,但是一个构造器中只能调用一次

static 方法就是没有this的方法,static方法内部不能调用非static方法

Java允许在类中定义finalize()方法,释放特殊的区域,finaliz在垃圾回收的时候起作用。垃圾回收机制只回收由new产生的空间
1、对象可能不被垃圾回收
2、垃圾回收并不等于析构

finalize()主要用在本地方法中,本地方法也就是在Java中调用非Java代码的方式。本地方法目前只支持C和C++,但是它们又可以调用其它代码

System.gc()可以强制进行终结动作

字节码要比展开后的本地机器码小很多

为某个变量进行赋值的时候,可以在定义类成员变量的地方为其赋值(C++不可以这样做),基本类型和非基本类型都可以,甚至可以调用某个方法进行初始化。

构造器初始化。初始化顺序:即使变量定义散步于方法定义之间,它们仍旧在任何方法(包括构造器)被调用之间被初始化。

静态初始化只有在第一次访问静态数据的时候才被初始化,此后静态成员不会再被初始化。

显式的静态初始化:Java允许将多个静态初始化动作组织成一个特殊的“静态子句”

1
2
3
4
5
static int i;
static {
i = 1;
}

非静态对应的初始化

1
2
3
4
5
6
7
int i;
int j;
{
i = 1;
j = 2;
}

数组的初始化,int[] a = {1, 2, 3}

Arrays.toString()是java.util标准类库,将产生一维数组的可打印版本。

自动包装机

可变参数列表

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
class A {}
public class VarArgs {
static void printArray(Object[] args) {
for(Object obj : args) {
System.out.print(obj + " ");
}
System.out.println();
}
static void newPrintArray(Object ... args) {
for(Object obj : args) {
System.out.print(obj + " ");
}
System.out.println();
}
public static void main(String[] args) {
printArray(new Object[] {
new Integer(1), new Float(2.1), new Double(3.13)
});
printArray(new Object[] {"one", "two", "three"});
printArray(new Object[]{new A(), new A(), new A()});
newPrintArray(new Object[] {
new Integer(1), new Float(2.1), new Double(3.13)
});
newPrintArray(new Object[] {"one", "two", "three"});
newPrintArray(new Object[]{new A(), new A(), new A()});
}
}

枚举类型,enum。
enum实际上也是一个类,只是其中包含了特殊的类方法,在但因的时候使用ordinal方法可以打印出enum变量的值,而直接打印则是字符串的形式。


下面谈一点感受,到现在,发现我没有一种语言是非常熟悉的,这里的熟悉是指要能够充分云中这种语言的特性,写出高质量的代码,以前的层次都始终停留在写出代码上,写出来就不用说代码的质量到底怎么样了,这一点是很大的问题。我现在最紧迫的任务是要能够将一门或者几门语言练到熟练的地步,这才是继续往下走的基础,也只有这样,才可能取得更多的进步。