Java笔记(第十节 and 第十一节)

2023-10-19 12:40

本文主要是介绍Java笔记(第十节 and 第十一节),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 本节内容:1:Associations 2:Multiplicity 3:实践

1:Associations:

定义:The formal name for a structural relationship that exists between classes is an association.

关联关系
关联(Association)关系是对象之间的一种引用关系,用于表示一类对象与另一类对象之间的联系,如老师和学生、师傅和徒弟、丈夫和妻子等。关联关系是类与类之间最常用的一种关系,分为一般关联关系、聚合关系和组合关系。我们先介绍一般关联。

关联可以是双向的,也可以是单向的。在 UML 类图中,双向的关联可以用带两个箭头或者没有箭头的实线来表示,单向的关联用带一个箭头的实线来表示,箭头从使用类指向被关联的类。也可以在关联线的两端标注角色名,代表两种不同的角色。

下图所示是老师和学生的关系图,每个老师可以教多个学生,每个学生也可向多个老师学,他们是双向关联。

在这里插入图片描述

2:Multiplicity 多重性

For a given association type X between classes A and B, the term multiplicity refers to the number of objects of type A that may be associated with a given instance of type B.

For example, a Student attends multiple Courses, but a Student has only one Professor in the role of advisor.

There are three basic “flavors” of multiplicity:

one-to-one

one-to-many

many-to-many

类图载入 -->自动生成代码window --> perspective -->open perspective -->plug in(插件)

3:下面我将会从一对一,多个一对一,一对多带你刨析内部逻辑。

小tip: 可以generate getters and setters 自动生成get和set函数

1对1:

为了可读性,我会将代码放到一个java文件中,实际应该将不同类放入不同java文件中 .

import java.util.*;
public class Main
{public static void main(String[] args){Transcript tran = new Transcript();//创建对象Stu stu = new Stu();stu.setTran(tran);tran.setStu(stu);tran.print();//输出成绩stu.study();//学习一次tran.print();}
}
class Transcript
{private String ID;int score;private Stu student;//成绩单关联学生,且只有一位public void setStu(Stu student){this.student = student;}public Stu getStu()//为什么是Stu? 将Stu理解为一种数据类型,返回值也为该数据类型即Stu{return student;}void print()//输出该成绩单所对应的学生的成绩{System.out.println(this.score);}
}
class Stu
{private String name;private Transcript tran;//学生关联成绩单,且只有一个public void setTran(Transcript tran){this.tran = tran;}public Transcript getTran(){return tran;}void study()//学生学习{tran.score++;}}
//为什么不new?

输出:  0

          1

为什么在类内进行关联时创建对象不需要new? 

private Stu student;

回归到根本,是要在主函数使用关联,然而如果在这new() ,同时在主函数new() ,在主函数中就是两段不同的内存。

也可以这么理解(个人理解):将这种关联看成是一个属性而不是创建一个新的对象,相当于Transcript有一个属性是Student。

多个一对一(添加一个course)

 

只需要添加一个Cou类,其他类中添加get()和set()函数,主函数中做相似改动即可.

此处将score放入Course(Cou)类中

import java.util.*;
public class Main
{public static void main(String[] args){Transcript tran = new Transcript();//创建对象Stu stu = new Stu();Cou cou = new Cou();stu.setTran(tran);//传入成绩单和课程stu.setCou(cou);tran.setStu(stu);tran.setCou(cou);cou.setStu(stu);cou.setTran(tran);cou.print();//输出成绩stu.study();//学习一次cou.print();}
}
class Transcript
{private String ID;private Stu student;//成绩单关联学生,且只有一位private Cou cou;public void setStu(Stu student){this.student = student;}public Stu getStu()//为什么是Stu? 将Stu理解为一种数据类型,返回值也为该数据类型即Stu{return student;}public void setCou(Cou cou){this.cou = cou;}public Cou getCou(){return cou;}
}
class Stu
{private String name;private Transcript tran;//学生关联成绩单,且只有一个private Cou cou;public void setTran(Transcript tran){this.tran = tran;}public Transcript getTran(){return tran;}public void setCou(Cou cou){this.cou = cou;}public Cou getCou(){return cou;}void study()//学生学习{cou.score++;}}
class Cou
{int score;private Stu student;private Transcript tran;public void setTran(Transcript tran){this.tran = tran;}public Transcript getTran(){return tran;}public void setStu(Stu student){this.student = student;}public Stu getStu(){return student;}void print()//输出该成绩单所对应的学生的成绩{System.out.println(this.score);}}

输出: 0 

