学习-Java类和对象之类的声明之学生类的定义

第1关:学习-Java类和对象之类的声明之学生类的定义

任务描述

本关任务:定义一个 Student 学生公开类,该类具有学号 id(int),年龄 age(int),grade(int) 等属性;它们所具有的行为有学习 study(),考试 examination(),讲话 tell(),它们都无返回值和传入的参数。

study 方法的功能为换行输出:学号为xx的学生正在学习。; examination 方法的功能为换行输出:xx年级正在考试。; tell 方法的功能为不换行输出:正在讲话的是一个xx岁的学生。

相关知识

为了完成本关任务,你需要掌握:

  1. 类的基本概念;
  2. 类的声明;
  3. 类的成员变量、局部变量和类变量;
  4. 成员方法。

Java 是一门面向对象的编程语言,而面向对象最关键的两个词汇是类与对象。这里我们主要给大家讲解类的概念。

类: 类就是具备某些共同特征的实体的集合,它是一种抽象的数据类型(它属于引用数据类型),它是对所具有相同特征实体的抽象。

对象:是类的一个实例,有状态和行为。每个对象拥有自己独立的属性,依靠属性来区分不同对象。

在面向对象的程序设计语言中,类是对一类“事物”的属性与行为的抽象。属性是事物的状态,行为就是这个事物可以做什么。比如,人就是一个类,那么具体的某个人“小明”就是“人”这个类的对象,而“体重、性别、年龄”等信息就是对象的属性,人的行为比如“吃饭、睡觉和玩”等就是对象的方法。

注意:类只是一个抽象的概念,它仅仅是一个概念,是不存在的实体!

类的声明

在 Java 中定义类,使用关键字 class 完成。语法如下:

 
  1. 权限修饰符 class 类名称 {
  2. 属性 (成员变量) ;
  3. 行为 (成员方法(函数)) ;
  4. }

权限修饰符可写可不写,我们之前见到的 public 就是权限修饰符的一种。在后面的学习任务中,我会为大家详细介绍。

例子:声明一个人类。

 
  1. public class Person {
  2. // 属性 (成员变量) ;
  3. // 行为 (成员方法(函数)) ;
  4. }

public 表示“共有”的意思。如果使用 public 修饰,则可以被其他类和程序访问。每个 Java 程序的主类都必须是 public 类。

创建一个新的类,就是创建一个新的数据类型。定义类其实就是在定义类中的成员(成员变量和成员函数)。

变量

在 Java 中类的成员变量定义了类的属性。例如,一个人类中一般有体重、性别和年龄等属性,这时就需要定义体重、性别和年龄 3 个属性。

那 Java 中的成员变量又是什么呢?

首先我们来看,Java 语言支持的变量类型有:

  • 局部变量:在类的方法中定义的变量,且只能在该方法中使用,我们之前学习的变量都是局部变量;定义以后必须赋值才能使用;

  • 成员变量:也称为实例变量,它的定义在方法的外部,直接写在类当中;随着对象创建而诞生,随着对象被垃圾回收而消失;如果是对某个对象的特殊描述,可以用该变量;定义时如果不赋值的话,会采用默认初始值;

  • 静态变量:也称为类变量,实质上是一个全局变量。它的定义在方法的外部,直接写在类当中,与类共存亡,它用 static 修饰,如果某个内容是被所有对象所共享,那么该内容就应该用 static 修饰;定义时如果不赋值的话,会采用默认初始值。

例子:

 
  1. public class Demo {
  2. static int a; // 类变量
  3. int b; // 实例变量
  4. public static void main(String[] args) {
  5. int c; // 局部变量
  6. }
  7. }

我们再来看一下它们是如何被引用的:

  • 局部变量可以直接在方法中赋值或引用,就像我们之前学习的一样;
  • 成员变量必须得通过创建一个对象后引用;
  • 类变量在这个类中可以直接拿来用,若是在另一个类中要用到该类的类变量,需要通过类名.变量名引用。

现在我们对成员变量已经有了一定的了解,接下来看个例子吧。

在 Person 类中定义该类的成员变量,也就是该类的属性。

 
  1. public class Person {
  2. // 属性 (成员变量) ;
  3. double weight ; // 为该类定义一个表示体重的成员变量
  4. char sex; // 为该类定义一个表示性别的成员变量
  5. int age; // 为该类定义一个表示年龄的成员变量
  6. }
成员方法

