阿里云【名师课堂】Java面向对象开发
Java核心第二部
Sonrlax
上岸 暂停更新
展开
-
阿里云【名师课堂】Java面向对象开发87 ~ 88:单例设计模式
阿里云【名师课堂】Java面向对象开发87 ~ 88:单例设计模式87:单例设计模式88:多例设计模式复习:《阿里云【名师课堂】Java面向对象开发71 ~ 72:接口的设计模式》。87:单例设计模式单例设计是指一个类只允许产生一个实例化对象,下面观察一个简单程序。class Singleton { public void print() { System.out.println("Hello World!") ; }}public class TestSingleton { pub原创 2020-06-27 11:28:13 · 216 阅读 · 0 评论 -
阿里云【名师课堂】Java面向对象开发106:【第05个代码模型】综合案例:宠物商店
阿里云【名师课堂】Java面向对象开发106:【第05个代码模型】综合案例:宠物商店106:【第05个代码模型】综合案例:宠物商店1、建立宠物标准(接口)2、定义宠物商店类106:【第05个代码模型】综合案例:宠物商店需求:建立一家宠物商店,店里可以进行宠物的上架、下架、关键字查询。只要求描述出程序的关系。宠物的属性:名字、年龄、毛色。分析:一家宠物商店会有多种宠物,按照设计表关系来说属于一对多关系映射。宠物商店是一,宠物是多,那么问题来了,宠物也分很多种,怎么办?宠物应该有自己的标原创 2020-07-04 01:17:45 · 248 阅读 · 0 评论 -
阿里云【名师课堂】Java面向对象开发97 ~ 105:链表
阿里云【名师课堂】Java面向对象开发97 ~ 105:链表97:链表基本概念98:链表实现结构说明99:增加链表数据100:取得链表数据个数101:链表数据转换为对象数组102:查询数据103:根据索引取得数据104:修改指定索引数据105:删除数据97:链表基本概念98:链表实现结构说明99:增加链表数据100:取得链表数据个数101:链表数据转换为对象数组102:查询数据103:根据索引取得数据104:修改指定索引数据105:删除数据...原创 2020-07-03 18:13:11 · 401 阅读 · 0 评论 -
阿里云【名师课堂】Java面向对象开发89 ~ 96:【第04个代码模型】异常的捕获与处理
阿里云【名师课堂】Java面向对象开发89 ~ 96:【第04个代码模型】异常的捕获与处理89:观察异常带来的问题90:异常处理格式`try···catch``try···catch···finally`91:throws关键字92:throw关键字93:异常处理模型94:RuntimeException95:断言96:自定义异常类异常是导致程序中断执行的一种指令流,就是程序运行时可能出现一些错误,比如试图打开一个不存在的文件等。异常处理将会改变程序的控制流程,让程序有机会对错误进行处理。89:观察异常原创 2020-06-28 15:55:16 · 162 阅读 · 0 评论 -
阿里云【名师课堂】Java面向对象开发86:jar命令
阿里云【名师课堂】Java面向对象开发86:jar命令概念jar命令总结概念jar类比于压缩文件夹(.zip、.rar),我们通常会把一些有关联性的文件放在压缩文件里,为了存储方便以及节约空间。实际上jar也是一种压缩文件,里面保存的都是*.class文件。比如说,现在要实现一个功能模块里面有几百个类,那么最终交付给用户使用的时候为了方便管理,就会将这些文件形成一个压缩包提供给用户。jar命令JDK提供有实现jar文件操作的命令:但是实际操作时我们并不会这么用,因为用这种jar命令 + 选原创 2020-06-25 16:42:35 · 130 阅读 · 0 评论 -
阿里云【名师课堂】Java面向对象开发85:访问控制权限
阿里云【名师课堂】Java面向对象开发85:访问控制权限四种访问控制权限从小到大:private、default、protected、public。它们的定义如下:范围privatedefaultprotectedpublic同一包中的同一类√√√√同一包中的不同类√√√不同包中的子类√√不同包中的非子类√可以看到,public永远都可以访问,所以一般对封装主要是三个权限:private、default、protected原创 2020-06-25 11:43:35 · 111 阅读 · 0 评论 -
阿里云【名师课堂】Java面向对象开发82 ~ 84:包的定义及使用
阿里云【名师课堂】Java面向对象开发82 ~ 84:包的定义及使用82:包的定义83:包的导入84:系统常用包(了解)包实际上就是文件夹。在实际的项目开发中很难避免重复的类名称的出现(因为有很多开发者)。而如果所有的*.class文件放在同一个目录之中,那么就有可能出现覆盖的情况。而这样就会造成项目整体的开发困难。为了解决这样的冲突,所有的Java程序都应该保存在各自的目录中。而这个目录就称为包。82:包的定义只需要在Java源码的第一行编写:package 包名 ;范例:定义包package原创 2020-06-20 22:57:36 · 146 阅读 · 0 评论 -
阿里云【名师课堂】Java面向对象开发79 ~ 81:包装类
阿里云【名师课堂】Java面向对象开发79 ~ 81:包装类79:包装类简介80:装箱与拆箱81:字符串与基本数据类型转换字符串变为基本数据类型基本数据类型变为字符串通过Object类的学习(《阿里云【名师课堂】Java面向对象开发75 ~ 78:Object类》)我们知道,Object类可以接收所有的引用数据类型。此时又出现一个问题:数据类型分为基本数据类型和引用数据类型,那么基本数据类型怎么处理?79:包装类简介包装类就是将基本数据类型封装在一个类之中,就好比如下的代码:范例:定义一个包装类原创 2020-06-20 14:44:10 · 144 阅读 · 0 评论 -
阿里云【名师课堂】Java面向对象开发75 ~ 78:Object类
阿里云【名师课堂】Java面向对象开发75 ~ 78:Object类75:Object类简介76:取得对象信息77:对象比较78:接收引用数据类型75:Object类简介Object是Java默认提供的一个类,可以说Java里面除了Object类之外,所有的类都是存在有继承关系的,默认会继承Object父类。也就是说,以下两种类的定义格式产生效果是完全相同的。class Message {}class Message extends Object {}那么也就证明,Object类可以接收原创 2020-06-19 22:32:29 · 165 阅读 · 0 评论 -
阿里云【名师课堂】Java面向对象开发74:匿名内部类
阿里云【名师课堂】Java面向对象开发74:匿名内部类引出问题接口使用匿名内部类抽象类使用匿名内部类普通类使用匿名内部类总结引出问题讲解匿名内部类之前。首先观察以下的一段程序:interface IMessage { public void print() ;}class MessageImpl implements IMessage { public void print() { System.out.println("hello world") ; }}public clas原创 2020-06-19 12:48:30 · 142 阅读 · 0 评论 -
阿里云【名师课堂】Java面向对象开发71 ~ 72:接口的设计模式
阿里云【名师课堂】Java面向对象开发71 ~ 72:接口的设计模式71:工厂(Factory)设计模式(重点)1、传统开发模式2、通过Factory来描述3、总结72:代理(proxy)设计模式1、基本概念2、实现代理设计3、总结Java一共有二十多种设计模式,最常用到的有三种:工厂、代理、单例。71:工厂(Factory)设计模式(重点)首先来看一个简单的程序范例:在进行类的设计时,首先需要有接口,而后接口要通过子类才可以进行对象的实例化处理。1、传统开发模式范例:传统开发模式interfa原创 2020-06-19 11:19:22 · 176 阅读 · 0 评论 -
阿里云【名师课堂】Java面向对象开发68 ~ 70、73:接口的定义和使用
阿里云【名师课堂】Java面向对象开发68 ~ 73:接口的定义和使用68:接口基本概念定义观察接口间的转换69:接口使用限制1、权限限制2、实现顺序3、抽象类与接口间的实现3.1、三重继承3.2、假实现4、接口的继承5、接口定义内部结构70:接口的应用:定义标准1、定义USB标准(by接口)2、定义电脑类3、定义USB子类4、定义测试类5、总结71:工厂设计模式72:代理设计模式73:抽象类与接口的区别通过《阿里云【名师课堂】Java面向对象开发65 ~ 67:抽象类的定义和使用》的学习我们知道,抽象类原创 2020-06-19 11:18:42 · 129 阅读 · 0 评论 -
阿里云【名师课堂】Java面向对象开发65 ~ 67:抽象类的定义和使用
阿里云【名师课堂】Java面向对象开发65 ~ 67:抽象类的定义和使用65:抽象类基本概念66:抽象类使用限制(相关规定)1、抽象类中的构造父类中有无参构造时:父类中没有无参构造时:理解:拓展:对象实例化操作的核心步骤67:模版设计模式注意:在以后的开发过程中,绝大多数情况下,千万不要直接去继承一个已经定义好的类,而只能继承抽象类和接口。经过《阿里云【名师课堂】Java面向对象开发64:多态性》的学习我们知道,对象多态性的本质在于方法的覆写。但是如果现在子类没有去进行指定方法的覆写,这样的操作(继承、原创 2020-06-18 11:20:00 · 253 阅读 · 0 评论 -
阿里云【名师课堂】Java面向对象开发64:多态性
阿里云【名师课堂】Java面向对象开发64:多态性基本概念对象的多态性上转型下转型instanceof关键字具体应用总结基本概念代码的重用不是全部靠继承实现,还有另一个重要的核心概念:多态性。Java中对多态的核心表现主要有以下两点:方法的多态性方法的重载:同一个方法名称,可以根据参数的类型及个数的不同调用不同的方法体;方法的覆写:同一个父类方法,可能根据实例化子类的不同也有不同的实现;对象的多态性(前提:方法覆写):(自动、常用)对象的向上转型:父类 父类对象 = 子类实例 ;原创 2020-06-16 11:42:58 · 231 阅读 · 0 评论 -
阿里云【名师课堂】Java面向对象开发63:final关键字
阿里云【名师课堂】Java面向对象开发63:final关键字原创 2020-06-16 10:08:16 · 142 阅读 · 0 评论 -
阿里云【名师课堂】Java面向对象开发60 ~ 62:【第3.5个代码模型】综合案例:数组操作(定义Array父类)
阿里云【名师课堂】Java面向对象开发60 ~ 62:综合案例:数组操作第一步(60):定义Array父类现在要求定义一个整型数据数组操作类,有如下要求:该数组大小由类创建对象的时候动态决定;可以通过类向数组中进行数据的保存,保存时需要考虑空间问题;如果发现数组空间不足,则可以进行数组长度的动态扩充。可以取得数组的全部数据(按从小到大顺序)而后在这一基础上,要求继续扩展两个派生类,功能要求:可以进行数组的排序处理;可以进行数组的反转处理。第一步(60):定义Array父类...原创 2020-06-15 09:55:27 · 155 阅读 · 0 评论 -
阿里云【名师课堂】Java面向对象开发57 ~ 59:覆写
阿里云【名师课堂】Java面向对象开发57 ~ 59:覆写57:方法覆写58:属性覆盖59:super关键字57:方法覆写方法覆写指的是子类定义了与父类方法名称、参数类型及个数完全相同的方法,凡是被覆写的方法不能拥有比父类更严格的访问控制权限。范例:观察简单的方法覆写class Person { public void printInfo() { System.out.println("【Person类】printInfo()方法") ; }}class Student extends原创 2020-06-14 16:20:22 · 134 阅读 · 0 评论 -
阿里云【名师课堂】Java面向对象开发54 ~ 56:继承的定义与使用
阿里云【名师课堂】Java面向对象开发54 ~ 56:继承的定义与使用继承问题的引出继承的实现继承使用限制调用构造方法单继承:一个子类只能继承一个父类子类继承父类的所有结构总结继承问题的引出面向对象编程的三大特点:封装、继承、多态,继承就是在已经有基础上进行对功能的扩充。如果要更好的理解为什么要有继承,下面用之前学习的概念定义两个类:人、学生。范例:定义人类:姓名年龄,学生类:姓名年龄学校class Person { private String name ; private int age原创 2020-06-14 11:28:21 · 200 阅读 · 0 评论 -
阿里云【名师课堂】Java面向对象开发51 ~ 53:内部类的定义及使用
阿里云【名师课堂】Java面向对象开发51 ~ 53:内部类的定义及使用51:内部类基本概念52:static定义内部类53:在方法中定义内部类51:内部类基本概念52:static定义内部类53:在方法中定义内部类...原创 2020-06-13 19:27:22 · 214 阅读 · 0 评论 -
阿里云【名师课堂】Java面向对象开发48 ~ 50:代码块
阿里云【名师课堂】Java面向对象开发48 ~ 50:代码块48、普通代码块定义在方法中的代码块。49、构造块定义在类中的代码块。50、静态代码块使用static关键字定义的代码块。在非主类中在主类中总结现阶段代码块并不是一个重点概念,作为结构清楚一下就好。所谓代码块指的是使用{}定义的一段程序代码,而代码块根据其定义的位置以及声明的关键字的不同一共可以分为四类:普通代码块、构造块、静态块、同步代码块。同步代码块在多线程部分讲解。48、普通代码块定义在方法中的代码块。范例:观察一个简单程序原创 2020-06-12 15:12:52 · 142 阅读 · 0 评论 -
阿里云【名师课堂】Java面向对象开发44 ~ 47:static关键字
阿里云【名师课堂】Java面向对象开发44 ~ 46:static关键字44:static属性45:static方法46:分析主方法44:static属性在讲解之前首先观察一道程序:范例:定义一个表示人的类,同时设置他所在的国家class Person{ private int age ; private String name ; String country = "China"; // 为了后面的操作方便,暂时不封装,当然这样是不对的 public Person(String原创 2020-06-12 11:30:14 · 212 阅读 · 0 评论 -
阿里云【名师课堂】Java面向对象开发43:【第03个代码模型】综合案例:数据表与简单Java类(角色与权限)
阿里云【名师课堂】Java面向对象开发43:【第03个代码模型】综合案例:数据表与简单Java类(角色与权限)角色与权限角色与权限原创 2020-06-11 21:37:56 · 170 阅读 · 0 评论 -
阿里云【名师课堂】Java面向对象开发42:【第03个代码模型】综合案例:数据表与简单Java类(多对多)
阿里云【名师课堂】Java面向对象开发42:【第03个代码模型】综合案例:数据表与简单Java类(多对多)多对多1、先将所有的基础字段转化为类,暂时不考虑所有的关系2、进行关系设计,列出数据表中对应的关系3、根据开发需求设计多对多要求:定义一个学生选课的操作表:三张数据表学生表:学生编号、姓名、年龄课程表:课程编号、课程名称、学分学生成绩单:学生编号、课程编号、成绩输出要求:可以找到一门课程,以及参加此课程的学生、他们的成绩可以根据一个学生,找到他参加的所有课程,以及每门课的成绩1原创 2020-06-11 14:49:07 · 163 阅读 · 0 评论 -
阿里云【名师课堂】Java面向对象开发41:【第03个代码模型】综合案例:数据表与简单Java类(一对多)
阿里云【名师课堂】Java面向对象开发41:【第03个代码模型】综合案例:数据表与简单Java类一对多1、先将所有的基础字段转化为类。2、然后进行关系设计,列出数据表中对应的关系3、最后根据开发需求设计多对多1、先将所有的基础字段转化为类,暂时不考虑所有的关系2、进行关系设计,列出数据表中对应的关系3、根据开发需求设计角色与权限一对多回顾:复习《阿里云【名师课堂】Java面向对象开发9:【第01个代码模型】综合案例:简单Java类》https://blog.csdn.net/weixin_436249原创 2020-06-11 14:48:41 · 142 阅读 · 0 评论 -
阿里云【名师课堂】Java面向对象开发40:【第2.5个代码模型】引用传递实际应用
阿里云【名师课堂】Java面向对象开发40:引用传递实际应用回顾:复习《阿里云【名师课堂】Java面向对象开发3 ~ 6:类与对象》中的引用传递初次分析部分,链接如下:https://blog.csdn.net/weixin_43624945/article/details/106590272。复习《阿里云【名师课堂】Java面向对象开发38:引用传递进阶分析》,链接如下:https://blog.csdn.net/weixin_43624945/article/details/106659277。原创 2020-06-10 23:38:48 · 135 阅读 · 0 评论 -
阿里云【名师课堂】Java面向对象开发39:【第02个代码模型】综合案例:对象比较
阿里云【名师课堂】Java面向对象开发39:【第02个代码模型】综合案例:对象比较实现形式一实现形式二总结确定两个对象是否相等,比较的应该是对象的完整信息,而对象的完整信息就是对象的所有属性。因此对象比较就是对两个对象的属性进行比较。实现形式一class Person{ private String name ; private int age ; public Person() {}; public Person(String name,int age){ this.name = n原创 2020-06-10 15:01:05 · 133 阅读 · 0 评论 -
阿里云【名师课堂】Java面向对象开发38:引用传递进阶分析
阿里云【名师课堂】Java面向对象开发38:引用传递进阶分析第一道引用传递第二道引用传递第三道引用传递回顾:请先复习《阿里云【名师课堂】Java面向对象开发3 ~ 6:类与对象》中的引用传递初次分析部分,链接如下:https://blog.csdn.net/weixin_43624945/article/details/106590272。引用传递是Java的核心,想要正常分析代码必须掌握引用传递。下面通过三个程序讲解引用传递。第一道引用传递class Message{ private int n原创 2020-06-10 11:25:40 · 232 阅读 · 2 评论 -
阿里云【名师课堂】Java面向对象开发35 ~ 37:this关键字
阿里云【名师课堂】Java面向对象开发35 ~ 37:this关键字35、this调用属性调用本类属性36、this调用方法调用本类方法调用本类普通方法调用本类构造方法37:表示当前对象35、this调用属性this可以:调用本类属性调用本类方法(普通、构造)表示当前对象(相对概念)调用本类属性观察一段程序class Person{ private String name ; private int age ; public Person(){} public Person(原创 2020-06-09 23:30:18 · 196 阅读 · 0 评论 -
阿里云【名师课堂】Java面向对象开发26 ~ 34:String类的常用方法
阿里云【名师课堂】Java面向对象开发26 ~ 34:String类的常用方法26、DOC文档组成使用方法27、字符串与字符数组charAt()方法字符串与字符数组的相互转换(重点)28、字节与字符串处理中文处理英文29、字符串比较不区分大小写比较compareTo()30、字符串查找contains()indexOf()startsWith()31、字符串替换32、字符串拆分全部拆分部分拆分不能拆分多次拆分33、字符串截取34、字符串其它操作方法在开发中只依靠String类的基本概念无法满足需求,所以要原创 2020-06-09 14:45:05 · 355 阅读 · 0 评论 -
阿里云【名师课堂】Java面向对象开发21 ~ 25:String类的基本特点
阿里云【名师课堂】Java面向对象开发21 ~ 25:String类的基本特点21、String类两种实例化方式直接赋值new实例化新对象22、字符串相等比较String类提供的方法总结:`==`和`equals()`的区别23、字符串为匿名对象24、String两种实例化区别使用直接赋值new实例化新对象总结:String类中两种实例化方式的区别25、字符串常量不可变更总结21、String类两种实例化方式直接赋值之前的讲解过程中说到并使用过,String可以采用直接赋值的方式进行处理,这一点类似于原创 2020-06-08 22:37:56 · 370 阅读 · 0 评论 -
阿里云【名师课堂】Java面向对象开发20:对象数组
阿里云【名师课堂】Java面向对象开发20:对象数组对象数组的动态初始化静态初始化内存分析在之前学习的数组都属于基本数据类型的数组,但是对象也可以定义为数组,这样的操作形式称为对象数组。对象数组往往是以引用数据类型为主的定义,例如:类、接口,而且对象数组也分为两种定义格式:对象数组的动态初始化:类名称 对象数组名称 [] = new 类名称 [长度] ;对象数组的静态初始化:类名称 对象数组名称 [] = new 类名称 [] {实例化对象,······} ;对象数组的动态初始化class P原创 2020-06-08 16:06:10 · 269 阅读 · 0 评论 -
阿里云【名师课堂】Java面向对象开发16 ~ 19:数组案例
阿里云【名师课堂】Java面向对象开发16 ~ 19:数组案例数组数据统计数组排序数组转置**范例**:方式一**范例**:方式二二维数组的转置二分查找法数组遍历二分查找法(折半查找)数组数据统计范例:假设给定一个数组,统计出该数组的最大值、最小值、平均值、总和。肯定要通过循环完成。通过定义方法实现,更整齐、简洁明了。因为主方法中代码应该越简单越好,最好只有调用。我的思路:建立四个方法,分别求出最大值、最小值、平均值、总和。缺点:需要四次循环,速度较慢,且不够简洁;public cl原创 2020-06-08 14:48:23 · 274 阅读 · 0 评论 -
阿里云【名师课堂】Java面向对象开发10 ~ 15:数组的定义与使用
阿里云【名师课堂】Java面向对象开发10 ~ 15:数组的定义与使用10、数组的基本概念基本概念数组动态初始化总结11、数组的引用传递12、数组的静态初始化13、二维数组(了解)概念初始化14、数组与方法调用(重点)15、Java对数组的支持数组排序数组拷贝10、数组的基本概念基本概念数组用来表示一组类型相同的有序数据的集合,这些数据使用同一个标识符命名(数组名),数组中的每个数据叫数组元素,可通过下标来访问,下标从0开始。和变量一样,数组必须先定义,后使用。定义数组时确定数组的名称、数据类型,还原创 2020-06-08 09:46:06 · 327 阅读 · 0 评论 -
阿里云【名师课堂】Java面向对象开发9:【第01个代码模型】综合案例:简单Java类
阿里云【名师课堂】Java面向对象开发9:【第01个代码模型】综合案例:简单Java类假设有这样一个要求:定义一个雇员类,该类中包含雇员编号、姓名、职位、基本工资、佣金几个属性信息。这种类称为简单Java类,它有着如下开发要求:类的名称应该有意义,可以明确描述出某一类事物,最好用对应的英文单词+形式变化;类中所有属性必须使用private封装,所有属性必须按照要求提供setter()、getter()方法;类中可以定义若干个构造方法,但是必须保留有一个无参构造方法;类中所有的方法都不允许出现任原创 2020-06-07 15:43:48 · 307 阅读 · 0 评论 -
阿里云【名师课堂】Java面向对象开发8:构造方法与匿名对象
阿里云【名师课堂】Java面向对象开发8:构造方法与匿名对象构造方法无参构造方法有参构造方法构造方法的重载匿名对象总结构造方法回顾:实例化对象的产生格式:①类名称 ②对象名称 = ③new ④类名称() ;下面分析这个格式每一部份的组成:①类名称:任何对象都有其对应的类,因为没有类就不知道对象具备的功能;②对象名称:是一个唯一的标记,表示以后要操作的对象的名称;③new:表示开辟新的堆内存空间;④类名称():构造方法。可以看出,构造方法是使用关键字new实例化新对象时调用的操作方法,构原创 2020-06-07 14:47:24 · 212 阅读 · 0 评论 -
阿里云【名师课堂】Java面向对象开发7:private实现封装处理
阿里云【名师课堂】Java面向对象开发7:private实现封装处理回顾:面向对象三大特征:封装性、继承性、多态性,封装是其中最复杂的概念,这里学习封装的基本概念。如果想要清楚封装,首先要知道没有封装是什么情况。范例:观察程序class Person { // 定义一个类,注意类名称每个单词首字母大写 String name ; // 属性1,表示人的姓名 int age ; // 属性2,表示人的年龄 public void info() { // 一个方法 System.out原创 2020-06-07 11:27:53 · 197 阅读 · 0 评论 -
阿里云【名师课堂】Java面向对象开发3 ~ 6:类与对象
阿里云【名师课堂】Java面向对象开发3 ~ 6:类与对象类与对象的基本定义认识类与对象类与对象定义及使用对象内存分析引用传递初次分析类与对象的基本定义是面向对象设计的核心所在,也是所有概念的基础。类本身属于引用数据类型,因此类的使用牵扯到内存的分配问题。认识类与对象类指的是一个共性的概念,而对象指的是一个具体的事物。因此,在实际的开发过程中吧,一定是要首先产生类,而后才可以产生我们的对象。那么对象的所有行为都一定在类中进行了完整的定义。类中没有定义的功能,对象一定无法实现。类的组成:方法(原创 2020-06-07 10:24:25 · 251 阅读 · 0 评论 -
阿里云【名师课堂】Java面向对象开发2:面向对象简介
阿里云【名师课堂】Java面向对象开发2:面向对象简介编程语言发展阶段编程语言发展阶段面向机器语言:汇编语言面向过程语言:C语言、FORTRAN等面向对象语言:Java等面向过程的核心是编写解决某个问题的代码块,比如C中的函数;面向对象是模块化设计。对于现在的程序设计更多情况下像是汽车组装,不同的工厂生产不同的配件,将配件组装在一起就能形成一辆汽车,并且配件方便更换。面向对象语言三个特点:封装性:内部的操作对外部而言不可见;继承性:在父类的基础(属性、功能)上继续发展;多态性:利用原创 2020-06-06 16:56:16 · 185 阅读 · 0 评论