学習のまとめの201871010126王Yatao「オブジェクト指向プログラミング(Java)の」第4週

プロジェクト

コンテンツ

この作品は、コースに属し

https://www.cnblogs.com/nwnu-daizh/

どこの仕事でこの要件

https://www.cnblogs.com/nwnu-daizh/p/11552848.html

ジョブの学習目標

  1. クラスとオブジェクトの基本的な概念を習得、クラスとオブジェクト間の関係を理解し​​ます。
  2. オブジェクトとオブジェクト変数の間の関係を把握します。
  3. 共通APIの定義済みのクラス日付、LOCALDATEクラスをマスター。
  4. ユーザ定義のマスタインスタンスフィールド、静的フィールド、コンストラクタメソッドを含む文法クラスのルールは、フィルタ方法、アクセサメソッド、スタティックメソッド、メインメソッドを変更し、この方法は、パラメータの定義を必要とする(主要な困難)
  5. (フォーカス)の方法及び要件を定義、オブジェクトのコンストラクタを把握します。
  6. オーバーロードされた概念と使用方法を理解します。
  7. パッケージの概念および使用方法を把握します。

エッセイボーエン本文の内容は次のとおりです。

パートI:第IV章は、理論的な知識をまとめたもの

章四つオブジェクトとクラス

4.1オブジェクト指向プログラミングの概要

4.1.1クラス

ワン:一般的な定義

1.クラス

定義:シリーズをまとめ、物事は似たものは、同じ特性を持っている必要がありますが、変数やメソッドにマッピングされたクラスの状態や行動特性に応じた日常のオブジェクトに備えて

クラス定義のルール:

パブリック/ defaultクラスのクラス名{

プロパティ

方法

}



2クラスのメンバ

メンバ変数、総称部材方法

3メンバ変数

状態またはオブジェクトを記述するために使用される固有の属性は、また、パブリック変数と呼ばれる

メンバメソッド4

も、実施例の方法と呼ばれ、本質的にオブジェクトの振る舞いを記述するために使用する

。5.オブジェクト

定義:クラスの特定の形態は、個々の実際の存在であり、また、(インスタンス)インスタンスと呼ばれます

オブジェクトの定義:

クラス名、オブジェクト名、オブジェクトの定義にオブジェクトのメモリ空間が割り当てられている間に

オブジェクトクラス名name =新しいクラス名();

注:新しいコンストラクタが呼び出されます



6.クラスとオブジェクトの間の関係

のクラスは、任意の数のオブジェクトを作成することができる

7.パッケージを

不正アクセスオブジェクトからデータを保護するために、保護部材オープン制御機能にアクセスするための

8クラス変数

クラスで定義されていませんことを特徴とするオブジェクトは、一般に、すべてで使用される、特定のオブジェクトに属する

クラスに記載の方法

クラスの定義ではなく、特定のオブジェクトの挙動、物体の挙動は一般に、全てによって使用される

9.1。方法クラスインスタンス変数が許可されていません実施例および方法

9.2。この方法は、第1パラメータCLSによって、クラスのクラス変数とクラスメソッドの使用を可能にする

9.3。クラス変数とクラスメソッドで使用される方法の例が可能

10.静的メソッドが

アクセスメンバ変数、またアクセスクラス変数でもありません、静的メソッドとして定義され

、継承11

クラス間の関係、クラスは、クラスBの他のメンバーから情報を取得し、クラスAがクラスBから継承し、前記 クラスは、会員情報へのアクセスは、サブクラス(派生クラス)が呼ばれて、(基底クラス)親クラスと呼ばれるクラスのメンバーに関する情報を提供して

11.1。サブクラスは親のメンバーを追加することはできませんが

11.2。親クラスを継承することができないプライベートメンバ

12とより継承する

クラスは、多重継承と呼ばれる複数のクラスから継承します。
クラスのクラス名(親クラス1、親クラス2の名前の名前......)

12.1。多重継承関係、複数の親クラスは、クラスの継承の最初の文を呼び出すために最初のメンバーを呼び出すサブクラスのメンバーと同じ名前を持つ場合部材

13オーバーライド

親クラスおよびサブクラスで定義された同じ名前のメンバメソッド。
スーパー()メソッド名()

