南京邮电大学java第三次实验报告
实 验 报 告
( 2017 / 2018学年 第2学期)
课程名称 |
JAVA语言程序设计 |
|||||
实验名称 |
Java集成开发环境的安装与使用、 Java变量、表达式与控制结构 |
|||||
实验时间 |
2018 |
年 |
4 |
月 |
11 |
日 |
指导单位 |
计算机学院软件教学中心 |
|||||
指导教师 |
许棣华 |
学生姓名 |
王利国 |
班级学号 |
B160209 |
学院(系) |
电子与光学工程学院,微电子学院 |
专 业 |
微电子科学与工程 |
实验名称 |
方法、数组和类 |
指导教师 |
许棣华 |
|
|||||||
实验类型 |
上机 |
实验学时 |
2 |
实验时间 |
2017.4.11 |
三、实验内容
1. 在前面实验二已定义的学生类Student的基础上,以Student类为父类,为学生类派生出一个子类为大学生类(CollegeStudent)。
CollegeStudent 类在学生类上增加一个专业(profession)数据属性;方法上增加获得专业和设置专业两个方法。并对超类中的toString( )方法进行重写,使得CollegeStudent类中的toString( )方法除了显示学生类的信息外,还要显示它的专业属性。
编写测试程序的主类。在主类中创建一个Student对象和CollegeStudent对象,并显示或修改这两个对象的属性值。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
package lg.test; //测试类 public class Demo31 { public static void main(String[] args) { Student one = new Student( "16020912", "王宁宁","男" , 19 ); CollegeStudent two = new CollegeStudent( "16020913", "王利国","男" , 19 ,"微电子科学与工程" ); System.out.println("未进行修改的时候的属性值"); System.out.println(one.toString()); System.out.println(two.toString()); System.out.println("修改后的属性值"); one.setAge( 20 ); two.setProfession( "微电子" ); System.out.println(one.toString()); System.out.println(two.toString()); } } class Student { private String studentID; private String name; private String sex; private int age; private static int count; public static int getCount() { return count; } Student(String studentID, String name, String sex, int age) { this.studentID = studentID; this.name = name; this.sex = sex; this.age = age; } @Override public String toString() { return "Student{" + "studentID='" + studentID + '\'' + ", name='" + name + '\'' + ", sex='" + sex + '\'' + ", age=" + age + '}'; } //studen的set和get方法 public String getStudentID() { return studentID; } public void setStudentID(String studentID) { this.studentID = studentID; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public static void setCount(int count) { Student.count = count; } } //新建立的CoolegeStudent对象 class CollegeStudent extends Student{ private String profession; CollegeStudent(String studentID, String name, String sex, int age, String profession) { super( studentID, name, sex, age ); this.profession = profession; } //属性的get & set方法 public String getProfession() { return profession; } public void setProfession(String profession) { this.profession = profession; } @Override public String toString() { return "CollegeStudent{" + "profession='" + profession + '\'' + "studentID='" + super.getStudentID() + '\'' + ", name='" + super.getName() + '\'' + ", sex='" + super.getSex() + '\'' + ", age=" + super.getAge() + '}'; } }
2. 设计一个人员类(Person),其中包含一个方法pay,代表人员的工资支出。再从Person类派生出助教类(Assistant)、
讲师类(Instructor)、副教授类(Assistant Professor)和教授类(Professor)。其中:工资支出=基本工资+授课时数*每课时兼课金。
但助教基本工资为800,每课时兼课金25,讲师基本工资为1000,每课时兼课金35,
副教授基本工资为1200,每课时兼课金40,教授基本工资为1400,每课时兼课金50。
① 将Person定义为抽象类,pay为抽象方法,设计程序实现多态性。
② 将Person定义为接口,设计程序实现多态性。
第一:通过类来实现
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
class Person { public int basic; public int hour; public int charge; public Person() { } public Person(int basic, int charge) { this.basic = basic; this.charge = charge; } public void pay(int hour) { System.out.println( hour + "小时后的工资为" + (basic + hour * charge) ); } } class Assistant extends Person { public Assistant() { super( 800, 25 ); } } class Instructor extends Person { public Instructor() { super( 1000, 35 ); } } class AssistantProfessor extends Person { public AssistantProfessor() { super( 1200, 40 ); } } class Professor extends Person { public Professor() { super( 1400, 50 ); } }
第二:通过抽象方法实现
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
abstract class Person { public int hour; // public int basic; // public int charge; // public Person() { // } // public Person(int basic, int charge) { // this.basic = basic; // this.charge = charge; // } public abstract void pay(int hour); } class Assistant extends Person { @Override public void pay(int hour) { System.out.println( hour + "小时后的工资为" + (800 + hour * 25) ); } // public Assistant() { // super( 800, 25 ); // } } class Instructor extends Person { @Override public void pay(int hour) { System.out.println( hour + "小时后的工资为" + (1000 + hour * 35) ); } // public Instructor() { // super( 1000, 35 ); // } } class AssistantProfessor extends Person { @Override public void pay(int hour) { System.out.println( hour + "小时后的工资为" + (1200 + hour * 40) ); } // public AssistantProfessor() { // super( 1200, 40 ); // } } class Professor extends Person { @Override public void pay(int hour) { System.out.println( hour + "小时后的工资为" + (1400 + hour * 50) ); } // public Professor() { // super( 1400, 50 ); // } }
第三:通过接口实现
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
interface Person { void pay(int hour); } class Assistant implements Person { @Override public void pay(int hour) { System.out.println( hour + "小时后的工资为" + (800 + hour * 25) ); } // public Assistant() { // super( 800, 25 ); // } } class Instructor implements Person { @Override public void pay(int hour) { System.out.println( hour + "小时后的工资为" + (1000 + hour * 35) ); } // public Instructor() { // super( 1000, 35 ); // } } class AssistantProfessor implements Person { @Override public void pay(int hour) { System.out.println( hour + "小时后的工资为" + (1200 + hour * 40) ); } // public AssistantProfessor() { // super( 1200, 40 ); // } } class Professor implements Person { @Override public void pay(int hour) { System.out.println( hour + "小时后的工资为" + (1400 + hour * 50) ); } // public Professor() { // super( 1400, 50 ); // } }
3. 从键盘输入两个数,进行相除,显示商。当输入串中含有非数字时或除数为0时,通过异常处理机制,使程序能正确运行。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
package leetcode; import java.util.InputMismatchException; import java.util.Scanner; /** * @Author liguo * @Description . 从键盘输入两个数,进行相除,显示商。当输入串中含有非数字时或除数为0时,通过异常处理机制,使程序能正确运行。 * @Data 2018-04-03 */ public class Demo { public static void main(String[] args) { int oper1 = 0; //定义被除数 int oper2 = 0; //定义除数 Scanner in = new Scanner( System.in ); try { //数据输入和输出 System.out.print( "请输入被除数:" ); oper1 = in.nextInt(); System.out.print( "请输入除数:" ); oper2 = in.nextInt(); System.out.println( "计算结果:" + oper1 / oper2 ); } catch (ArithmeticException e2) { System.out.println( "异常1:除数为零!,请重新输入除数" ); oper2 = in.nextInt(); System.out.println( "计算结果:" + oper1 / oper2 ); } catch (InputMismatchException e1) { System.out.println( "异常2:输入不为数字!,请重新输入" ); // int one = in.nextInt(); // int two = in.nextInt(); // System.out.println( "计算结果:" + one / two ); System.out.print( "请输入被除数:" ); String a = in.next(); oper1 = in.nextInt(); System.out.print( "请输入除数:" ); oper2 = in.nextInt(); System.out.println( "计算结果:" + oper1 / oper2 ); } // catch (NumberFormatException e4) {; // System.out.println( "FormatException4:" + e4.getMessage() ); // oper1 = in.nextInt(); // oper2 = in.nextInt(); // System.out.println( "计算结果:" + oper1 / oper2 ); // } finally { System.out.println( "程序结束" ); } } }
四、实验小结(包括问题和解决方法、心得体会等)
使用try-catch进行异常处理,遇到很多问题
1:不知道捕获异常的种类
2:关于异常的处理
3:输入输出格式异常的处理,关于Scanner方法,使用in.nexInt()方法,其读取的
都是控制台中的第一行。
//网上测试的好多异常处理,亲测并不能使用。