5.2. 类¶
5.2.1. 1.类¶
类是Java中的一种重要的引用数据类型,是组成Java程序的基本要素。它封装了一类对象的数据和操作。
1.1 类声明¶
Java语言中一个类的实现包括:类声明和类体。类声明语法格式如下:
[public][abstract|final] class className [extends superclassName] [implements interfaceNameList] {
//类体
}
其中,class是声明类的关键字,className是自定义的类名;class前面的修饰符public、abstract、final用来声明类,它们可以省略,它们的具体用法后面章节会详细介绍;superclassName为父类名,可以省 略,如果省略则该类继承Object类,Object类所有类的根类,所有类都直接或间接继承Object; interfaceNameList是该类实现的接口列表,可以省略,接口列表中的多个接口之间用逗号分隔。
声明动物(Animal)类代码如下:
// Animal.java
public class Animal extends Object {
//类体
}
上述代码声明了动物(Animal)类,它继承了Object类。继承Object类extends Object代码可以省略
1.2 成员变量¶
声明类体中成员变量语法格式如下:
class className {
[public | protected | private ] [static] [final] type variableName; //成员变量
}
其中type是成员变量数据类型,variableName是成员变量名。type前的关键字都是成员变量修饰符,它们说明如下:
1. public、protected和private修饰符用于封装成员变量。
2. static修饰符用于声明静态变量,所以静态变量也称为“类变量”。
3. final修饰符用于声明变量,该变量不能被修改。
下面看一个声明成员变量示例:
package com.company3;
public class Animal extends Object {
int age = 18;
public boolean sex = false;
private double weight = 0.0;
}
1.3 成员方法¶
声明类体中成员方法语法格式如下:
class className {
[public | protected | private ] [static] [final | abstract] [native] [synchronized]
type methodName([paramList]) [throws exceptionList] {
//方法体
}
}
其中type是方法返回值数据类型,methodName是方法名。type前的关键字都是方法修饰符,它们说明如下:
01. public、protected和private修饰符用于封装方法。
02. static修饰符用于声明静态方法,所以静态方法也称为“类方法”。
03. final | abstract不能同时修饰方法,final修饰的方法不能在子类中被覆盖;abstract用来修饰抽象方法,抽象方法必须在子类中被实现。
04. native修饰的方法,称为“本地方法”,本地方法调用平台本地代码(如:C或C++编写的代码),不能实现跨平台。
05. synchronized修饰的方法是同步的,当多线程方式同步方法时,只能串行地执行,保证是线程安全的
方法声明中还有([paramList])部分,它是方法的参数列表。throws exceptionList是声明抛出异常列表。
声明方法示例:
package aom;
public class Animal {
int age = 1; //年龄
public boolean sex = false; //性别
private double weight = 0.0; //体重
public String eat() {
String food = "我吃大米";
return food;
}
int run() {
return 10;
}
protected int getMaxNumber(int num1, int num2) {
if (num1 > num2) {
return num1;
}
return num2;
}
public static void main(String[] args) {
Animal hu1 = new Animal();
System.out.println("动物的年龄是:" + hu1.age);
if (hu1.sex == false) {
System.out.println("动物是磁性");
} else {
System.out.println("动物是雄性");
}
System.out.println("动物的体重是:" + hu1.weight);
System.out.println(hu1.run());
System.out.println(hu1.eat());
System.out.println(hu1.getMaxNumber(4, 5));
}
}
class Dog {
String name;
String color;
int age;
//无返回值的方法
void barking() {
System.out.println("汪汪汪汪....");
}
//无返回值的方法
void sleep() {
System.out.println("呼呼呼..........");
}
}
class SmallMath {
int balance;
// 有返回值的方法
int add(int x, int y) {
return x + y;
}
// 有返回值的方法
int sub(int x, int y) {
if (x > y) {
return x - y;
} else {
return 0;
}
}
SmallMath() {
balance = 0;
}
int x, y;
SmallMath(int a, int b) {
x = a;
y = b;
}
void printsumt() {
System.out.printf("x + y = %d", (x + y));
}
}
class variableArgs {
// 可变参数
int add(int x, int... y) {
int total = x;
for (int num : y)
total += num;
return total;
}
}
public class ch8_3 {
public static void main(String[] args) {
System.out.println("------------------------------------------------------");
Dog my_dog = new Dog();
Dog tom_dog = new Dog();
my_dog.name = "元宝";
System.out.printf("my dog name is %s\n", my_dog.name);
my_dog.sleep();
tom_dog.name = "旺财";
System.out.printf("tom dog nmae is %s\n", tom_dog.name);
tom_dog.sleep();
System.out.println("------------------------------------------------------");
SmallMath s = new SmallMath(); //实例化类
int a1, a2;
a1 = s.add(10, 20);
System.out.println(a1); //30
a2 = s.sub(2, 30);
System.out.println(a2); //0
System.out.println("------------------------------------------------------");
variableArgs v = new variableArgs();
int intArray[] = {11, 22, 33, 44, 55, 66};
System.out.println(v.add(1, 2, 3, 4));
System.out.println(v.add(1, intArray));
System.out.println("--------------------------------------------------------");
SmallMath s1 = new SmallMath(10,20);
System.out.println(s1.balance);
s1.printsumt();
}