017:java创建⼀个学⽣类
Java类的实例:创建类,成员⽅法的声明和调⽤
(转⾃:)
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 表⽰参数列表,这些变量都要有⾃⼰的数据类型,可以是原始数据类型,也可以是复杂数据类型,⼀个⽅法主要依靠参数来传递消息。⽅法主体是⽅法中执⾏功能操作的语句。
注意:上⾯所提到的重写、重载和抽象类,由于篇幅有限,我们会在教程《》《》和《》中讲解,这⾥⼤致了解就可以。
例 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 {
//返回void,return可有可⽆
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 ⾃动清除栈中的内容。
⽅法体中的局部变量
在⽅法体内可以定义本⽅法所使⽤的变量,这种变量是局部变量。它的⽣存期与作⽤域是在本⽅法内,也就是说,局部变量只能在本⽅法内有效或可见,离开本⽅法则这些变量将被⾃动释放。
在⽅法体内定义变量时,变量前不能加修饰符。局部变量在使⽤前必须明确赋值,否则编译时会出错。另外,在⼀个⽅法内部,可以在复合语句(把多个语句⽤括号{}括起来组成的⼀个语句称复合语句)中定义变量,这些变量只在复合语句中有效。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论