• 王颖奇 201771010129《面向对象程序设计(java)》第四周学习总结


    实验四 类与对象的定义及使用

    实验时间 2018-9-20

    1、目的与要求

    学习目标

    1. 掌握类与对象的基础概念,理解类与对象的关系;
    2. 掌握对象与对象变量的关系;
    3. 掌握预定义类的基本使用方法,熟悉Math类、String类、math类、Scanner类、LocalDate类的常用API;
    4. 掌握用户自定义类的语法规则,包括实例域、静态域、构造器方法、更改器方法、访问器方法、静态方法、main方法、方法参数的定义要求;(重点、难点)
    5. 掌握对象的构造方法、定义方法及使用要求;(重点)
    6. 理解重载概念及用法;
    7. 掌握包的概念及用法;
    8. 了解文档注释技术;

    A. 理论学习部分目的与要求

    (1)面向对象程序设计(OOP)的概论

    a.

    类是构造对象的模板或蓝图;

    b.对象

    要想使用OOP,一定要清楚对象的三个特征:

    ①对象的行为②对象的状态③对象标识

    c.识别类

    d.类之间的关系

    (2)使用预定义类

    对象与对象标识;

    Java类库中的LocalDate类;

    更改器方法与访问器方法;

    3)用户自定义类;

    4)静态域与静态方法;

    5)方法参数

    6)对象构造

    7)包

    8)类路径

    9)文档注释

    10)类设计技巧

    B. 实验学习部分目的与要求

    (1) 理解用户自定义类的定义

    (2) 掌握对象的声明

    (3) 学会使用构造函数初始化对象

    (4) 使用类属性与方法的使用掌握使用;

    (5) 掌握package和import语句的用途

    2、实验内容和步骤

    实验1 测试以下程序,掌握文件输入输出程序设计技术(文件输入输出,教材61-62)

    import java.io.*;

    import java.util.*;

    public class FileWriteReadTest {

    public static void main(String[] args) throws IOException{

    //写入文件演示

    PrintWriter out = new PrintWriter("myfile.txt");

    out.println("姓名 高数 Java 数据结构 平均成绩 总成绩");

    out.println("张三 20 30 40 0 0");

    out.println("李四 50 60 70 0 0");

    out.close();//输出完毕,需要close

    //读入文件演示

    Scanner in = new Scanner(new File("myfile.txt"));//myfile.txt这个File创建一个扫描器in

    int number = 1;//行号

    System.out.println(in.nextLine());

    while(in.hasNextLine()){//判断扫描器是否还有下一行未读取,该循环把文件的每一行都读出

    String line = in.nextLine();//读出myfile.txt的下一行

    System.out.print(""+(++number)+"行的内容: ");

    Scanner linescanner = new Scanner(line);//行内容建立扫描器

    linescanner.useDelimiter(" ");//使用空格作为分隔符

    String name = linescanner.next();

    String math = linescanner.next();

    String java = linescanner.next();

    String ds = linescanner.next();

    String avg = linescanner.next();

    String total = linescanner.next();

    System.out.println("name="+name+"  math="+math+"  java="+java+"  ds="+ds+"  avg"+avg+"  total="+total);

    }

    in.close();//读入完毕,最后需要对其进行close

    }

    }

    实验结果:

    实验2 导入第4章示例程序并测试。

    日历程序:

    测试程序1

    编辑、编译、调试运行程序4-2(教材104页);

    结合程序运行结果,掌握类的定义与类对象的用法,并在程序代码中添加类与对象知识应用的注释;

    尝试在项目中编辑两个类文件(Employee.java EmployeeTest.java ),编译并运行程序。

    实验结果:

    参考教材104EmployeeTest.java,设计StudentTest.java,定义Student类,包含name(姓名)、sex(性别)、javascorejava成绩)三个字段,编写程序,从键盘输入学生人数,输入学生信息,并按以下表头输出学生信息表:

      姓名      性别 java成绩

    改编的程序:

    package shiyan2;
    
    import java.util.Scanner;
    
    /**
     * This program tests the Student class.
     * time 2018 9 20
     * @author Wang yingqi
     */
    public class shiyan1
    {
       public static void main(String[] args)
       {
          // 填入四个学生的信息
          int x=4;
          Employee[] staff = new Employee[x];
          System.out.println("请输入学生:");
          Scanner in = new Scanner(System.in); 
          for(int i=0;i<staff.length;i++) {
              staff[i]=new Employee(in.next(),in.next(),in.nextInt());
          }
          System.out.println("name"+" "+"sex"+" "+" "+"javascore");
    
          // 输出四个学生的信息
          for (Employee e : staff)
             System.out.println(e.getName() +"   "+e.getSex()+"        "+e.getJavaScore());
       }
    }
    
    class Employee
    {
       private String name;
       private String sex;
       private int javascore;
    
       public Employee(String n, String s, int m)
       {
          name = n;
          sex = s;
          javascore =m;
       }
    
       public String getName()
       {
          return name;
       }
    
       public String getSex()
       {
          return sex;
       }
    
       public int getJavaScore()
       {
          return javascore;
       }
    
    }

    运行结果:

    测试程序2

    编辑、编译、调试运行程序4-3(教材116);

    结合程序运行结果,理解程序代码,掌握静态域(netxtId)与静态方法(getNextId)的用法,在相关代码后添加注释;

    理解Java单元(类)测试的技巧。

    实验结果:

    测试程序3

    编辑、编译、调试运行程序4-4(教材121);

    结合程序运行结果,理解程序代码,掌握掌握Java方法参数的用法,在相关代码后添加注释;

    实验结果:

    测试程序4

    编辑、编译、调试运行程序4-5(教材129);

    结合程序运行结果,理解程序代码,掌握Java用户自定义类的用法,掌握对象构造方法及对象使用方法,在相关代码后添加注释。

    实验结果:

    测试程序5

    编辑、编译、调试运行程序4-64-7(教材135);

    结合程序运行结果,理解程序代码,掌握Java包的定义及用法,在相关代码后添加注释;

    包的放法:

    实验结果:

    实验3  编写长方形类Rectangle与圆形类Circle,其中Rectangle类设置私有属性:width,length;Circle类设置私有属性radius。编写Rectangle类的带参构造函数Rectangle(int width,int length), Circle类的带参构造函数Circle(int radius),编写两个类的toString方法(Eclipse可自动生成)。上述2个类均定义以下方法:

    求周长的方法public int getPerimeter()

    求面积的方法public int getArea()

    在main方法中完成以下任务:

    (1) 输入1行长与宽,创建一个Rectangle对象;

    (2) 输入1行半径,创建一个Circle对象;

    (3) 将两个对象的周长加总输出,将两个对象的面积加总输出。

    创立Test类和tuxing类:

    Test类的代码:

    package tuxing;
    
    import java.math.BigDecimal;
    import java.util.Scanner;
    
    class Test {
    public static void main(String[] args) {
    
    Scanner sc = new Scanner(System.in);
    System.out.println("请输入长方形的长:");
    int length = sc.nextInt();
    System.out.println("请输入长方形的宽:");
    int width = sc.nextInt();
    System.out.print("请输入圆的半径-->");
    float radius=sc.nextFloat();
    
    tuxing x = new tuxing();
    
    x.setLength(length);
    x.setWidth(width);
    x.setRadius(radius);
    
    System.out.println("矩形的周长是:"+x.getPerimeter());
    System.out.println("矩形的面积是:"+x.getArea());
    System.out.println("圆的周长为-->"+x.getPerimeter(radius)+"
    "+"圆的面积为-->"+x.getArea(radius));
    
    BigDecimal bd1 = new BigDecimal(x.getPerimeter(radius));
    BigDecimal bd2 = new BigDecimal(x.getArea(radius));
    BigDecimal bd3 = new BigDecimal(x.getPerimeter());
    BigDecimal bd4 = new BigDecimal(x.getArea());
    BigDecimal bd5 = bd1.add(bd3);
    BigDecimal bd6 = bd2.add(bd4);
    bd5= bd5.setScale(2, BigDecimal.ROUND_HALF_UP);
    bd6= bd6.setScale(2, BigDecimal.ROUND_HALF_UP);
    System.out.println("周长和:"+bd5+"
    "+"面积和"+bd6);
    }
    }

    tuxing类的代码:

    package tuxing;
    
    import java.util.Scanner;
    import java.math.BigDecimal;
    
    class tuxing{
    private int length;
    private int width;
    float radius;
    
    public tuxing(){}
    
    public void setLength(int length) {
    this.length = length;
    }
    
    public void setWidth(int width) {
    this.width = width;
    }
    
    public int getPerimeter() {
    return (length + width) * 2;
    }
    
    public int getArea() {
    return length * width;
    }
    
    public void setRadius(float radius) {
        BigDecimal bd = new BigDecimal(radius);
        radius = bd.setScale(2, BigDecimal.ROUND_HALF_UP).floatValue();
    this.radius = radius;
    }
    
    public float getPerimeter(float radius){
        BigDecimal bd = new BigDecimal(radius);
        radius = bd.setScale(2, BigDecimal.ROUND_HALF_UP).floatValue();
    return (float) (radius*2*3.14);
    }
    
    public float getArea(float radius){
        BigDecimal bd = new BigDecimal(radius);
        radius = bd.setScale(2, BigDecimal.ROUND_HALF_UP).floatValue();
    return (float) (radius*radius*3.14);
    }
    }

    运行结果:

    注:为了解决float和double型的精确度问题(如图所示),需要使用BigDecimal的方法,使关于圆的周长和面积输出能够以正确的精度和数值输出。

    结:

    通过这个周的学习,我明白了面向对象程序设计(OOP)的概论,认识了什么是类,什么是对象,并了解了对象的三个特征:对象的行为,对象的状态,对象标识;另外,我初步的掌握了如何使用预定义类,学会了如何构造并初始化对象。通过课上学习Java类库中的LocalDate类,以及CalendarTest的程序实验代码,加深了我对类的认识。在课下的学习中,我略微自学了用户自定义类的内容,并测试运行了示例程序,初步学习完了后面的内容。在学习过程中,我理解了学习Java必须要学会自己读懂程序,并在不断的练习中转化成自己的知识。

  • 相关阅读:
    Thinkphp各种方法知识图谱
    Yii2.0学习笔记:创建登录表单
    Yii2.0学习笔记:第一个页面Saying Hello
    4.1
    4
    flask(3.0)
    flask(2.0)
    flask(1.1)装饰器装饰多个视图函数出现的问题
    flask(1.0)
    Flask之上下文管理机制
  • 原文地址:https://www.cnblogs.com/1556889081wyq/p/9690038.html
Copyright © 2020-2023  润新知