ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

017:java创建一个学生类

2021-11-14 22:33:56  阅读:170  来源: 互联网

标签:java 形参 创建 数据类型 Student 017 实参 方法 public


Java类的实例:创建类,成员方法的声明和调用

(转自:http://c.biancheng.net/view/940.html

1        创建一个学生类,需求描述

创建一个表示学生的实体类 Student,其中有学生姓名、性别和年龄信息。要求使用属性来表示学生信息,最终编写测试代码。

  1. 定义:定义一个名为 Student 的类。代码如下:
  2. 属性:在类中通过属性定义学生、性别和年龄,代码如下:
    1. public class Student {
    2.     public String Name;    // 学生姓名
    3.     public int Age;    // 学生年龄
    4.     private boolean Sex;    // 学生性别
    5. }
  1. public class Student {
  2. // 学生类
  3. }

在上述代码中将学生性别属性 Sex 设置为 private 作用域。为了对该属性进行获取和设置,还需要编写 isSex 和 setSex 方法。代码如下:

  1. public boolean isSex() {
  2.     return Sex;
  3. }
  4. public void setSex(boolean sex) {
  5.     this.Sex = sex;
  6. }

在 Student 类中添加 main() 方法,然后创建两个学生类的实例,并输出学生信息。最终代码如下:

  1. public static void main(String[] args) {
  2.     Student zhang = new Student(); // 创建第一个实例
  3.     zhang.Name = "张子同";
  4.     String isMan = zhang.isSex() ? "女" : "男";
  5.     System.out.println("姓名:" + zhang.Name + "性别:" + isMan + "年龄:" + zhang.Age);
  6.     Student li = new Student(); // 创建第二个实例
  7.     li.Name = "李子文";
  8.     li.Sex = true;
  9.     li.Age = 15;
  10. 10.     String isWoman = li.isSex() ? "女" : "男";
  11. 11.     System.out.println("姓名:" + li.Name + "性别:" + isWoman + "年龄:" + li.Age);

12. }

new: 使用 new关键字 加上 构造方法,来创建一个对象. Student zhang 的意思是,在内存中分配一个变量,名字叫zhang,这个变量是Student类型的;后半部分,new Student(); 这就是new关键字和构造方法来创建一个对象, Student()是构造方法的名字。

意思就是说,把这个对象在内存中的地址 赋值 给变量zhang,这就是Java中引用概念,zhang就叫做引用,或者叫引用变量,或者直接叫变量,没问题,都是它; zhang的值就是一个内存地址,或者叫引用地址。

13. Student zhang = new Student(); // 创建一个实例

输出结果如下:

姓名:张子同性别:男年龄:0

姓名:李子文性别:女年龄:15

 

由输出结果可以看到,在第一个实例 zhang 中由于仅设置了 Name 属性的值,所以 boolean 类型的 Sex 默认使用值 false,int 类型的 Age 默认使用值 0。第二个实例 li 同时设置了这三个属性的值。

2        成员方法的声明和调用

声明成员方法可以定义类的行为,行为表示一个对象能够做的事情或者能够从一个对象取得的信息。类的各种功能操作都是用方法来实现的,属性只不过提供了相应的数据。一个完整的方法通常包括方法名称、方法主体、方法参数和方法返回值类型。

成员方法一旦被定义,便可以在程序中多次调用,提高了编程效率。声明成员方法的语法格式如下:

  1. public class Test {
  2. [public|private|protected][static]<void|return_type><method_name>([paramList]) {
  3. // 方法体
  4. }
  5. }

即:

public class 类名 {

    public 返回值类型 方法名 (传递的参数类型 参数名称) {

    // 方法体

    }

}

 

上述代码中一个方法包含 4 部分:方法的返回值、方法名称、方法的参数和方法体。其中 retum_type 是方法返回值的数据类型,数据类型可以是原始的数据类型,即常用的 8 种数据类型,也可以是一个引用数据类型,如一个类、接口和数组等。

除了这些,一个方法还可以没有返回值,即返回类型为 void,像 main() 方法。method_name 表示自定义的方法名称,方法的名称首先要遵循标识符的命名约定,除此之外,方法的名称第一个单词的第一个字母是小写,第二单词的第一个字母是大写,依此类推。

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

注意:上面所提到的重写、重载和抽象类,由于篇幅有限,我们会在教程《Java方法重载》《Java方法重写》和《Java抽象类》中讲解,这里大致了解就可以。

例 1 为上一节创建的学生类 Student 添加一个可以返回学生信息字符串的方法。代码如下:

  1. public class Student {
  2.     public StringBuffer printInfo(Student st) {
  3.         StringBuffer sb = new StringBuffer();
  4.         sb.append("学生姓名:"+st.Name+"\n 学生年龄:"+st.Age+"\n 学生性别:"+st.isSex());
  5.         return sb;
  6.     }
  7. }

上述代码创建了一个名称为 printInfo 的方法,其返回值类型为 StringBuffer(引用数据类型)。该方法需要传递一个 Student 类型的参数,最后需要将一个 StringBuffer 类型的数据返回。

1)成员方法的返回值

若方法有返回值,则在方法体中用 return 语句指明要返回的值

return 表达式

或者

return (表达式)

表达式可以是常量、变量、对象等。表达式的数据类型必须与声明成员方法时给出的返回值类型一致。

2)形参、实参及成员方法的调用

一般来说,可以通过以下方式来调用成员方法:

methodName({paramList})

关于方法的参数,经常会提到形参与实参,形参是定义方法时参数列表中出现的参数,实参是调用方法时为方法传递的参数。

例 2

下面 returnMin() 方法中的 m 和 n 是形参,调用 returnMin() 方法时的 x 和 y 是实参。

  1. public int returnMin(int m,int n) {
  2. return Math.min(m,n); // m和n是形参
  3. }
  4. public static void main(String[] args) {
  5. int x = 50;
  6. int y = 100;
  7. Test t = new Test();
  8. int i = t.returnMin(x,y); // x和y是实参
  9. System.out.println(i);
  10. }

public static void main(String[] args) {

}

viod: 在c语言中有四种数据类型,里面居然有空类型。有一类函数,调用后并不需要向调用者返回函数值, 这种函数可以定义为“空类型”。其类型说明符为void。

java中只有两种数据类型,即基本数据类型和引用数据类型。Void - java.lang 中的 类Void 类是一个不可实例化的占位符类,它保持一个对代表 Java 关键字 void 的 Class 对象的引用。你可以把void理解成一个特殊的数据类型也可以理解成一个方法的修饰符。

Void是一个类,void就是一个占位符(void返回值为空)

//确定类型
public class Test {
    public static void main(String[] args) {
        System.out.println(Void.class); 
        System.out.println(void.class); 
    }
}
//基本使用
public class Test {
     //返回voidreturn可有可无
    public void a1() {
        return;
    }
    //必须且只能返回null
    public Void a2() {
        return null; 
    }
}

 

 

方法的形参和实参具有以下特点:

  • 形参变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。因此,形参只有在方法内部有效,方法调用结束返回主调方法后则不能再使用该形参变量。
  • 实参可以是常量、变量、表达式、方法等,无论实参是何种类型的量,在进行方法调用时,它们都必须具有确定的值,以便把这些值传送给形参。因此应预先用赋值、输入等办法使实参获得确定值。
  • 实参和形参在数量、类型和顺序上应严格一致,否则会发生“类型不匹配” 的错误。
  • 方法调用中发生的数据传送是单向的,即只能把实参的值传送绐形参,而不能把形参的值反向地传送给实参。因此在方法调用过程中,形参的值发生改变,而实参中的值不会变化。

例 3

下面的示例演示了调用 add() 方法前后形参 x 的变化。

  1. public int add(int x) {
  2. x += 30;
  3. System.out.println("形参 x 的值:"+x);
  4. return x;
  5. }
  6. public static void main(String[] args) {
  7. int x = 150;
  8. System.out.println("调用 add() 方法之前 x 的值:"+x);
  9. Test t = new Test();
  10. int i = t.add(x);
  11. System.out.println("实参 x 的值:"+x);
  12. System.out.println("调用 add() 方法的返回值:"+i);
  13. }

运行上述程序,输出结果如下:

调用 add() 方法之前 x 的值:150

形参 x 的值:180

实参 x 的值:150

调用 add() 方法的返回值:180

从输出结果可以看出,形参 x 值的改变,并没有影响实参 x。
在调用成员方法时应注意以下 4 点:

  1. 对无参成员方法来说,是没有实际参数列表的(即没有 paramList),但方法名后的括号不能省略。
  2. 对带参数的成员方法来说,实参的个数、顺序以及它们的数据类型必须与形式参数的个数、顺序以及它们的数据类型保持一致,各个实参间用逗号分隔。实参名与形参名可以相同,也可以不同。
  3. 实参也可以是表达式,此时一定要注意使表达式的数据类型与形参的数据类型相同,或者使表达式的类型按 Java 类型转换规则达到形参指明的数据类型。
  4. 实参变量对形参变量的数据传递是“值传递”,即只能由实参传递给形参,而不能由形参传递给实参。程序中执行到调用成员方法时,Java 把实参值复制到一个临时的存储区(栈)中,形参的任何修改都在栈中进行,当退出该成员方法时,Java 自动清除栈中的内容。

方法体中的局部变量

在方法体内可以定义本方法所使用的变量,这种变量是局部变量。它的生存期与作用域是在本方法内,也就是说,局部变量只能在本方法内有效或可见,离开本方法则这些变量将被自动释放。
在方法体内定义变量时,变量前不能加修饰符。局部变量在使用前必须明确赋值,否则编译时会出错。另外,在一个方法内部,可以在复合语句(把多个语句用括号{}括起来组成的一个语句称复合语句)中定义变量,这些变量只在复合语句中有效。

 

标签:java,形参,创建,数据类型,Student,017,实参,方法,public
来源: https://www.cnblogs.com/fanglijiao/p/15506714.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有