201771010102常惠琢《面向对象程序设计(java)》第四周学习总结
一、 理论知识学习部分:
主要介绍面向对象的两个基本成分中最重要的-------封装,以及Java语言实现封装的机制。即:类与方法。
1、面向对象程序设计:
简称OOP是当今主流的程序设计范型;旨在在计算机程序中模拟现实世界中的概念;能够在计算机中用类似的实体模拟现实世界中的实体;踏实设计和实现软件的方法。
类:是具有相同属性和行为的一组对象的集合;是构造程序的基本单元。
每个类有一组结构化的数据和在其上的操作组成。
对象:变成的一个核心概念,未开发计算机应用程序提供技术基础;用来表现现实世界中的实体。
三大特性:(1)对象的行为、(2)对象的状态、(3)对象的标识;
2、使用预定义类:
(1)对象与对象变量 (2)Java类库中的LocalDate类
3、用户自定义类:
(1)Employee类 (2)隐士参数和显示参数
(3)基于类的访问权限 (4)final实力域
4、静态域、静态方法:
(1)静态域 (2)静态常量 (3)静态方法
(4)工厂方法 (5)main方法
5、方法参数:
6、对象构造:
(1)重载 (2)默认域初始化 (3)显示域初始化
(4)参数名 (5)初始化块
7、包:
(1)类的导入 (2)静态导入 (3)包作用域
8、类路径:
9、文档注释:
(1)类注释 (2)方法注释 (3)域注释
(4)通用注释 (5)包与概述注释
二、实验部分:
1、实验目的与要求
(1) 理解用户自定义类的定义;
(2) 掌握对象的声明;
(3) 学会使用构造函数初始化对象;
(4) 使用类属性与方法的使用掌握使用;
(5) 掌握package和import语句的用途。
2、实验内容和步骤
实验1: 测试以下程序,掌握文件输入输出程序设计技术(文件输入输出,教材61-62).
1>.代码如下:
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>.程序执行如下:
实验2 导入第4章示例程序并测试。
测试程序1:
l 编辑、编译、调试运行程序4-2(教材104页);
l 结合程序运行结果,掌握类的定义与类对象的用法,并在程序代码中添加类与对象知识应用的注释;
l 尝试在项目中编辑两个类文件(Employee.java、 EmployeeTest.java ),编译并运行程序。
1>.代码程序执行如下:
l 参考教材104页EmployeeTest.java,设计StudentTest.java,定义Student类,包含name(姓名)、sex(性别)、javascore(java成绩)三个字段,编写程序,从键盘输入学生人数,输入学生信息,并按以下表头输出学生信息表:
姓名 性别 java成绩
1>.代码如下:
import java.time.LocalDate;
import java.util.Scanner;
/**
* This program tests the Student class.
* time 2018 9 25
* @author 常惠琢
*/
public class StudentTest
{
String name;
String sex;
double score;
public static void main(String[] args)
//public static void ScannerTest(){
{
int i = 0;
System.out.print("numer:");
Scanner sc= new Scanner(System.in);
int number = sc.nextInt();
StudentTest Stu[] = new StudentTest[number];
for (i = 0; i < Stu.length; i++) {
Stu[i] = new StudentTest();
System.out.print( (i + 1)+" "+"姓名:" );
Stu[i].name = sc.next();
System.out.print( (i + 1)+" " +"性别:");
Stu[i].sex = sc.next();
System.out.print( (i + 1)+" " +"java成绩:");
Stu[i].score = sc.nextDouble();
}
System.out.println("\t姓名\t性别\t成绩");
for (StudentTest StudentTest : Stu) {
System.out.println("\t" + StudentTest.name+ "\t" + StudentTest.sex + "\t" + StudentTest.score);
}
}
}
2>.程序执行如下:
测试程序2:
l 编辑、编译、调试运行程序4-3(教材116);
l 结合程序运行结果,理解程序代码,掌握静态域(netxtId)与静态方法(getNextId)的用法,在相关代码后添加注释;
l 理解Java单元(类)测试的技巧。
1>.程序执行如下:
测试程序3:
l 编辑、编译、调试运行程序4-4(教材121);
l 结合程序运行结果,理解程序代码,掌握掌握Java方法参数的用法,在相关代码后添加注释;
1>.程序执行如下:
测试程序4:
l 编辑、编译、调试运行程序4-5(教材129);
l 结合程序运行结果,理解程序代码,掌握Java用户自定义类的用法,掌握对象构造方法及对象使用方法,在相关代码后添加注释。
1>.程序执行如下:
测试程序5:
l 编辑、编译、调试运行程序4-6、4-7(教材135);
l 结合程序运行结果,理解程序代码,掌握Java包的定义及用法,在相关代码后添加注释;
1>.程序执行如下:
实验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.*;
public class First {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.println("输入长:");
double length = in.nextDouble();
System.out.println("输入宽:");
double width = in.nextDouble();
System.out.println("输入半径:");
double radius = in.nextDouble();
Rectangle a=new Rectangle(length,width);
Circle b=new Circle(radius);
System.out.println("矩形周长:"+a.getPerimeter()+"矩形面积:"+a.getArea());
System.out.println("圆周长"+b.getPerimeter()+"圆面积:"+b.getArea());
double x = a.getPerimeter()+b.getPerimeter();
double y = a.getArea()+b.getArea();
System.out.println("周长和:"+x+"面积和:"+y);
}
}
class Rectangle {
private double width;
private double length;
public Rectangle(double w,double l)
{
width=w;
length=l;
}
public double getPerimeter()
{
double Perimeter = (width+length)*2;
return Perimeter;
}
public double getArea()
{
double Area = width*length;
return Area;
}
}
class Circle {
private double radius;
double PI = 3.14;
public Circle(double r)
{
radius=r;
}
public double getPerimeter()
{
double Perimeter = 2*PI*radius;
return Perimeter;
}
public double getArea()
{
double Area = PI*radius*radius;
return Area;
}
}
2>.程序执行如下: