201871010107-公海瑜《面向对象程序设计(Java)》第四周学习总结
201871010107-公海瑜《面向对象程序设计(Java)》第四周学习总结
项目 | 内容 |
这个作业属于哪个课程 |
https://www.cnblogs.com/nwnu-daizh/ |
这个作业的要求在哪里 |
https://www.cnblogs.com/nwnu-daizh/p/11552848.html |
作业学习目标 |
1. 掌握类与对象的基础概念,理解类与对象的关系; 2. 掌握对象与对象变量的关系; 3. 掌握预定义类Date、LocalDate类的常用API; 4. 掌握用户自定义类的语法规则,包括实例域、静态域、构造器方法、更改器方法、访问器方法、 静态方法、main方法、方法参数的定义要求; 5. 掌握对象的构造方法、定义方法及使用要求; 6. 理解重载概念及用法; 7.掌握包的概念及用法; |
第一部分:总结第四章理论知识
1、类:类是一个模板,它描述一类对象的行为和状态。
2、对象:对象是类的一个实例,有状态和行为。
3、一个对象变量并没有实际包含一个对象,而仅仅引用一个对象。在Java中,任何对象变量都是对储存在另外一个地方的一个对象的引用。
4、实例域:可将实例域定义为final,构建对象时必须初始化这样的域。
5、静态域:绝大多数面向对象程序设计语言中,静态域被称为类域。如果将域定义为static,每个类中只有一个这样的域。而每个对象对于所有的实例域却都有自己的一份拷贝。
6、静态方法:静态方法是一种不能向对象实时操作的方法。可以使用对象调用静态方法。
7、构造器方法:构造器与类同名。构造器总是伴随着new操作符的执行被调用,而不能对一个已经存在的对象调用构造器来达到重新设置实例域的目的。
8、更改器方法:调用更改器方法后对象的状态会改变。
9、访问器方法:只访问对象而不修改对象的方法。
10、重载:多个方法有相同的名字、不同的参数、便产生了重载。Java允许重载任何方法,而不只是构造器方法。
11、包:Java允许使用包将类组织起来。借助包可以方便地组织自己的代码,并将自己的代码与别人提供的代码库分开管理。而且使用包可以确保类名的唯一性。
第二部分:实验部分
实验名称:实验三 类与对象的定义及使用
1. 实验目的:
(1) 熟悉PTA平台线上测试环境;
(2) 理解用户自定义类的定义;
(3) 掌握对象的声明;
(4) 学会使用构造函数初始化对象;
(5) 使用类属性与方法的使用掌握使用;
(6) 掌握package和import语句的用途。
2. 实验步骤与内容:
实验1 采用个人账号登录https://pintia.cn/,使用绑定码620781加入PTA平台NWNU-2019CST1教学班(西北师范大学 计算机科学与工程学院 2018级计算机科学与技术),完成《2019秋季西北师范大学面向对象程序设计程序设计能力测试1》,测试时间50分钟。
(1)公民身份证号码按照GB11643—1999《公民身份证号码》国家标准编制,由18位数字组成:前6位为行政区划分代码,第7位至14位为出生日期码,第15位至17位为顺序码,第18位为校验码。从键盘输入1个身份证号,将身份证号的年月日抽取出来,按年-月-日格式输出。注意:输入使用Scanner类的nextLine()方法,以免出错。
代码如下:
package tiqu; import java.util.Scanner; public class tiqu { public static void main(String[] args) { // TODO Auto-generated method stub Scanner in = new Scanner(System.in); String ID = in.nextLine(); String s1,s2,s3; int i = 6; s1 = ID.substring(i,i+4); s2 = ID.substring(i+4,i+6); s3 = ID.substring(i+6,i+8); System.out.println(s1+"-"+s2+"-"+s3); } }
运行结果如图:
(2)studentfile.txt文件内容是某班同学的学号与姓名,利用此文件编制一个程序,将studentfile.txt文件的信息读入到内存,并提供两类查询功能:(1)输入姓名查询学号;(2)输入学号查询姓名。要求程序具有友好人机交互界面。 编程建议: (1)从文件中读入学生信息,可以编写如下函数: public static void StudentsFromFile(String fileName)) (2)输入姓名查找学生学号,可以编写如下函数: public static String findStudentName(String name) (3)输入学号查找学生姓名,可以编写如下函数: public static String findStudentID(String ID)。
代码如下:
import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import java.util.ArrayList; import java.util.Scanner; public class Main1 { // private static Student students[]; private static ArrayList<Student> list; public static void main(String[] args) { list = new ArrayList<>(); Scanner in = new Scanner(System.in); try { readFile("studentfile.txt"); System.out.println("请选择操作,1按姓名,2按学号,3退出"); int i; while ((i = in.nextInt()) != 3) { switch (i) { case 1: System.out.println("请输入姓名"); String name = in.next(); Student student = findStudentByName(name); if (student == null) { System.out.println("没找到"); } else { System.out.println(student.toString()); } System.out.println("请选择操作,1按姓名,2按学号,3退出"); break; case 2: System.out.println("请输入学号"); String id = in.next(); Student student1 = findStudentById(id); if (student1 == null) { System.out.println("没找到"); } else { System.out.println(student1.toString()); } System.out.println("请选择操作,1按姓名,2按学号,3退出"); break; default: System.out.println("输入有误"); System.out.println("请选择操作,1按姓名,2按学号,3退出"); break; } } } catch (IOException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); }finally { in.close(); } } public static void readFile(String path) throws IOException { FileReader reader = new FileReader(path); BufferedReader br = new BufferedReader(reader); String result; while ((result = br.readLine()) != null) { Student student = new Student(); student.setName(result.substring(13)); student.setID(result.substring(0,12)); list.add(student); } br.close(); } public static Student findStudentByName(String name) { for (Student student : list) { if (student.getName().equals(name)) { return student; } } return null; } public static Student findStudentById(String Id) { for (Student student : list) { if (student.getID().equals(Id)) { return student; } } return null; } } class Student { private String name; private String ID; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getID() { return ID; } public void setID(String iD) { ID = iD; } @Override public String toString() { // TODO 自动生成的方法存根 return "姓名是:" + name + "学号是:" + ID; } }
运行结果如图:
实验2 导入第4章示例程序并测试。
测试程序1:
l 编辑、编译、调试运行程序4-2(教材104页);
l 结合程序运行结果,掌握类的定义与类对象的用法,并在程序代码中添加类与对象知识应用的注释;
l 尝试在项目中编辑两个类文件(Employee.java、 EmployeeTest.java ),编译并运行程序。
l 参考教材104页EmployeeTest.java,设计StudentTest.java,定义Student类,包含name(姓名)、sex(性别)、javascore(java成绩)三个字段,编写程序,从键盘输入学生人数,输入学生信息,并按以下表头输出学生信息表:
姓名 性别 java成绩
测试结果如下:
测试程序2:
l 编辑、编译、调试运行程序4-3(教材116);
l 结合程序运行结果,理解程序代码,掌握静态域(netxtId)与静态方法(getNextId)的用法,在相关代码后添加注释;
理解Java单元(类)测试的技巧。
测试结果如下:
测试程序3:
l 编辑、编译、调试运行程序4-4(教材121);
结合程序运行结果,理解程序代码,掌握Java方法参数的用法,在相关代码后添加注释;
测试结果如下:
测试程序4:
l 编辑、编译、调试运行程序4-5(教材129);
l 结合程序运行结果,理解程序代码,掌握Java用户自定义类的用法,掌握对象构造方法及对象使用方法,在相关代码后添加注释。
测试结果如下:
测试程序5:
l 编辑、编译、调试运行程序4-6、4-7(教材135);
结合程序运行结果,理解程序代码,掌握Java包的定义及用法,在相关代码后添加注释;
4-6测试结果如下:
4-7测试结果如图:
4.实验总结
通过这个周的学习,我明白了面向对象程序设计的概论,认识了什么是类,什么是对象,并了解了对象的三个特征:对象的行为,对象的状态,对象标识;另外,我初步的掌握了如何使用预定义类,学会了如何构造并初始化对象。通过课上学习Java类库,加深了我对类的认识。在课下的学习中,虽然遇到了许多困难,但是在同学的帮助下,我慢慢学会了如何解决此类问题。在学习过程中,我理解了学习Java必须要学会自己读懂程序,并在不断的练习中转化成自己的知识。