大可制作:QQ群:31564239(asp|jsp|php|mysql)

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方法的存取对象。