201871010102-常龙龙《面向对象程序设计(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.掌握包的概念及用法;
|
博文正文内容:
第一部分:总结第四章理论知识(20分)
1.掌握类与对象的基础概念,理解类与对象的关系;
2.掌握对象与对象变量的关系;
3.掌握预定义类Date、LocalDate类的常用API;
4.掌握用户自定义类的语法规则,包括实例域、静态域、构造器方法、更改器方法、访问器方法、静态方法、main方法、方法参数的定义要求;(重点、难点)
5.掌握对象的构造方法、定义方法及使用要求(重点);
6.理解重载概念及用法;
7.掌握包的概念及用法;
第二部分:实验部分
实验名称:实验三 类与对象的定义及使用
1. 实验目的:
(1) 熟悉PTA平台线上测试环境;
(2) 理解用户自定义类的定义;
(3) 掌握对象的声明;
(4) 学会使用构造函数初始化对象;
(5) 使用类属性与方法的使用掌握使用;
(6) 掌握package和import语句的用途。
3. 实验步骤与内容:
实验1 任务1(10分)
采用个人账号登录https://pintia.cn/,使用绑定码620781加入PTA平台NWNU-2019CST1教学班(西北师范大学 计算机科学与工程学院 2018级计算机科学与技术),完成《2019秋季西北师范大学面向对象程序设计程序设计能力测试1》,测试时间50分钟。
实验课已做。
实验1 任务2(25分)
实验课已做。
实验2 测试程序1(10分)
1>、 编辑、编译、调试运行程序4-2(教材104页);
2>、结合程序运行结果,掌握类的定义与类对象的用法,并在程序代码中添加类与对象知识应用的注释;
3>、尝试在项目中编辑两个类文件(Employee.java、 EmployeeTest.java ),编译并运行程序。
将Employee包中的两个类拆开,分别新建两个类装进去
4>、参考教材104页EmployeeTest.java,设计StudentTest.java,定义Student类,包含name(姓名)、sex(性别)、javascore(java成绩)三个字段,编写程序,从键盘输入学生人数,输入学生信息,并按以下表头输出学生信息表:
姓名 性别 java成绩
代码如下
import java.util.*; public class StudentTest { public static void main(String[] args) { // TODO Auto-generated method stub Scanner in=new Scanner(System.in); System.out.println("请输入学生人数:"); int number=in.nextInt(); Student[] infro=new Student[number]; for(int i=0;i<number;i++) { System.out.println("请输入第"+(i+1)+"个人的姓名:"); String n=in.next(); System.out.println("请输入第"+(i+1)+"个人的性别:"); String s=in.next(); System.out.println("请输入第"+(i+1)+"个人的java成绩:"); int java=in.nextInt(); infro[i]=new Student(n,s,java); } System.out.println("姓名\t性别\tjava成绩\t"); for (Student e : infro) System.out.println(e.getName() + "\t" + e.getSex() + "\t" + e.getJavaScore()+"\t"); } } class Student{ private String name; private String sex; private int javascore; public Student(String n,String s,int java){ this.name=n; this.sex=s; this.javascore=java; } public String getName() { return name; } public String getSex() { return sex; } public int getJavaScore() { return javascore; } }
运行结果如下
实验2 测试程序2(5分)
代码如下
/** * This program demonstrates static methods. * @version 1.02 2008-04-10 * @author Cay Horstmann */ public class StaticTest { public static void main(String[] args) { // fill the staff array with three Employee objects var staff = new Employee[3]; //创建Employee类型的数组 staff[0] = new Employee("Tom", 40000); staff[1] = new Employee("Dick", 60000); staff[2] = new Employee("Harry", 65000); //初始化数组 // print out information about all Employee objects for (Employee e : staff) { e.setId(); System.out.println("name=" + e.getName() + ",id=" + e.getId() + ",salary=" + e.getSalary()); //遍历数组并输出 } int n = Employee.getNextId(); // calls static method System.out.println("Next available id=" + n); } } class Employee { private static int nextId = 1; private String name; private double salary; private int id; //定义了三个私有变量 public Employee(String n, double s) { name = n; salary = s; id = 0; } //构造函数有两个参数 public String getName() { return name; } public double getSalary() { return salary; } public int getId() { return id; } //三个函数分别返回姓名,薪水和ID; public void setId() { id = nextId; // set id to next available id nextId++; } public static int getNextId() { return nextId; // returns static field } public static void main(String[] args) // unit test { var e = new Employee("Harry", 50000); //构造了一个e对象,并对Employee构造函数进行传参 System.out.println(e.getName() + " " + e.getSalary()); } }
运行结果如下
实验2 测试程序3(5分)
代码如下
package four; /** * This program demonstrates parameter passing in Java. * @version 1.01 2018-04-10 * @author Cay Horstmann */ public class ParamTest { public static void main(String[] args) { /* * Test 1: Methods can't modify numeric parameters */ System.out.println("Testing tripleValue:"); double percent = 10; System.out.println("Before: percent=" + percent); tripleValue(percent); //将percent的值传入函数 System.out.println("After: percent=" + percent); /* * Test 2: Methods can change the state of object parameters */ System.out.println("\nTesting tripleSalary:"); var harry = new Employee("Harry", 50000); //创建了一个Employee类型的对象 System.out.println("Before: salary=" + harry.getSalary()); tripleSalary(harry); System.out.println("After: salary=" + harry.getSalary()); //输入在函数内部改变后的结果 /* * Test 3: Methods can't attach new objects to object parameters */ System.out.println("\nTesting swap:"); var a = new Employee("Alice", 70000); var b = new Employee("Bob", 60000); //创建了两个Employee类型的对象 System.out.println("Before: a=" + a.getName()); System.out.println("Before: b=" + b.getName()); swap(a, b); //将a,b进行交换后输出 System.out.println("After: a=" + a.getName()); System.out.println("After: b=" + b.getName()); } public static void tripleValue(double x) // doesn't work { x = 3 * x; System.out.println("End of method: x=" + x); } public static void tripleSalary(Employee x) // works { x.raiseSalary(200); System.out.println("End of method: salary=" + x.getSalary()); } public static void swap(Employee x, Employee y) { Employee temp = x; x = y; y = temp; System.out.println("End of method: x=" + x.getName()); System.out.println("End of method: y=" + y.getName()); //交换两数 } } class Employee // simplified Employee class { //Employee类用于对主类传入的值进行修改后传出 private String name; private double salary; public Employee(String n, double s) { name = n; salary = s; } public String getName() { return name; } public double getSalary() { return salary; } public void raiseSalary(double byPercent) { double raise = salary * byPercent / 100; salary += raise; //薪水等于工资加奖金 } }
运行结果如下
实验2 测试程序4(5分)
代码如下
import java.util.*; /** * This program demonstrates object construction. * @version 1.02 2018-04-10 * @author Cay Horstmann */ public class ConstructorTest { public static void main(String[] args) { // fill the staff array with three Employee objects var staff = new Employee[3]; staff[0] = new Employee("Harry", 40000); staff[1] = new Employee(60000); staff[2] = new Employee(); //创建了三个Employeelei类型的数组元素对象,并对其进行初始化 // print out information about all Employee objects for (Employee e : staff) System.out.println("name=" + e.getName() + ",id=" + e.getId() + ",salary=" + e.getSalary()); //遍历数组进行输出值 } } class Employee { private static int nextId; private int id; private String name = ""; // instance field initialization private double salary; //创建了三个私有元素变量 // static initialization block static { var generator = new Random(); // set nextId to a random number between 0 and 9999 nextId = generator.nextInt(10000); } // object initialization block { id = nextId; nextId++; } // three overloaded constructors public Employee(String n, double s) { name = n; salary = s; } public Employee(double s) { // calls the Employee(String, double) constructor this("Employee #" + nextId, s); } // the default constructor public Employee() { // name initialized to ""--see above // salary not explicitly set--initialized to 0 // id initialized in initialization block } public String getName() { return name; } public double getSalary() { return salary; } public int getId() { return id; } //返回各个元素的值 }
运行结果如下
实验2 测试程序5(5分)
代码如下
package four; // the classes in this file are part of this package import java.time.*; // import statements come after the package statement /** * @version 1.11 2015-05-08 * @author Cay Horstmann */ public class Employee { private String name; private double salary; private LocalDate hireDay; public Employee(String name, double salary, int year, int month, int day) { this.name = name; this.salary = salary; hireDay = LocalDate.of(year, month, day); } public String getName() { return name; } public double getSalary() { return salary; } public LocalDate getHireDay() { return hireDay; } public void raiseSalary(double byPercent) { double raise = salary * byPercent / 100; salary += raise; } //返回薪水,姓名,和雇佣年月 }
package four; //import com.horstmann.corejava.*; // the Employee class is defined in that package import static java.lang.System.*; /** * This program demonstrates the use of packages. * @version 1.11 2004-02-19 * @author Cay Horstmann */ public class PackageTest { public static void main(String[] args) { // because of the import statement, we don't have to use // com.horstmann.corejava.Employee here var harry = new Employee("Harry Hacker", 50000, 1989, 10, 1); harry.raiseSalary(5); // because of the static import statement, we don't have to use System.out here out.println("name=" + harry.getName() + ",salary=" + harry.getSalary()); } }
运行结果如下
第三部分 实验总结
通过这周的学习,我基本了解了预定义类的基本使用方法,如Math类、String类、math类、Scanner类、LocalDate类等;大致掌握了用户自定义类的语法规则,如实例域、静态域、构造器方法等。但还是有些不足,概念理解不够深刻。在运行示例代码的过程中遇到了很多障碍,这都是我的学习经验,说明我在学习中还有一些漏洞和疑惑,在以后的学习中我会更加努力。