         1

3:一对多(此处为2),多对多(此处为2),增加数组即可

public class Demo {public static void main(String[] args) {// TODO Auto-generated method stubStu xh = new Stu("zxh");Stu xg = new Stu("zxg");Cou math = new Cou("Math");Cou eng = new Cou("Eng");Tran tranX = new Tran();Tran tranG = new Tran();xh.setTran(tranX);xh.enroll(new Cou("Eng"));xh.enroll(new Cou("Math"));xg.setTran(tranG);xg.enroll(new Cou("Eng"));xg.enroll(new Cou("Math"));math.addStu(xg);math.addStu(xh);math.setTran(tranG);math.setTran(tranX);eng.addStu(xg);eng.addStu(xh);eng.setTran(tranG);eng.setTran(tranX);tranG.setStu(xg);tranX.setStu(xh);System.out.println("before study:");xh.print();xh.study();System.out.println("after study:");xh.print();System.out.println("before study:");xg.print();xg.study();System.out.println("after study:");xg.print();
//xh 和 xg共用math的一段内存 改为stu.setCou(new Cou("Math"))(匿名对象);但我不可能做两个数学课程,}
}public class Cou 
{private int score;private int num;private String name;private Tran tran;private Stu stu[];public Cou() {super();stu = new Stu[2];}public Cou(String name) {super();this.name = name;stu = new Stu[2];}public Tran getTran() {return tran;}public void setTran(Tran tran) {this.tran = tran;}public Stu[] getStu() {return stu;}public void setStu(Stu[] stu) {this.stu = stu;}public void addStu(Stu temp){stu[num++]=temp;}public int getScore() {return score;}public void setScore(int score) {this.score = score;}public String getName() {return name;}public void print(){System.out.println(this.name+" : "+this.score);}}
public class Stu
{private String name;private int num;private Tran tran;private Cou cou[];
//	private ArrayList<Cou> cou1;public Stu() {super();cou = new Cou[2];
//		cou1 = new ArrayList<>();}public Stu(String name) {super();this.name = name;cou = new Cou[2];}public Tran getTran() {return tran;}public void setTran(Tran tran) {this.tran = tran;}public Cou[] getCou() {return cou;}public void setCou(Cou[] cou) {this.cou = cou;}public void enroll(Cou temp){cou[num++]=temp;
//		cou1.add(temp);}public void study(){for (int i = 0; i < cou.length; i++) {int temp = this.cou[i].getScore();this.cou[i].setScore(++temp);}//		for (Iterator iterator = cou1.iterator(); iterator.hasNext();) {
//			Cou cou = (Cou) iterator.next();
//			int temp = cou.getScore();
//			cou.setScore(++temp);
//		}
//		for (Cou cou2 : cou) {int temp = cou3.getScore();cou.setScore(++temp);
//		}}public void study(String temp){int i = 0;for (i = 0; i < cou.length; i++) {Cou tempC = this.cou[i];if (tempC.getName().equals(temp)) {int tempS = tempC.getScore();tempC.setScore(++tempS);}}if (i == cou.length) {System.out.println("you not");}}public void print(){System.out.println(this.name);for (int i = 0; i < cou.length; i++) {System.out.print("\t\t");this.cou[i].print();}}
//可以加一个计算平均成绩
//添加打印学生选了几门课
//添加学期类,学生添加课程可以选择学期}public class Tran 
{private Stu stu;private Cou cou[];public Tran() {super();cou = new Cou[2];}public Stu getStu() {return stu;}public void setStu(Stu stu) {this.stu = stu;}public Cou[] getCou() {return cou;}public void setCou(Cou[] cou) {this.cou = cou;}public void print(){System.out.println("东北大学成绩单");this.stu.print();}
}

小tip :匿名对象:

import java.util.*;public class Main
{public static void main(String[] args){new A().q();//输出0,但是下面这段也输出0new A().i = 9;new A().q();//这是因为两个new(),指向的是不同的内存}
}
class A
{int i;void q(){System.out.println(i);}
}

输出 : 0

          0

4:一对多,多对多(数量不确定) ,将数组修改为动态数组

 

public class Demo {public static void main(String[] args) {// TODO Auto-generated method stubStu xh = new Stu("zxh");Stu xg = new Stu("zxg");Cou math = new Cou("Math");Cou eng = new Cou("Eng");Tran tranX = new Tran();Tran tranG = new Tran();xh.setTran(tranX);xh.enroll(new Cou("Eng"));xh.enroll(new Cou("Math"));xg.setTran(tranG);xg.enroll(new Cou("Eng"));xg.enroll(new Cou("Math"));math.addStu(xg);math.addStu(xh);math.setTran(tranG);math.setTran(tranX);eng.addStu(xg);eng.addStu(xh);eng.setTran(tranG);eng.setTran(tranX);tranG.setStu(xg);tranX.setStu(xh);System.out.println("before study:");xh.print();xh.study();System.out.println("after study:");xh.print();System.out.println("before study:");xg.print();xg.study();System.out.println("after study:");xg.print();}
}public class Stu
{private String name;private int num;private Tran tran;
//	private Cou cou[];private ArrayList<Cou> cou;public Stu() {super();
//		cou = new Cou[2];cou = new ArrayList<>();}public Stu(String name) {super();this.name = name;cou = new ArrayList<>();}public Tran getTran() {return tran;}public void setTran(Tran tran) {this.tran = tran;}public ArrayList<Cou> getCou() {return cou;}public void setCou(ArrayList<Cou> cou) {this.cou = cou;}public void enroll(Cou temp){
//		cou[num++]=temp;cou.add(temp);}public void study(){
//		for (int i = 0; i < cou.length; i++) {
//			int temp = this.cou[i].getScore();
//			this.cou[i].setScore(++temp);
//		}//两种for循环形式都可,第一种方式for (Iterator iterator = cou.iterator(); iterator.hasNext();) {Cou cou = (Cou) iterator.next();int temp = cou.getScore();cou.setScore(++temp);}
//		第二种方式
//		for (Cou cou2 : cou) {int temp = cou3.getScore();cou.setScore(++temp);
//		}}public void study(String temp){boolean flg = false;for (Iterator iterator = cou.iterator(); iterator.hasNext();){Cou cou2 = (Cou) iterator.next();if(cou2.getName().equals(temp)){flg = true;int tempx = cou2.getScore();cou2.setScore(++tempx);}}if(!flg ){System.out.println("查无此学科");}}public void print(){System.out.println(this.name);for (Iterator iterator = cou.iterator(); iterator.hasNext();) {Cou cou2 = (Cou) iterator.next();cou2.print();//打印成绩}}}
public class Cou 
{private int score;private int num;private String name;private Tran tran;private ArrayList<Stu> stu;public Cou() {super();stu = new ArrayList<>();}public Cou(String name) {super();this.name = name;stu = new ArrayList<>();}public Tran getTran() {return tran;}public void setTran(Tran tran) {this.tran = tran;}public ArrayList<Stu> getStu() {return stu;}public void setStu(ArrayList<Stu> stu) {this.stu = stu;}public void addStu(Stu temp){stu.add(temp);}public int getScore() {return score;}public void setScore(int score) {this.score = score;}public String getName() {return name;}public void print(){System.out.println(this.name+" : "+this.score);}}public class Tran 
{private Stu stu;private ArrayList<Cou> cou;public Tran() {super();cou = new ArrayList<>();}public Stu getStu() {return stu;}public void setStu(Stu stu) {this.stu = stu;}public ArrayList<Cou> getCou() {return cou;}public void setCou(ArrayList<Cou> cou) {this.cou = cou;}public void print(){System.out.println("东北大学成绩单");this.stu.print();}
}

tip:关于导入与导出 

导出 : File -> export

导入 : File -> import  ->Archive File / Exist Project -> 选择zip文件

这篇关于Java笔记(第十节 and 第十一节)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/239826

相关文章

javax.net.ssl.SSLHandshakeException:异常原因及解决方案

《javax.net.ssl.SSLHandshakeException:异常原因及解决方案》javax.net.ssl.SSLHandshakeException是一个SSL握手异常,通常在建立SS... 目录报错原因在程序中绕过服务器的安全验证注意点最后多说一句报错原因一般出现这种问题是因为目标服务器

Java实现删除文件中的指定内容

《Java实现删除文件中的指定内容》在日常开发中,经常需要对文本文件进行批量处理,其中,删除文件中指定内容是最常见的需求之一,下面我们就来看看如何使用java实现删除文件中的指定内容吧... 目录1. 项目背景详细介绍2. 项目需求详细介绍2.1 功能需求2.2 非功能需求3. 相关技术详细介绍3.1 Ja

springboot项目中整合高德地图的实践

《springboot项目中整合高德地图的实践》:本文主要介绍springboot项目中整合高德地图的实践,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一:高德开放平台的使用二:创建数据库(我是用的是mysql)三:Springboot所需的依赖(根据你的需求再

spring中的ImportSelector接口示例详解

《spring中的ImportSelector接口示例详解》Spring的ImportSelector接口用于动态选择配置类,实现条件化和模块化配置,关键方法selectImports根据注解信息返回... 目录一、核心作用二、关键方法三、扩展功能四、使用示例五、工作原理六、应用场景七、自定义实现Impor

SpringBoot3应用中集成和使用Spring Retry的实践记录

《SpringBoot3应用中集成和使用SpringRetry的实践记录》SpringRetry为SpringBoot3提供重试机制,支持注解和编程式两种方式,可配置重试策略与监听器,适用于临时性故... 目录1. 简介2. 环境准备3. 使用方式3.1 注解方式 基础使用自定义重试策略失败恢复机制注意事项

SpringBoot整合Flowable实现工作流的详细流程

《SpringBoot整合Flowable实现工作流的详细流程》Flowable是一个使用Java编写的轻量级业务流程引擎,Flowable流程引擎可用于部署BPMN2.0流程定义,创建这些流程定义的... 目录1、流程引擎介绍2、创建项目3、画流程图4、开发接口4.1 Java 类梳理4.2 查看流程图4

一文详解如何在idea中快速搭建一个Spring Boot项目

《一文详解如何在idea中快速搭建一个SpringBoot项目》IntelliJIDEA作为Java开发者的‌首选IDE‌,深度集成SpringBoot支持,可一键生成项目骨架、智能配置依赖,这篇文... 目录前言1、创建项目名称2、勾选需要的依赖3、在setting中检查maven4、编写数据源5、开启热

Java对异常的认识与异常的处理小结

《Java对异常的认识与异常的处理小结》Java程序在运行时可能出现的错误或非正常情况称为异常,下面给大家介绍Java对异常的认识与异常的处理,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参... 目录一、认识异常与异常类型。二、异常的处理三、总结 一、认识异常与异常类型。(1)简单定义-什么是

SpringBoot项目配置logback-spring.xml屏蔽特定路径的日志

《SpringBoot项目配置logback-spring.xml屏蔽特定路径的日志》在SpringBoot项目中,使用logback-spring.xml配置屏蔽特定路径的日志有两种常用方式,文中的... 目录方案一:基础配置(直接关闭目标路径日志)方案二:结合 Spring Profile 按环境屏蔽关

Java使用HttpClient实现图片下载与本地保存功能

《Java使用HttpClient实现图片下载与本地保存功能》在当今数字化时代,网络资源的获取与处理已成为软件开发中的常见需求,其中,图片作为网络上最常见的资源之一,其下载与保存功能在许多应用场景中都... 目录引言一、Apache HttpClient简介二、技术栈与环境准备三、实现图片下载与保存功能1.