ITEEDU

Java Gossip: 类别成员(Class member)

在Java中,一个类别可以定义Field成员及方法(Method) 成员。

先来定义一个程序:

Ball.java
public class Ball {
	private double radius; // 半径
	private String name;?// 名称
	public void setRadius(double radius) {
		this.radius = radius;
	}
	public void setName(String name) {
		this.name = name;
	}
	public double getRadius() {
		return radius;
	}
	public String getName() {
		return name;
	}
	public double getVolumn() {
		return 4/3 * Math.PI * radius * radius * radius;
	}
}?

在Java中,类别的存取权限修饰词有"public"、"protected"、"private"三个,如果在宣告成员时不使用存取修饰词,则预设以套件 (package)为存取范围,也就是说在package外就无法存取,这些存取修饰,之后在 套件(package) 还会见到说明。

在这个程序中,您定义了一个Ball类别,当中定义了radius与name两个field成员,这两个资料成员被宣告为"private",表示它是 「私用成员」(Private member),它只能在同一个类别中被使用,不可以直接藉由对象参考名称来存取它。

再来看到方法(Method)成员,它被宣告为"public",表示它可以被程序呼叫,一个方法成员为一小个程序片段或一个单元(Unit),这个程序 片段可重复被呼叫使用,并可传入自变量或传回一个数值,一个方法成员的基本宣告与定义方式如下 :

存取修饰 传回值型态 方法名称(参数列) {
// 实作
return 传回值;
} 

参数列用来告知方法成员执行时所需的数据,如果传入的自变量是基本数据型态(Primitive data type),则会将值复制至参数列上的变量,如果传入的自变量是一个对象,则会将参数列上的变量参考至指定的对象。

方法区块中可以宣告变量(Variable),变量在方法执行结束后就会自动清除,如果方法中的变量名称与类别数据成员名称同名,则方法中的变量名称会暂 时覆盖类别field数据成员的作用范围,同样的自变量列上的自变量名称也会覆盖field数据成员的作用范围,如果此时要在方法区块中使用 field成员,可以使用this关键词来特别指定。

方法的传回值可以将计算的结果或其它想要的数值、对象传回,如果是对象,则将传回的对象给接受的变量参考。

在对象导向程序设计的过程中,有一个基本的原则,如果field成员能不公开就不公开,在Java中就是宣告其为"private",这是「信息的最小化」,所以在程序中,private成员就经由setXXX()与getXXX()的公开方法来进行设定或存取,而不是直接呼叫该 field数据成员来存取。

Math.PI是由Java所提供的功能变量,它定义了圆周率3.14159......,在Math类别中还包括有许多公用的数学功能函式,您可以自行查询 java.lang.Math 在线说明文件以得知这些功能。

另外可以注意到,autoboxing、 unboxing 在方法的参数列中是可以作用的,也就是说如果您的方法中是这样设计的:

public class SomeClass {
	....
	public void someMethod(Integer integer) {
		......
	}
	....
}

您可以使用这样的方式来设定自变量:

SomeClass someObj = new SomeClass();
someObj.someMethod(1);

autoboxing、unboxing会自动作用,但记得要小心使用这个功能。

一般在命名类别时,类别名称首字会大写,而方法名称首字是小写,名称命名时以一目了解名称的作用为原则,上面所采取的都是骆驼式的命名方式,也就是每个单字的首字予以适当的大写,例如someMethodOfSomeClass这样的方式,这是常见的一种命名惯例。

为field成员设定setXXX()或getXXX()这类的方法时,XXX名称最好与field名称相对应,例如name这个field 成员对应的方法,可以命名为setName()与getName(),而radius这个成员,则对应于setRadius()与getRadius() 这样的名称,如此阅读程序时可以一目了解setter与getter方法的存取对象。