《Java程序设计语言(第4版)》阅读笔记(2)-类与对象
类有三种成员:字段、方法和嵌套类与嵌套接口。学习类,可以从这三种成员的声明、修饰符、初始化(包括类对象创建)和使用这些角度展开。这里主要讲的是字段和方法。
声明
字段的声明为,修饰符(可选)、类型名、字段名、初始化子句(可选);
方法的声明为,修饰符、返回类型、方法签名(方法名、参数列表)、异常和方法体。
修饰符
整理总结成了一张表,如下:
每一类修饰符,都可以展开成一个很庞大的话题,这里不展开了。表中,“是”表示可以有,“否”表示不适用。
初始化
字段初始化,最直接的就是使用初始化子句。字段初始化子句,可以是常量、其他字段和方法的调用。注意:(1)初始化子句必须保证类型正确;(2)初始化子句不能抛出异常。未被初始化的字段会被赋予默认的初始值。
对象初始化,必须显示初始化。初始化的方式是构造方法(书中称为构造器)和初始化段(类里面,除了字段、方法、嵌套类和嵌套接口之外的用{}包括的代码段,或者用static{}包括的代码段,后者又称静态初始化,显然只能对静态数据成员进行初始化)。
使用
这里有一点颠覆了我的认识,即Java中的方法都是按值传递的,没有按引用传递的。给个测试的例子代码,如下:
1 class A 2 { 3 int v = 0; 4 } 5 6 class B 7 { 8 public static void main(String[] args) 9 { 10 A a = new A(); 11 System.out.println(a.v); 12 foo(a); 13 System.out.println(a.v); 14 foo2(a); 15 System.out.println(a.v); 16 } 17 18 public static void foo(A a) 19 { 20 a.v = 1; 21 } 22 23 public static void foo2(A a) 24 { 25 a = new A(); 26 a.v = 2; 27 } 28 }
如果按照以往的按引用传递的观点,输出的值应该是 0、1 、2(分三行显示,下同),而实际是 0、1、 1。这说明了,传递给foo2的参数a,仍然只是一个拷贝,也就是按值传递的意思。
欢迎转载,同时请注明出处