为了完成本次学习,我们需要掌握:
类的基本概念;
类的声明;
类的成员变量、局部变量和类变量;
成员方法。
实战1.学生类的定义:
定义一个 Student 学生公开类,该类具有学号 id(int),年龄 age(int),grade(int) 等属性;它们所具有的行为有学习 study(),考试 examination(),讲话 tell(),它们都无返回值和传入的参数。
study 方法的功能为换行输出:学号为xx的学生正在学习。;
examination 方法的功能为换行输出:xx年级正在考试。;
tell 方法的功能为不换行输出:正在讲话的是一个xx岁的学生。。
/**
* 任务:定义一个 Student 学生公开类,该类具有学号 id(int),年龄 age(int),grade(int) 等属性;
* 它们所具有的行为有学习 study(),考试 examination(),讲话 tell(),它们都无返回值和传入的参数。
* 类名为:Student
*/
// 第一步:创建一个名为 Student 的公开类
public class Student {
// 第二步:定义学生的属性
int id;
int grade;
int age;
// 第三步:定义学生的行为方法
public void study()
{
System.out.print("学号为"+id+"的学生正在学习。\n");
}
public void examination()
{
System.out.printf(grade+"年级正在考试。\n");
}
public void tell()
{
System.out.printf("正在讲话的是一个"+age+"岁的学生。");
}
}
实战2:复数运算:
求两个复数相加后的结果。两个复数之间相加的运算法则:实部与实部相加,虚部与虚部相加。
/**
* 任务:求两个复数相加后的结果。
*/
// 定义一个类,类名为 Complex
public class Complex {
// 定义四个变量:real1、image1、real2、image2 分别表示第一个虚数的实部与虚部和第二个虚数的实部与虚部,类型为int
int real1;
int image1;
int real2;
int image2;
// 定义一个成员方法,方法名为add,不带参数,实现两个复数相加,将实部结果与虚部结果用+拼接后返回,返回类型为String,
public String add()
{
int real,image;
real = real1 + real2;
image = image1 + image2;
String result = "";
if(real != 0 && image != 0 )// 相加后结果如果有虚部,将计算结果的虚部后加上i
{
result = real + "+" + image + "i";
}
else if(real !=0 && image == 0)// 如果没有虚部,只返回实部即可。
{
result = real + "";
}
else if(real == 0 && image != 0)// 如果没有实部,只返回虚部,将计算结果的虚部后加上i
{
result = image + "i";
}
else if(real == 0 && image == 0)// 如果都没有值,返回零。
{
result = 0 + "";
}
return result;
}
}
类
Java 是一门面向对象的编程语言,而面向对象最关键的两个词汇是类与对象。
类: 类就是具备某些共同特征的实体的集合,它是一种抽象的数据类型(它属于引用数据类型),它是对所具有相同特征实体的抽象。
对象:是类的一个实例,有状态和行为。每个对象拥有自己独立的属性,依靠属性来区分不同对象。
在面向对象的程序设计语言中,类是对一类“事物”的属性与行为的抽象。属性是事物的状态,行为就是这个事物可以做什么。比如,人就是一个类,那么具体的某个人“小明”就是“人”这个类的对象,而“体重、性别、年龄”等信息就是对象的属性,人的行为比如“吃饭、睡觉和玩”等就是对象的方法。
注意:类只是一个抽象的概念,它仅仅是一个概念,是不存在的实体!
类的声明
在 Java 中定义类,使用关键字 class 完成。语法如下:
权限修饰符 class 类名称 {
属性 (成员变量) ;
行为 (成员方法(函数)) ;
}
权限修饰符可写可不写,我们之前见到的 public 就是权限修饰符的一种。
例子:声明一个人类。
public class Person {
// 属性 (成员变量) ;
// 行为 (成员方法(函数)) ;
}
public 表示“共有”的意思。如果使用 public 修饰,则可以被其他类和程序访问。每个 Java 程序的主类都必须是 public 类。
创建一个新的类,就是创建一个新的数据类型。定义类其实就是在定义类中的成员(成员变量和成员函数)。
变量
在 Java 中类的成员变量定义了类的属性。例如,一个人类中一般有体重、性别和年龄等属性,这时就需要定义体重、性别和年龄 3 个属性。
Java 语言支持的变量类型有:
局部变量:在类的方法中定义的变量,且只能在该方法中使用,我们之前学习的变量都是局部变量;定义以后必须赋值才能使用;
成员变量:也称为实例变量,它的定义在方法的外部,直接写在类当中;随着对象创建而诞生,随着对象被垃圾回收而消失;如果是对某个对象的特殊描述,可以用该变量;定义时如果不赋值的话,会采用默认初始值;
静态变量:也称为类变量,实质上是一个全局变量。它的定义在方法的外部,直接写在类当中,与类共存亡,它用 static 修饰,如果某个内容是被所有对象所共享,那么该内容就应该用 static 修饰;定义时如果不赋值的话,会采用默认初始值。
例子:
public class Demo {
static int a; // 类变量
int b; // 实例变量
public static void main(String[] args) {
int c; // 局部变量
}
}
我们再来看一下它们是如何被引用的:
局部变量可以直接在方法中赋值或引用,就像我们之前学习的一样;
成员变量必须得通过创建一个对象后引用;
类变量在这个类中可以直接拿来用,若是在另一个类中要用到该类的类变量,需要通过类名.变量名引用。
现在我们对成员变量已经有了一定的了解,接下来看个例子吧。
在 Person 类中定义该类的成员变量,也就是该类的属性。
public class Person {
// 属性 (成员变量) ;
double weight ; // 为该类定义一个表示体重的成员变量
char sex; // 为该类定义一个表示性别的成员变量
int age; // 为该类定义一个表示年龄的成员变量
}
成员方法
在 Java 中类的成员方法定义了类的行为。例如,一般人会有吃饭、睡觉和玩等行为,在定义人的类时,就需要定义吃饭、睡觉和玩 3 个方法。
类的各种功能操作都是用方法来实现的,属性只不过提供了相应的数据。一个完整的方法通常包括方法名称、方法主体、方法参数和方法返回值类型。
成员方法的声明语法:
[权限修饰符] 返回值类型 方法名([参数类型 参数名]) {
// 方法体
// 返回值
}
注意:[ ] 表示可写可不写。
返回值类型:我们之前学到的八种基本类型和 void 都可以用来做方法的返回值类型。要注意的是 void 表示没有返回值,所以不需要写返回值语句,而其他类型都需要返回一个该类型的值。
返回值语句:
return 返回值;
参数类型 参数名:可以有多个,这些参数都要有自己的数据类型,可以是原始数据类型,也可以是复杂数据类型,一个方法主要依靠参数来传递消息。方法主体是方法中执行功能操作的语句。
例子:
public int a(){ // 定义一个名为a,返回值类型为int的成员方法
// 返回值语句: return 返回值;
return 0; // 由于返回值类型为 int,所以需要返回一个int型的常量或变量
}
public void c(){ // 定义一个成员方法,它的名为c,返回值类型为void,该方法不需要返回值。
}
以上是没有携带参数的,那携带参数的又是怎么回事呢?
例子:
public double b(int a,double b){ // 定义一个名为c,返回值类型为double的成员方法,其携带的参数有两个,一个为int型的变量a,一个double型的变量b
double c = a*b;
return c; // 由于返回值类型为 int,所以需要返回一个int型的常量或变量
}
成员方法的调用必须通过实例一个对象来调用。
同样方法也可以被 static 修饰,变为静态方法,只不过变为静态方法以后,就不能调用实例变量,而成员方法却可以调用静态变量。如果在该类中调用静态方法的话,我们可以直接调用,而如果不在同一个类中,需要通过类名.方法名()或者实例一个对象,通过该对象调用静态方法。
例子:在人的类中定义它的成员方法(行为)。
public class Person {
// 属性 (成员变量) ;
double weight = 100.00; // 为该类定义一个表示体重的成员变量
char sex = '男'; // 为该类定义一个表示性别的成员变量
int age = 18; // 为该类定义一个表示年龄的成员变量
// 定义一个名为a,返回值类型为int的成员方法
public void eat(){ // 该成员方法表示吃饭这个行为
System.out.printf("我喜欢吃饭,所以我的体重高达%f千克\n",weight);
}
// 定义一个名为a,返回值类型为int的成员方法
public void sleep(){ // 该成员方法表示睡觉这个行为
System.out.println("我正在睡觉!");
}
public void play(){ // 该成员方法表示玩这个行为
System.out.printf("我的性别为%c,今年%d岁,我喜欢玩耍",sex,age);
}
}