201871010128-杨丽霞《面向对象程序设计(java)》第四周学习总结
阅读原文时间:2023年07月16日阅读:1

201871010128-杨丽霞《面向对象程序设计(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.掌握包的概念及用法;

第一部分:总结第四章理论知识

第四章 对象与类

4.1 面向对象程序设计概述

对象的三个主要特性: 
- 对象的行为:可以对对象施加的操作,方法
- 对象的状态:当施加那些方法时,对象如何响应
- 对象的标识:如何辨别具有相同行为与状态的不同对象
类之间的关系: 
- 依赖(use-a):一个类访问或操作其他类的对象 
- 聚合(has-a):类A的对象包含类B的对象 
- 继承(is-a):继承关系

4.2 使用预定义类

1.1对象与对象变量:

构造器:在Java程序设计语言中,使用构造器构造新实例。构造器是一种特殊的方法,用来构造并初始化对象 构造器的名字应该与类名相同

1.2对象和对象变量的区别:

变量不是个对象,实际上对象变量的初始化只是对对象的引用的Java中,任何对象变量的值都是对存储在另外一个地方的一个对象的引用新的操作符的返回值  也         是一个引用C ++中没有空引用Date b; // Java的实际上,等同于Date* b; // C ++的Java中的空引用对应于C ++中的空指针所有的Java的对象都存储在堆中clone方法 获得对象的完整拷贝

1.3对象与对象变量。

在Java语言中,使用构造器构造新实例。构造器是类中一个特殊的方法,生成并初始化对象,它的方法名与类名相同。

想要构造一个Data对象(定义在java.util中),需要在构造器前加上new操作符:new Data()

若定义为Data deadline;则该语句错误。

可将一个对象变量设置为null,表示该对象变量未引用任何变量,如deadlin=null。

4.3 用户自定义类

源文件声明规则
当在一个源文件中定义多个类,并且还有import语句和package语句时,要特别注意这些规则。

一个源文件中只能有一个public类
一个源文件可以有多个非public类
源文件的名称应该和public类的类名保持一致。例如:源文件中public类的类名是Employee,那么源文件应该命名为Employee.java。
如果一个类定义在某个包中,那么package语句应该在源文件的首行。
如果源文件包含import语句,那么应该放在package语句和类定义之间。如果没有package语句,那么import语句应该在源文件中最前面。
import语句和package语句对源文件中定义的所有类都有效。在同一源文件中,不能给不同的类不同的包声明。
4.4 静态域与静态方法

(1).静态域:    如果将域定于为static,那么每个类中只有一个这样的域而每个对象对于所有的实例域却都有自己的一份拷贝也就是说,它属于类,而不属于任何独立的对象 静态域被称为类域

(2)静态常量:

例如:public static final double PI = 3.14159265358979323846;

改变静态常量:通过本地方法可以绕过Java语言的存储控制机制

(3)静态方法: 静态方法是一种不能向对象实施操作的方法也就是没有隐式的参数

可以认为静态方法是没有this参数的方法 静态方法可以访问自身类中的静态域,该方法也可以省略关键字static

(4)使用静态域有两种情况:

一个方法不需要访问对象状态,其所需参数都是通过显示参数提供

一个方法只需要访问类的静态域

(5)工厂方法:

通过静态工厂方法来构造对象

4.5 方法参数

方法参数共有两种类型:基本数据类型(数字、布尔值) 对象引用

Java 程序设计语言总是采用按值调用。也就是说,方法得到的是所有参数值的一个拷贝,特别是,方法不能修改传递给它的任何参数的内容。

4.6 对象构造

对于java对象的构造:总的来说有6种方法,第一种是有参数的构造函数,第二种是无参数的构造函数,第三种是重载构造函数,第四种是调用其他构造器的构造函数,第五种是使用初始化块,第六种是使用显式域初始化

4.7 包

java包类库由一组支持程序开发的类组成。一个编译器或开发环境以一个类库为基础。

类库可以单独从第三方软件商获得。类库方法从技术上说并不属于某种语言。例如String不是Java的内建部分,而是java标准类库的一部分。类库由几组相关的类簇构成,通常称为java API,即应用程序接口。java标准类库的类被划分为包,每个类属于一个具体的包

4.8 类路径

Java 支持三种注释方式。前两种分别是 // 和 /* */,第三种被称作说明注释,它以 /** 开始,以 */结束。

说明注释允许你在程序中嵌入关于程序的信息。你可以使用 javadoc 工具软件来生成信息,并输出到HTML文件中。说明注释,使你更加方便的记录你的程序信息。

默认java虚拟机要从classpath环境变量的路径中搜索class文件去执行,对于java虚拟机来说,这不是类文件,而是类。它只有类路径,而没有文件系统路径。而classpath环境变量正是为java虚拟机提供搜索类路径的环境。注意,虚拟机不会递归搜索classpath定义的路径。

4.9 文档注释

第二部分:实验部分

实验名称:实验三 类与对象的定义及使用

1.  实验目的:

(1) 熟悉PTA平台线上测试环境;

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

(3) 掌握对象的声明;

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

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

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

3. 实验步骤与内容:

实验1.1 公民身份证号码按照GB11643—1999《公民身份证号码》国家标准编制,由18位数字组成:前6位为行政区划分代码,第7位至14位为出生日期码,第15位至17位为顺序码,第18位为校验码。从键盘输入1个身份证号,将身份证号的年月日抽取出来,按年-月-日格式输出。注意:输入使用Scanner类的nextLine()方法,以免出错。

输入样例:34080019810819327X

输出样例:1981-08-19

实验代码:

import java.util.Scanner;

public class ID {

public static void main(String\[\] args) {  
    // TODO Auto-generated method stub  
    Scanner in = new Scanner(System.in);  
    System.out.println("please input your ID:");  
    String s1 = in.nextLine();  
    String s2,s3,s4;  
    s2 = s1.substring(6, 10);  
    s3 =s1.substring(10, 12);  
    s4 = s1.substring(12, 14);  
    System.out.println(s2+"-"+s3+"-"+s4);

}

}

  运行结果

实验1.2  studentfile.txt文件内容是某班同学的学号与姓名,利用此文件编制一个程序,将studentfile.txt文件的信息读入到内存,并提供两类查询功能:(1)输入姓名查询学号;(2)输入学号查询姓名。要求程序具有友好人机交互界面。

实验代码:

package Package;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.Scanner;

public class xueshen{
private static Student students[];
public static void main(String[] args) {
students=new Student[50];
Scanner in = new Scanner(System.in);
try {
readFile("studentfile.txt");
System.out.println("请选择操作,1按姓名,2按学号,3退出");
int i;
while ((i = in.nextInt()) != 3) {
switch (i) {
case 1:
System.out.println("请输入姓名");
String name = in.next();
Student student = findStudentByName(name);
if (student == null) {
System.out.println("没找到");
} else {
System.out.println(student.toString());
}
System.out.println("请选择操作,1按姓名,2按学号,3退出");
break;
case 2:
System.out.println("请输入学号");
String id = in.next();
Student student1 = findStudentById(id);
if (student1 == null) {
System.out.println("没找到");
} else {
System.out.println(student1.toString());

                }  
                System.out.println("请选择操作,1按姓名,2按学号,3退出");  
                break;

            default:  
                System.out.println("输入有误");  
                System.out.println("请选择操作,1按姓名,2按学号,3退出");  
                break;  
            }

        }  
    } catch (IOException e) {  
        // TODO 自动生成的 catch 块  
        e.printStackTrace();  
    }finally {  
        in.close();  
    }

}

public static void readFile(String path) throws IOException {  
    FileReader reader = new FileReader(path);  
    BufferedReader br = new BufferedReader(reader);  
    String result;  
    int i=0;  
    while ((result = br.readLine()) != null) {  
        Student student = new Student();  
        student.setName(result.substring(13));  
        student.setID(result.substring(0,12));  
        students\[i\]=student;  
        i++;  
    }  
    br.close();  
}

public static Student findStudentByName(String name) {  
    for (Student student : students) {  
        if (student.getName().equals(name)) {  
            return student;  
        }  
    }  
    return null;

}

public static Student findStudentById(String Id) {  
    for (Student student : students) {  
        if (student.getID().equals(Id)) {  
            return student;  
        }  
    }  
    return null;

}  

}

class Student {
private String name;
private String ID;

public String getName() {  
    return name;  
}

public void setName(String name) {  
    this.name = name;  
}

public String getID() {  
    return ID;  
}

public void setID(String iD) {  
    ID = iD;  
}

@Override  
public String toString() {  
    // TODO 自动生成的方法存根  
    return "姓名是:" + name + "学号是:" + ID;  
}  

}

  运行结果

实验2

编辑、编译、调试运行程序4-2;

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

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

Employee.Java

EmployeeTest.java

姓名    性别 java成绩

代码:

1 import java.util.Scanner;
2
3 public class student {
4 String name;
5 String sex;
6 double javascore;
7 public static void main(String[] args) {
8 System.out.println("请输入学生人数");
9 Scanner su = new Scanner(System.in);
10 int totalStudent = su.nextInt();
11 student[] stus= new student[totalStudent];
12 for(int i=0;i<totalStudent;i++) {
13 student s =new student();
14 stus[i]=s;
15 System.out.println("请输入第+“i"+"个学生的姓名");
16 s.name = su.next();
17 System.out.println("请输入第+“i"+"个学生的性别");
18 s.sex = su.next();
19 System.out.println("请输入第+“i"+"个学生的java成绩");
20 s.javascore = su.nextDouble();
21
22 }
23 printstudent(stus);
24 su.close();
25 }
26
27 public static void printstudent(student[] s) {
28 System.out.println("姓名\t性别\tjava成绩");
29 for(int i=0;i<s.length;i++) {
30 System.out.println(s[i].name+"\t"+s[i].sex+"\t"+s[i].javascore);
31 }
32 }
33 }

实验2  测试程序2

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

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

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

实验2  测试程序3

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

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

截图如下:

实验2  测试程序4

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

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

实验截图如下:

实验2  测试程序5

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

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

程序4-6

程序4-7

4. 实验总结:

这一章的学习内容类与对象,学习了类与对象的关系,math类,string类, scanner类,以及用户自定义类的语法规则,对象的初始化,对象变量,静态域与静态方法,经过这几周对于Java面向对象程序设计的学习,让我更加深刻的了解到的面向对象思想的重要性。在这周的课堂上我们加强对之前一些代码的印象,并学习新知识,对之不断的熟悉。Java这门语言对于我们专业来说是十分重要的,所以我们都努力的理解Java编程思想,以及基本技巧,尽量学到更多知识。在课余时间,应该加强练习,形成编程思维,多去思考,理解代码。并且自己不断尝试,充分利用学习资源,巩固知识点,不断尝试,提升自己。