zoukankan      html  css  js  c++  java
  • 杨其菊201771010134《面向对象程序设计(java)》第四周学习总结

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

    第一部分:理论知识

    1.类与对象

    a.类(class)是构造对象的模板或蓝图。由类构造对象的过程称为创建类的实例;

    java中类声明的格式如下:

    [类修饰符] class 类名 [extends 父类名称] [implements 接口名称列表] 

    {

       变量定义及初始化;

       方法定义及方法体;

    }

    public:类的访问控制符。Java类具有两种访问访问修饰符:public和default。public允许类具有完全开放的可见性,所有其他类都可以访问它,省略public,则为default,即只有位于同一个包(本质上就是文件夹)中的类可以访问该类。

    abstract指明该类为一个抽象类,说明该类是一个定义不完全的类,需要被继承,才能实例化创建对象。

     b.对象:即数据,对象有三个特性——1.行为 2.状态 3.标识。

    c、方法,变量.

    d.类是对象,事物的描述和抽象,是具有相同属性和行为的对象集合。对象则是该类事物的实例。    

    2.预定义类 、API 

    Math类、String类、math类、Scanner类、LocalDate类

    3.自定义类

    4.静态域和静态方法    绝大多数面向对象程序设计语言中,静态域被称为类域。如果将域定义为static,每个类中只有一个这样的域。而每个对象对于所有的实例域却都有自己的一份拷贝。

       构造器、更改器方法、访问器方法,静态方法

    5.方法参数

    6.包

    7.文档注释技术

    第二部分:实验部分

    1、实验目的与要求

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

    (2) 掌握对象的声明;

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

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

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

    2、实验内容和步骤

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

     1 import java.io.*;
     2 import java.util.*;
     3 public class FileWriteReadTest {
     4     public static void main(String[] args) throws IOException{
     5         //写入文件演示
     6         PrintWriter out = new PrintWriter("myfile.txt");
     7         out.println("姓名 高数 Java 数据结构 平均成绩 总成绩");
     8         out.println("张三 20 30 40 0 0");
     9         out.println("李四 50 60 70 0 0");
    10         out.close();//输出完毕,需要close
    11         //读入文件演示
    12         Scanner in = new Scanner(new File("myfile.txt"));//为myfile.txt这个File创建一个扫描器in
    13         int number = 1;//行号
    14         System.out.println(in.nextLine());
    15         while(in.hasNextLine()){//判断扫描器是否还有下一行未读取,该循环把文件的每一行都读出
    16             String line = in.nextLine();//读出myfile.txt的下一行
    17             System.out.print("第"+(++number)+"行的内容: ");            
    18             Scanner linescanner = new Scanner(line);//行内容建立扫描器
    19             linescanner.useDelimiter(" ");//使用空格作为分隔符
    20             String name = linescanner.next();
    21             String math = linescanner.next();
    22             String java = linescanner.next();
    23             String ds = linescanner.next();
    24             String avg = linescanner.next();
    25             String total = linescanner.next();
    26             System.out.println("name="+name+"  math="+math+"  java="+java+"  ds="+ds+"  avg"+avg+"  total="+total);
    27         }
    28         in.close();//读入完毕,最后需要对其进行close。
    29     }    
    30 }

    测试结果截图如下:

    实验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成绩

    (1)源代码:

    (2)Employee.java、 EmployeeTest.java 运行结果截图:

     1 import java.time.*;
     2 
     3 /**
     4  * This program tests the Employee class.
     5  * @version 1.12 2015-05-08
     6  * @author Cay Horstmann
     7  */
     8 public class EmployeeTest
     9 {
    10    public static void main(String[] args)
    11    {
    12       // fill the staff array with three Employee objects
    13       Employee[] staff = new Employee[3];
    14 
    15       staff[0] = new Employee("Carl Cracker", 75000, 1987, 12, 15);
    16       staff[1] = new Employee("Harry Hacker", 50000, 1989, 10, 1);
    17       staff[2] = new Employee("Tony Tester", 40000, 1990, 3, 15);
    18 
    19       // raise everyone's salary by 5%
    20       for (Employee e : staff)
    21          e.raiseSalary(5);
    22 
    23       // print out information about all Employee objects
    24       for (Employee e : staff)
    25          System.out.println("name=" + e.getName() + ",salary=" + e.getSalary() + ",hireDay="
    26                + e.getHireDay());
    27    }
    28 }
    29 
    30 class Employee
    31 {
    32    private String name;
    33    private double salary;
    34    private LocalDate hireDay;
    35 
    36    public Employee(String n, double s, int year, int month, int day)
    37    {
    38       name = n;
    39       salary = s;
    40       hireDay = LocalDate.of(year, month, day);
    41    }
    42 
    43    public String getName()
    44    {
    45       return name;
    46    }
    47 
    48    public double getSalary()
    49    {
    50       return salary;
    51    }
    52 
    53    public LocalDate getHireDay()
    54    {
    55       return hireDay;
    56    }
    57 
    58    public void raiseSalary(double byPercent)
    59    {
    60       double raise = salary * byPercent / 100;
    61       salary += raise;
    62    }
    63 }

    (3)EmployeeTest.java源代码及运行结果截图如下

     1 import java.time.LocalDate;
     2 import java.util.Scanner;
     3 /**
     4  * This program tests the Employee class.
     5  * @version 1.12 2018-09-25
     6  * @author yangxiaoxiao
     7  */
     8 public class StudentTest
     9 {
    10     String name;
    11     String sex;
    12     double score;
    13    public static void main(String[] args)
    14     //public static void ScannerTest(){
    15    {
    16        
    17        
    18        int i = 0;
    19         
    20         System.out.print("numer:");
    21         Scanner sc= new Scanner(System.in);
    22        int number = sc.nextInt();
    23        StudentTest Stu[] = new StudentTest[number];
    24         for (i = 0; i < Stu.length; i++) {
    25             Stu[i] = new StudentTest();
    26             System.out.print( (i + 1)+" "+"姓名:" );
    27             Stu[i].name = sc.next();
    28             System.out.print( (i + 1)+" " +"性别:");
    29             Stu[i].sex = sc.next();
    30             System.out.print( (i + 1)+" " +"java成绩:");
    31             Stu[i].score = sc.nextDouble();
    32         }
    33        
    34       
    35       System.out.println("	姓名	性别	成绩");
    36         for (StudentTest StudentTest : Stu) {
    37             System.out.println("	" + StudentTest.name+ "	" + StudentTest.sex + "	" + StudentTest.score);
    38         }
    39         
    40         
    41    }
    42 }
    43         
    44         
    45     

     

    测试程序2:

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

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

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

     1 /**
     2  * This program demonstrates static methods.
     3  * @version 1.01 2004-02-19
     4  * @author Cay Horstmann
     5  */
     6 public class StaticTest
     7 {
     8    public static void main(String[] args)
     9    {
    10       // fill the staff array with three Employee objects
    11       Employee[] staff = new Employee[3];
    12 
    13       staff[0] = new Employee("Tom", 40000);
    14       staff[1] = new Employee("Dick", 60000);
    15       staff[2] = new Employee("Harry", 65000);
    16 
    17       // print out information about all Employee objects
    18       for (Employee e : staff)
    19       {
    20          e.setId();
    21          System.out.println("name=" + e.getName() + ",id=" + e.getId() + ",salary="
    22                + e.getSalary());
    23       }
    24 
    25       int n = Employee.getNextId(); // calls static method
    26       System.out.println("Next available id=" + n);
    27    }
    28 }
    29 
    30 class Employee
    31 {
    32    private static int nextId = 1;
    33 
    34    private String name;
    35    private double salary;
    36    private int id;
    37 
    38    public Employee(String n, double s)
    39    {
    40       name = n;
    41       salary = s;
    42       id = 0;
    43    }
    44 
    45    public String getName()
    46    {
    47       return name;
    48    }
    49 
    50    public double getSalary()
    51    {
    52       return salary;
    53    }
    54 
    55    public int getId()
    56    {
    57       return id;
    58    }
    59 
    60    public void setId()
    61    {
    62       id = nextId; // set id to next available id
    63       nextId++;
    64    }
    65 
    66    public static int getNextId()
    67    {
    68       return nextId; // returns static field
    69    }
    70 
    71    public static void main(String[] args) // unit test
    72    {
    73       Employee e = new Employee("Harry", 50000);
    74       System.out.println(e.getName() + " " + e.getSalary());
    75    }
    76 }

     

    测试程序

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

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

     1 /**
     2  * This program demonstrates parameter passing in Java.
     3  * @version 1.00 2000-01-27
     4  * @author Cay Horstmann
     5  */
     6 public class ParamTest
     7 {
     8    public static void main(String[] args)
     9    {
    10       /*
    11        * Test 1: Methods can't modify numeric parameters
    12        */
    13       System.out.println("Testing tripleValue:");
    14       double percent = 10;
    15       System.out.println("Before: percent=" + percent);
    16       tripleValue(percent);
    17       System.out.println("After: percent=" + percent);
    18 
    19       /*
    20        * Test 2: Methods can change the state of object parameters
    21        */
    22       System.out.println("
    Testing tripleSalary:");
    23       Employee harry = new Employee("Harry", 50000);
    24       System.out.println("Before: salary=" + harry.getSalary());
    25       tripleSalary(harry);
    26       System.out.println("After: salary=" + harry.getSalary());
    27 
    28       /*
    29        * Test 3: Methods can't attach new objects to object parameters
    30        */
    31       System.out.println("
    Testing swap:");
    32       Employee a = new Employee("Alice", 70000);
    33       Employee b = new Employee("Bob", 60000);
    34       System.out.println("Before: a=" + a.getName());
    35       System.out.println("Before: b=" + b.getName());
    36       swap(a, b);
    37       System.out.println("After: a=" + a.getName());
    38       System.out.println("After: b=" + b.getName());
    39    }
    40 
    41    public static void tripleValue(double x) // doesn't work
    42    {
    43       x = 3 * x;
    44       System.out.println("End of method: x=" + x);
    45    }
    46 
    47    public static void tripleSalary(Employee x) // works
    48    {
    49       x.raiseSalary(200);
    50       System.out.println("End of method: salary=" + x.getSalary());
    51    }
    52 
    53    public static void swap(Employee x, Employee y)
    54    {
    55       Employee temp = x;
    56       x = y;
    57       y = temp;
    58       System.out.println("End of method: x=" + x.getName());
    59       System.out.println("End of method: y=" + y.getName());
    60    }
    61 }
    62 
    63 class Employee // simplified Employee class
    64 {
    65    private String name;
    66    private double salary;
    67 
    68    public Employee(String n, double s)
    69    {
    70       name = n;
    71       salary = s;
    72    }
    73 
    74    public String getName()
    75    {
    76       return name;
    77    }
    78 
    79    public double getSalary()
    80    {
    81       return salary;
    82    }
    83 
    84    public void raiseSalary(double byPercent)
    85    {
    86       double raise = salary * byPercent / 100;
    87       salary += raise;
    88    }
    89 }

     

    测试程序

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

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

     1 import java.util.*;
     2 
     3 /**
     4 * This program demonstrates object construction.
     5 * @version 1.01 2004-02-19
     6 * @author Cay Horstmann
     7 */
     8 public class ConstructorTest
     9 {
    10 public static void main(String[] args)
    11 {
    12 // fill the staff array with three Employee objects
    13 Employee[] staff = new Employee[3];
    14 
    15 staff[0] = new Employee("Harry", 40000);
    16 staff[1] = new Employee(60000);
    17 staff[2] = new Employee();
    18 
    19 // print out information about all Employee objects
    20 for (Employee e : staff)
    21 System.out.println("name=" + e.getName() + ",id=" + e.getId() + ",salary="
    22 + e.getSalary());
    23 }
    24 }
    25 
    26 class Employee
    27 {
    28 private static int nextId;
    29 
    30 private int id;
    31 private String name = ""; // instance field initialization
    32 private double salary;
    33 
    34 // static initialization block
    35 static
    36 {
    37 Random generator = new Random();
    38 // set nextId to a random number between 0 and 9999
    39 nextId = generator.nextInt(10000);
    40 }
    41 
    42 // object initialization block
    43 {
    44 id = nextId;
    45 nextId++;
    46 }
    47 
    48 // three overloaded constructors
    49 public Employee(String n, double s)
    50 {
    51 name = n;
    52 salary = s;
    53 }
    54 
    55 public Employee(double s)
    56 {
    57 // calls the Employee(String, double) constructor
    58 this("Employee #" + nextId, s);
    59 }
    60 
    61 // the default constructor
    62 public Employee()
    63 {
    64 // name initialized to ""--see above
    65 // salary not explicitly set--initialized to 0
    66 // id initialized in initialization block
    67 }
    68 
    69 public String getName()
    70 {
    71 return name;
    72 }
    73 
    74 public double getSalary()
    75 {
    76 return salary;
    77 }
    78 
    79 public int getId()
    80 {
    81 return id;
    82 }
    83 }

    测试程序5:

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

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

    4-6 

     1 import com.horstmann.corejava.*;
     2 // the Employee class is defined in that package
     3 
     4 import static java.lang.System.*;
     5 
     6 /**
     7  * This program demonstrates the use of packages.
     8  * @version 1.11 2004-02-19
     9  * @author Cay Horstmann
    10  */
    11 public class PackageTest
    12 {
    13    public static void main(String[] args)
    14    {
    15       // because of the import statement, we don't have to use 
    16       // com.horstmann.corejava.Employee here
    17       Employee harry = new Employee("Harry Hacker", 50000, 1989, 10, 1);
    18 
    19       harry.raiseSalary(5);
    20 
    21       // because of the static import statement, we don't have to use System.out here
    22       out.println("name=" + harry.getName() + ",salary=" + harry.getSalary());
    23    }
    24 }

    4-7

     1 package com.horstmann.corejava;
     2 
     3 // the classes in this file are part of this package
     4 
     5 import java.time.*;
     6 
     7 // import statements come after the package statement
     8 
     9 /**
    10  * @version 1.11 2015-05-08
    11  * @author Cay Horstmann
    12  */
    13 public class Employee
    14 {
    15    private String name;
    16    private double salary;
    17    private LocalDate hireDay;
    18 
    19    public Employee(String name, double salary, int year, int month, int day)
    20    {
    21       this.name = name;
    22       this.salary = salary;
    23       hireDay = LocalDate.of(year, month, day);
    24    }
    25 
    26    public String getName()
    27    {
    28       return name;
    29    }
    30 
    31    public double getSalary()
    32    {
    33       return salary;
    34    }
    35 
    36    public LocalDate getHireDay()
    37    {
    38       return hireDay;
    39    }
    40 
    41    public void raiseSalary(double byPercent)
    42    {
    43       double raise = salary * byPercent / 100;
    44       salary += raise;
    45    }
    46 }

    实验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) 将两个对象的周长加总输出,将两个对象的面积加总输出。

     1 import java.util.*;
     2 
     3 public class Com {
     4      
     5     public static void main(String[] args) {
     6         
     7         Scanner in = new Scanner(System.in);
     8         System.out.println("输入长:"); 
     9         double  length = in.nextDouble();
    10         System.out.println("输入宽:"); 
    11         double  width = in.nextDouble();
    12         System.out.println("输入半径:"); 
    13         double  radius = in.nextDouble();
    14         Rectangle a=new Rectangle(length,width);
    15         Circle    b=new Circle(radius);
    16         System.out.println("矩形周长:"+a.getPerimeter()+"矩形面积:"+a.getArea());
    17         System.out.println("圆周长"+b.getPerimeter()+"圆面积:"+b.getArea());
    18         double x = a.getPerimeter()+b.getPerimeter();
    19         double  y = a.getArea()+b.getArea();
    20         System.out.println("周长和:"+x+"面积和:"+y);
    21     }
    22 
    23 }
    24 
    25 class Rectangle {
    26     private double width;
    27     private double length;
    28     public Rectangle(double w,double l)
    29     {
    30         width=w;
    31         length=l;
    32     }
    33     public double getPerimeter()
    34     {
    35         double Perimeter = (width+length)*2;
    36         return Perimeter;
    37     }
    38     public double getArea()
    39     {
    40         double Area = width*length;
    41         return Area;
    42     }
    43 }
    44 
    45 class Circle {
    46 
    47     private double radius;
    48     double PI = 3.14;
    49     public Circle(double r)
    50     {
    51         radius=r;
    52     }
    53     public double getPerimeter()
    54     {
    55         double Perimeter = 2*PI*radius;
    56         return Perimeter;
    57     }
    58     public double getArea()
    59     {
    60         double Area = PI*radius*radius;
    61         return Area;
    62     }
    63 }

    第三部分:实验总结

       通过这个周的学习,学习了面向对象程序设计的一些基础知识,类、对象、对象的三个特征(行为、状态和标识),明确了创建类、构造和初始化对象的格式、以及熟悉预定义类API的使用。学学习了一些常用的类:Math类、String类、Scanner类、LocalDate类等。在课上课下的阅读程序中,以及编写程序时,有些疑惑,不清楚代码语句的作用和和如何去编写代码,看懂不等于会!

  • 相关阅读:
    html5中让页面缩放的4种方法
    Beautiful Soup教程 转
    python 第三方模块 转 https://github.com/masterpy/zwpy_lst
    Windows安装Python图像处理库:PIL模块
    python常见的模块
    BeautifulSoup 常用方法
    服务器用户连接数设置
    如何查看IIS并发连接数【转】
    .net 时间戳和日期互转 【转】http://www.cnblogs.com/zhuiyi/p/5307540.html
    Python3学习笔记(urllib模块的使用)转http://www.cnblogs.com/Lands-ljk/p/5447127.html
  • 原文地址:https://www.cnblogs.com/yqj-yf-111/p/9704046.html
Copyright © 2011-2022 走看看