在Java中,一个类别可以定义Field成员及方法(Method) 成员。
先来定义一个程序:
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方法的存取对象。