Java实用教程
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

3.1 类的定义及成员变量初始化

类描述了具有相同特性和行为的对象集合,所以一个类实际上就是一个数据类型。只不过它与Java的基本数据类型有些区别。Java的基本数据类型要求使用现有的表示机器中具体的存储单元的数据类型。而类可以根据需要,通过添加Java的变量和方法来增强类的功能。这样,可以为类中添加的变量赋以初始值。

3.1.1 类的定义

基本的Java类定义格式是:

[类修饰符] class <类名> {
      <类体>
}

其中,关键字class表示定义一个类,类修饰符可以用public或默认,<类名>是Java合法的标识符名。按Java编码约定,类名的英文单词的第一个字母要大写,若由多个单词组成,则每一个单词的首字母都要大写,<类体>可以缺省,<类体>由变量定义和方法定义组成。

类的成员变量的声明格式是:

[修饰符]<类型><变量名>[= 初始值];

例如,private String name = "Tom";

类的成员方法的声明格式是:

[修饰符]<返回值类型><方法名>(形式参数列表) {
  …
}

【例3.1】 使用Point类计算点的直角坐标和极坐标。

Point.java

public class Point {
  private double x;                                  //x轴分量
  private double y;                                  //y轴分量
  public Point(double x,double y){                   // 构造方法
      this.x = x;
      this.y = y;
  }
  public double radius(){                            // 获得点的极坐标半径
      return Math.sqrt(x * x + y * y);
  }
  public double angle(){                              // 获得点的极坐标
      return (180/3.14159) * Math.atan2(y, x);
  }
  public static void main(String[] args) {
      Point p1 = new Point(10, 10);
      System.out.print("x="+p1.x+"  ");               // 打印x轴分量
      System.out.print("y="+p1.y+"  ");               // 打印y轴分量
      int i=(int)p1.angle();                      // 将double型强制转换为整型
      int j = (int) p1.radius();
      System.out.print("radius="+i+"  ");             // 打印点的极坐标半径
      System.out.print("angle="+j+"  ");              // 打印点的极坐标
      System.out.println();
      Point p2 = new Point(15, 18);
      i = (int) p2.angle();
      j = (int) p2.radius();
      System.out.print("x="+p2.x+"  ");
      System.out.print("y="+p2.y+"  ");
      System.out.print("radius="+i+"  ");
      System.out.print("angle="+j+"  ");
  }
}

程序运行结果:

x=10.0  y=10.0  radius=45  angle=14
x=15.0  y=18.0  radius=50  angle=23

3.1.2 变量的初始化

成员变量可以是Java语言中任何一种数据类型(包括基本类型和引用类型)。在定义成员变量时可以对其初始化,如果未对其进行初始化,Java使用默认的值对其进行初始化,如表3-1所示,且作用域为整个类体。

表3-1 数据类型的默认初始化值

注意:在方法内部(包括main()方法)定义的变量是局部变量。所有局部变量都是在方法被调用时在栈中分配空间,系统不会自动对它们赋初值,所以必须先给局部变量赋初值之后才能使用。

【例3.2】 显示各种数据类型的初始化值。

InitiaValue.java

public class InitiaValue {
  boolean t;
  byte b;
  short s;
  int i;
  long l;
  float f;
  double d;
  char c;
  Point point;                             // 引用类型
  void initiaValues(){
      System.out.println(t);
      System.out.println(b);
      System.out.println(s);
      System.out.println(i);
      System.out.println(l);
      System.out.println(f);
      System.out.println(d);
      System.out.println(c);
      System.out.println(point);
  }
  public static void main(String[]args){
      InitiaValue test = new InitiaValue();
      test.initiaValues();
  }
}

程序运行结果:

false
0
0
0
0
0.0
0.0
null

说明:char值为0,所以显示为空白。

Java的默认初始化值是满足不了程序的实际需求的,那么若想给成员变量赋初值,一种直接的方法就是在定义成员变量时赋值。下面的代码片段在定义成员变量时,直接提供了初值。

public class InitiaValue2 {

boolean t = true;
  byte b = 12;
  short s = 99;
  int i= 49;
  long l =120;
  float f = 3.14f;
  double d = 3.1415;
  char c = 'h';
}