210 likes | 359 Views
第二章. 学生信息管理系统中类的定义. 本章目标. 掌握如何定义类; 掌握创建类的对象; 掌握构造方法的使用; 掌握类的方法定义; 掌握方法的重载; 熟悉成员的访问控制; 理解封装的作用。. 学习情境 2-4. 学生类中的构造方法. 类的构造方法. 教学目标: 掌握构造方法的定义和功能 教学重点: 构造方法的定义 教学难点: 构造方法的重载 教学课时: 4 学时. 工作任务. 在其中添加两个构造方法,一个不带任何参数,一个带四个参数,并在测试类中分别利用这两个构造方法完成实例化两个对象。.
E N D
第二章 学生信息管理系统中类的定义
本章目标 • 掌握如何定义类; • 掌握创建类的对象; • 掌握构造方法的使用; • 掌握类的方法定义; • 掌握方法的重载; • 熟悉成员的访问控制; • 理解封装的作用。
学习情境2-4 学生类中的构造方法
类的构造方法 • 教学目标: • 掌握构造方法的定义和功能 • 教学重点: • 构造方法的定义 • 教学难点: • 构造方法的重载 • 教学课时:4学时
工作任务 • 在其中添加两个构造方法,一个不带任何参数,一个带四个参数,并在测试类中分别利用这两个构造方法完成实例化两个对象。
(1)在Student类中添加一个无参构造方法,并为各个属性赋上一个初始值,如下所示。(1)在Student类中添加一个无参构造方法,并为各个属性赋上一个初始值,如下所示。 public Student( ) { super(); this.num = 13002; this.name = "李四"; this.java = 77; this.dataBase = 79; }
(2)另外再在Student类中添加一个带四个参数的有参构造方法,四个属性的数值,有构造方法的参数传递赋值。如下所示。(2)另外再在Student类中添加一个带四个参数的有参构造方法,四个属性的数值,有构造方法的参数传递赋值。如下所示。 public Student(int num, String name, double java, double dataBase) { super(); this.num = num; this.name = name; this.java = java; this.dataBase = dataBase; }
(3)修改测试类,分别利用上述两个构造方法完成两个对象的示例化工作,并将它们的信息输出在控制台上,如下所示。(3)修改测试类,分别利用上述两个构造方法完成两个对象的示例化工作,并将它们的信息输出在控制台上,如下所示。 Student stuOne = new Student(); Student stuTwo = new Student(13003, "王五", 88, 87); System.out.println("第一个学生对象的信息如下:"); System.out.println(stuOne.toString()); System.out.print(stuOne.getName()+"的总成绩为:"); System.out.println(stuOne.sum(stuOne.getJava(), stuOne.getDataBase())); System.out.println("第二个学生对象的信息如下:"); System.out.println(stuTwo.toString()); System.out.print(stuTwo.getName()+"的总成绩为:"); System.out.println(stuTwo.sum(stuTwo.getJava(), stuTwo.getDataBase()));
(4)运行测试类得到的结果如下所示。 第一个学生对象的信息如下: Student [num=13002, name=李四, java=77.0, dataBase=79.0] 李四的总成绩为:156.0 第二个学生对象的信息如下: Student [num=13003, name=王五, java=88.0, dataBase=87.0] 王五的总成绩为:175.0
2.3.3构造方法 在 Java 程序里,构造方法所完成的主要工作是帮助新创建的对象赋初值。构造方法可视为一种特殊的方法,它的定义方式与普通方法类似,其语法如下所示。 【格式 构造方法】 class 类名称 { 访问权限 类名(类型1 参数1, 类型2 参数2,…) { 程序语句; ……//构造方法没有返回之后 } }
【例2-9】下面用Animal类来说明构造方法的使用。【例2-9】下面用Animal类来说明构造方法的使用。 publicclass Animal { private String type = ""; // Animal构造方法 public Animal() { System.out.println("Animal类的构造方法"); } public String getType() { return type; } publicvoid setType(String type) { this.type = type; } public String toString() { return "Animal [type=" + type + "]"; } publicvoid sound() { System.out.println(type+"发出了吼叫……"); } publicvoid run() { sound(); System.out.println("正以每小时65千米的速度奔跑……"); } }
AnimalTest测试类如下: publicclass AnimalTest { publicstaticvoid main(String[] args) { Animal a = new Animal(); a.setType("斑马"); a.run(); } } 得到的结果为: Animal类的构造方法 斑马发出了吼叫…… 正以每小时65千米的速度奔跑……
2.3.4方法的重载 • 同一个类中允许同时存在一个以上的同名方法,只要它们的参数个数或类型不同即可,该方法在这样情况下就被重载了。
【例2-10】加法运算说明方法的重载。 publicclass TestAdd { publicstaticint add(int x,int y) { return x+y; } publicstaticint add(int x,int y,int z) { return x+y+z; } publicstaticdouble add (double x,double y){ return x+y; } publicstaticvoid main(String[] args) { intisum ; doublefsum; isum = add(3, 6); isum = add(4, 7, 8); fsum = add(6.5, 8.9); } }
java编译器,能偶根据调用方法时所传递的参数的个数和类型选择相应的方法。重载方法的参数列表必须不同,要么是参数的个数不同,要么是参数的类型不同。重载方法的返回值类型可以相同,也可以不同。java编译器,能偶根据调用方法时所传递的参数的个数和类型选择相应的方法。重载方法的参数列表必须不同,要么是参数的个数不同,要么是参数的类型不同。重载方法的返回值类型可以相同,也可以不同。 • 在java中,不仅普通方法可以重载,构造方法也可以重载。
【例2-11】下面用Animal类来说明构造方法的使用【例2-11】下面用Animal类来说明构造方法的使用 publicclass Animal { private String type = ""; public Animal() {//Animal无参构造方法 System.out.println("Animal类的无参构造方法"); } public Animal(String type) {// Animal带一个参数的构造方法 this.type = type; System.out.println("Animal类的有参构造方法"); } public String getType() { return type; } publicvoid setType(String type) { this.type = type; } public String toString() { return "Animal [type=" + type + "]"; } publicvoid sound() { System.out.println(type+"发出了吼叫……"); } publicvoid run() { sound(); System.out.println("正以每小时65千米的速度奔跑……"); }}
AnimalTest测试类如下: publicclass AnimalTest { publicstaticvoid main(String[] args) { Animal a = new Animal(); a.setType("斑马"); a.run(); Animal b = new Animal("狮子"); b.run(); } }
2.3.5变量作用域及常见错误 • 成员变量:在类中定义的变量,该类的方法可以直接使用。如果别的类的方法要访问它,首先创建该类的对象,然后用点运算符来引用。 • 局部变量:它的作用于仅仅在定义该变量的方法内。
常见错误一:控制语句块中的局部变量 publicclass Test { publicstaticvoid main(String[] args) { for(int i = 0,count = 0; i < 5; i++){ count++; } System.out.println(count); } }
常见错误二:误用局部变量 publicclass Test { int java = 88; int data = 90; publicvoid calSum(){ intsum = java + data ; } publicvoid showSum(){ System.out.println(sum); } }
方法调用小结 • 方法之间允许相互调用,不需要知道方法的具体实现,提高了效率