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类等;大致掌握了用户自定义类的语法规则,如实例域、静态域、构造器方法等。但还是有些不足,概念理解不够深刻。在运行示例代码的过程中遇到了很多障碍,这都是我的学习经验,说明我在学习中还有一些漏洞和疑惑,在以后的学习中我会更加努力。

posted @ 2019-09-23 21:13  北柯  阅读(253)  评论(1编辑  收藏  举报