14. A多型

オブジェクトは、異なる形で異なる機能が、その使用環境を実証すると、オブジェクト特性多形言った、様々な形態を有しています。多型は、通常、継承に基づいて行われます。

こと15.注

方法のみアクセスメンバ変数、インスタンスメソッドが定義された

方法のみアクセスクラス変数は、クラスのメソッド定義

のみアクセスメンバ変数をクラス変数にアクセスする方法、インスタンスメソッドが定義されて

も、アクセスメンバ変数、またアクセス・クラス静的メソッドとして定義された変数

II:一般的なクラス

4.1.2オブジェクト

:オブジェクトの三つの主要な特性:

行動の1.オブジェクト - どのような操作をオブジェクトに適用することができます

2.オブジェクトの状態 - どのように反応する方法が適用され、オブジェクト

3.オブジェクトを識別 - 同じ動作と状態の異なるオブジェクトを識別するために、どのように?

4.1.3クラスの認識

クラスとカテゴリ間の関係:

1.継承
継承(サブクラス、サブインタフェースとも呼ばれる)クラスは、(親、親インタフェースと呼ばれる)別のクラスの機能を継承し、そして独自の新しい機能の容量を増加させることができることを意味します。Javaキーワードでの継承関係を拡張し
、一般的に物議を醸すないように設計明確に識別し、。UMLクラス図の設計では、中空の三角矢印の連続を有する実線は、親インターフェイスの親クラス、またはサブインターフェースから向けサブクラスを示しています。

2。関係は達成
実現インターフェースインターフェース(複数でもよい)機能セットを実装し、クラスとインタフェースとの間の最も一般的な関係であるクラスのクラスを指します。明確にJavaで実装したキーワードで識別されるような関係は、一般的ではないように設計
物議。白三角と点線によって実現UMLクラス図の設計では、インタフェースの実装クラスを指し、矢印を表します。
3.依存関係
を理解するのは簡単では、別のクラスBへのクラスAの使用に依存しており、この関係は偶発的使用、一時的な、非常に弱いですが、変更は、クラスBのA型には影響しません 矢印付きの破線で示すUMLクラス図の設計、使用によって点Bに依存A、です。
次のように示します:

4.3ユーザ定義クラス

      在上述实例程序中包含两个类:EmployeeTest Employeel类和带有public访问修饰符的EmployeeTest。EmployeeTest类包含了main方法。源文件名是EmployeeTest.java,这是因为文件名必须与public类的名字相匹配。在一个文件中,只能有一个公有类,但可以有任意数目的非共有类。


       接下来,当编译这段代码的时候,编译器将在目录下创建两个类文件:EmployeeTest.class 和Employee.class
将程序中包含main方法的类名提供给字节码解释器,以便启动这个程序: java EmployeeTest


字节码解释器开始运行Test1类的main方法中的代码。在这段代码中,先后构造了三个新的Employee对象,并显示它们的状态。


1.刨析Employee类

下面对Employee类进行刨析。首先从这个类的方法开始。通过查看原代码会发现,这个类包含一个构造器和四个方法

public Employee(String n,double s,int year,int month,int day)

public String getName()

public double getSalary()

public LocalDate getHireDay() 

public void raiseSalary(double byPercent)

这个类的方法所有都被标记public。关键字public意味着任何类的任何方法都乐意调用这个方法

接下来,需要注意Emplouee类的实例中有三个实例域用来存放将要操作的数据:(实例域就是一个对象的成员变量,或者说是一个对象的属性)

private String name;
private double salary; 

private LocalDate hireDay;

关键字private确保只有Employee类自身的方法能够访问这些实例域,而其他类的方法不能读写这些域。

public(不推荐,因为不安全,任何方法都能够读写这些域)

2.从构造器开始

下面看看Employ类的构造器:

public Employee(String n,double s,int year,int month,int day)
    {
        name=n;
        salary=s;
        hireDay=LocalDate.of(year, month, day);
    }

可以看出构造器与类同名。在构造Employee类的对象时,构造器会运行以便将实例域初始化所希望的状态。

例如,在使用下条代码创建Employee类实例时:

new Employee("Carl Cracker",75000,1987,12,15);