在 Java 中类的成员方法定义了类的行为。例如,一般人会有吃饭、睡觉和玩等行为,在定义人的类时,就需要定义吃饭、睡觉和玩 3 个方法。

类的各种功能操作都是用方法来实现的,属性只不过提供了相应的数据。一个完整的方法通常包括方法名称、方法主体、方法参数和方法返回值类型。

成员方法的声明语法:

 
  1. [权限修饰符] 返回值类型 方法名([参数类型 参数名]) {
  2. // 方法体
  3. // 返回值
  4. }

注意:[ ] 表示可写可不写。

返回值类型:我们之前学到的八种基本类型和 void 都可以用来做方法的返回值类型。要注意的是 void 表示没有返回值,所以不需要写返回值语句,而其他类型都需要返回一个该类型的值。

返回值语句:

 
  1. return 返回值;

参数类型 参数名:可以有多个,这些参数都要有自己的数据类型,可以是原始数据类型,也可以是复杂数据类型,一个方法主要依靠参数来传递消息。方法主体是方法中执行功能操作的语句。

例子:

 
  1. public int a(){ // 定义一个名为a,返回值类型为int的成员方法
  2. // 返回值语句: return 返回值;
  3. return 0; // 由于返回值类型为 int,所以需要返回一个int型的常量或变量
  4. }
  5. public void c(){ // 定义一个成员方法,它的名为c,返回值类型为void,该方法不需要返回值。
  6. }

以上是没有携带参数的,那携带参数的又是怎么回事呢?

例子:

 
  1. public double b(int a,double b){ // 定义一个名为c,返回值类型为double的成员方法,其携带的参数有两个,一个为int型的变量a,一个double型的变量b
  2. double c = a*b;
  3. return c; // 由于返回值类型为 int,所以需要返回一个int型的常量或变量
  4. }

成员方法的调用必须通过实例一个对象来调用。

同样方法也可以被 static 修饰,变为静态方法,只不过变为静态方法以后,就不能调用实例变量,而成员方法却可以调用静态变量。如果在该类中调用静态方法的话,我们可以直接调用,而如果不在同一个类中,需要通过类名.方法名()或者实例一个对象,通过该对象调用静态方法。

例子:在人的类中定义它的成员方法(行为)。

 
  1. public class Person {
  2. // 属性 (成员变量) ;
  3. double weight = 100.00; // 为该类定义一个表示体重的成员变量
  4. char sex = '男'; // 为该类定义一个表示性别的成员变量
  5. int age = 18; // 为该类定义一个表示年龄的成员变量
  6. // 定义一个名为a,返回值类型为int的成员方法
  7. public void eat(){ // 该成员方法表示吃饭这个行为
  8. System.out.printf("我喜欢吃饭,所以我的体重高达%f千克\n",weight);
  9. }
  10. // 定义一个名为a,返回值类型为int的成员方法
  11. public void sleep(){ // 该成员方法表示睡觉这个行为
  12. System.out.println("我正在睡觉!");
  13. }
  14. public void play(){ // 该成员方法表示玩这个行为
  15. System.out.printf("我的性别为%c,今年%d岁,我喜欢玩耍",sex,age);
  16. }
  17. }
编程要求

仔细阅读右侧编辑区内给出的代码框架及注释,按照提示编写程序代码。

测试说明

平台将使用测试集运行你编写的程序代码,若全部的运行结果正确,则通关。 可在右侧“测试结果”区查看具体的测试集详情。


开始你的任务吧,祝你成功!

源代码:

/**
 * 任务:定义一个 Student 学生公开类,该类具有学号 id(int),年龄 age(int),grade(int) 等属性;
 * 它们所具有的行为有学习 study(),考试 examination(),讲话 tell(),它们都无返回值和传入的参数。
 * 类名为:Student
 */
// 请在下面的Begin-End之间按照注释中给出的提示编写正确的代码
/********** Begin **********/

// 第一步:创建一个名为 Student 的公开类
public class Student{
// 第二步:定义学生的属性
int id=20110624;
int age=18;
int grade=12;


// 第三步:定义学生的行为方法
public void study(){
    System.out.println("学号为"+id+"的学生正在学习。");
}
public void examination(){
    System.out.println(grade+"年级正在考试。");
}
public void tell(){
    System.out.println("正在讲话的是一个"+age+"岁的学生。");
}

}
/********** End **********/

  • 26
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值