会将实例域设置为:

name = "Carl Cracker";

salary = 75000;

hireDay = LocalDate.of1987,12,15();

构造器与其他的方法有一个重要的不同。构造器总是伴随着new操作符的执行被调用,而不能对一个已经存在的对象调用构造器来达到重新设置实例域的目的。
注意:
1)、构造器与类名相同

2)、每个类可以有一个以上的构造器

3)、构造器可以有0个、1个或者多个参数

4)、构造器没有返回值

5)、构造器总有伴随new操作一起调用

4.4 静态域与静态方法

1、静态域
 如果将域定义为static,每个类中只有一个这样的域。

class Employee

{

         private static int nextId = 1;

          private int id;

...

}

//现在,每一个雇员对象都有一个自己的id域,但这个类的所有实例将共享一个nextId域。

public void setId()

{

id = nextId;

nextId++;

}

 假定为“难免有错”设定雇员标识码:



难免有错.setId(); //“难免有错”的id域被设置为静态域nextId当前的值,并且静态域nextId的值加1:

难免有错.id = Employee.nextId;

Employee.nextId++;


2、静态常量
 示例:

public class Math

{

...

public static final double PI = 3.14159265358979323846;

...

}


 可以采用Math.PI的形式获得这个常量。
 若省略static,PI就变成了Math的一个实例域。需要通过Math类的对象访问PI,并且每个Math对象都有它自己的一份PI拷贝。

3、静态方法
 静态方法是一种不能对对象实施操作的方法。例如,Math类的pow方法就是一个静态方法。
 表达式:Math.pow(x,a) 计算x的a次方。运算时不使用任何Math对象,即无隐式参数。
 可以认为静态方法是没有this参数的方法。
 因为静态对象不能操作对象,所以不能在静态方法中访问实例域。但是,静态方法可以访问自身类中的静态域。
 使用静态方法的实例:

public class Employee

{

public static int getNextId()

{

return nextId; //returns static field

}

}

//通过类名调用这个方法:

int n = Employee.getNextId();

 在下面两种情况下使用静态方法:
 I、一个方法不需要访问对象状态,其所需的参数都是通过显式参数提供。
 II、一个方法只需要访问类的静态域。

4、工厂方法
 静态方法还有一种常见的用途。NumberFormat类使用工厂方法产生不同风格的格式对象。

5、main方法

public class App

{

           public static void main(String[] args)

{

....

        }

}

main方法不对任何对象进行操作。同理,main方法也是一个静态方法。

4.5 对象构造

一:重载

方法的定义:

访问控制修饰符    返回值类型   方法名(参数列表){

        //方法体

}

1. 方法重载:

在同一各类中提供多个同名不同参的方法。

重载要求:方法名称相同,但参数的类型不同 or 参数的个数不同 or 参数的顺序不同

示例:

复制代码
 1 package 第二天;
 2 
 3 public class 第二天 {
 4     public void fun1() {
 5     }
 6     public void fun1(int a) {
 7     }
 8     public void fun1(String c) {
 9     }
10     public void fun1(int c, int d) {
11     }
12     public void fun1(String c, int d) {
13     }
14     public void fun1(int d,String c) {
15     }
16 }
复制代码

注:对于重载。系统是根据实参来确定最终调用的哪个方法的。

 

2. 构造方法:

特殊的用法:用来构造 (创建) 对象,即用来在内存中开辟空间。

构造方法定义:

访问控制修饰符    方法名(参数类表){

        //方法体

}

默认情况下,系统会给每一个类都提供一个默认的构造方法:

public 类名(){

}

构造方法只能被new关键字调用。

构造方法是特殊的方法,所以构造方法也可以重载。

构造方法重载的主要作用:是在开辟空间的同时给对象中的成员变量赋值。

 

复制代码
 1 package 第五天;
 2 
 3 public class Teacher {
 4     int id;
 5     String name;
 6     String major;
 7     
 8     public Teacher()  {
 9         System.out.println("默认构造方法");
10     }
11     
12     public Teacher(int id) {
13         System.out.println("Teacher(int id)");
14     }
15     
16     public Teacher(int id,String name) {
17         this.id = id;
18         this.name = name;
19         System.out.println("Teacher(int id,String name)");
20     }
21     
22     public void shangke() {
23         System.out.println("shangke");
24     }
25     
26     public void beike() {
27         System.out.println("beike");
28     }
29 }
复制代码

注:this指的是new出来的空间。

四、封装:

1. 访问控制修饰符

a. private: 私有的,只能在当前类中使用,其他任何类都不能使用

b. public:公用的,谁(任何地方的任何类)都可以使用

c. 示例:

复制代码
 1 package 第五天;
 2 
 3 public class person {
 4     private int age;
 5     private String gender;
 6     private float height;
 7     
 8     public void setAge(int age) {
 9         if(age <0 || age > 125) {
10             System.out.println("age input error");
11             return;
12         }
13         this.age = age;
14     }
15     
16     public int getAge() {
17         return this.age;
18     }
19 }

 

 

 4.6 包

一:通过import语句导入类包中的类

一个类可能需要另一个类声明的对象作为自己的成员或方法中的局部变量,如果这两个类在同一个包中那当然没有问题,但一个类想要使用的类和它本身不再同一个包中那么就需要通过import语句来进行引入。

特别是在编写源程序的时候我们除了自己的类以外,还需要使用java本身提供的许多类(即类库),而这些类肯定和我们自己编写的不再同一包内。

工具/原料

cmd命令提示符

import语句,java自带的类库

方法/步骤


import语句必须放在package语句和类之间。java本身自带了大约130个包,这里列举最常见的几种。

而当我们需要引入一个包中所有类的时候,只需要通过“*”运算符便可以将所有的类全部导入。

4.7 注释的插入

定义规范的目的是让项目中所有的文档都看起来像一个人写的,增加可读性,减少项目组中因为换人而带来的损失。(这些规范并不是一定要绝对遵守,但是一定要让程序有良好的可读性)。

// 注释一行

  /* ...... */ 注释若干行 

 /** ...... */ 注释若干行,并写入 javadoc 文档

第二部分:实验部分

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

1.  实验目的:

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

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

(3) 掌握对象的声明;

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

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

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

3. 实验步骤与内容:

实验1 

采用个人账号登录https://pintia.cn/使用绑定码620781加入PTA平台NWNU-2019CST1教学班(西北师范大学 计算机科学与工程学院 2018级计算机科学与技术),完成《2019秋季西北师范大学面向对象程序设计程序设计能力测试1》,测试时间50分钟。

实验1.1

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

 

输入样例:

 

34080019810819327X

 

输出样例:

 

1981-08-19

实验截图如下:

实验1.2

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

编程建议:

(1)从文件中读入学生信息,可以编写如下函数:

public static void StudentsFromFile(String fileName))

(2)输入姓名查找学生学号,可以编写如下函数:

public static String findStudent(String name)

(3)输入学号查找学生姓名,可以编写如下函数:

public static String findStudent(String ID)

运行截图如下:1):用泛型列表做

 

2):用对象数组

 

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

截图如下:employee.java

 

 employeeText.java

 

 

按以下表头输出学生信息表:

                                 姓名      性别     java成绩

 

 

 

 

 

 

测试程序2:

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

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

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

 

 

 

 

测试程序3:

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

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

截图如下:

测试程序4:

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

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

实验截图如下:

 

 

测试程序5:

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

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

4.6截图如下:

 

 

4.7截图如下:

第三部分  实验总结

1):在第四章中我们主要学习了类与对象,了解了类与类的关系,类与对象的关系,以及掌握了预定义类的基本使用方法,对象构造等,对JAVA这门课程有了更深入的了解,对JAVA这门课程在编程中的应用更加深入。

2):在这周实验课上,我们进行了小测试,在测试中我们意识到了自己的不足,第一个程序写起来相对容易,但是有许多同学还是没有做出来;第二个程序做出来的人寥寥无几。下课后,在助教的帮助下,让我们理解了第二个程序及编写。

3):对于这周的学习我们还有许多的不足,我们会通过课后的学习去对这一章内容进行加强与巩固,在自我学习中对类与对象深入了解与掌握。

おすすめ

転載: www.cnblogs.com/wyt0455820/p/11563990.html