- Java8 Stream流的sorted()的排序【正序、倒序、多字段排序】
Tony666688888
javawindows开发语言
针对集合排序,java8可以用Stream流的sorted()进行排序。示例Bean以下我们会使用这个Bean来做示例。publicclassOrder{privateStringweight;privateDoubleprice;privateStringdateStr;//忽略getter、setter、构造方法、toString}字段排序首先是比较器Comparator,形式如下:Compa
- Java:数据结构-ArrayList和顺序表(2)
blammmp
java数据结构开发语言
一ArrayList的使用1.ArrayList的构造方法第一种(指定容量的构造方法)创建一个空的ArrayList,指定容量为initialCapacity。publicArrayList(intinitialCapacity){if(initialCapacity>0){this.elementData=newObject[initialCapacity];}elseif(initialCap
- 大学生入门:Random类及其易踩坑的点
和之前提到的Scanner一样,Random同样是java.util包中的一个类。大学生入门:Scanner简单介绍及易踩坑的点_javascanner使用的坑-CSDN博客https://blog.csdn.net/qq_73698057/article/details/149448413?spm=1001.2014.3001.5501主要作用就是用来生成随机数,构造方法和Scanner看上去一
- Day32 Java方法03 方法的重载
空影学Java
java
Day32Java方法03方法的重载方法重载的定义:重载就是在一个类中,方法的名称相同,但形参不同方法重载的规则:①方法名称必须相同②方法形参必须不同(个数不同或类型不同或参数排列顺序不同等)③方法的返回值类型可以不同,也可以相同(但仅返回值不同不能够构成方法的重载)原理:当方法名称相同时,编译器会根据调用方法处的实参的类型,个数等去逐个匹配,选择对应的方法,如果匹配失败,则编译器报错例题✅题目:
- [特殊字符] Java反射从入门到飞升:手撕类结构,动态解析一切![特殊字符]
lili-felicity
Java反射动态调用私有方法反射原理
【震撼揭秘】你是否曾想窥探Java类的内部结构?是否好奇Spring框架如何实现"万物皆可注入"?✨本文将带你从反射小白晋升为反射高手,用一行代码透视任意类的构造方法、成员变量和私有方法!终极效果预览/***Student类反射结构信息**由反射工具自动生成,展示类元数据*/publicclasscom.my.reflect.Studentextendsjava.lang.Object//类声明{
- JavaSE初阶重难点知识梳理~~~
共行跬步
算法java
1.基础语法目录1.基础语法A.数据结构:数据类型分为引用数据类型和基本数据类型基本数据类型分为4类:整数类型:浮点类型字符类型引用数据类型:包括类,接口,数组等变量:是存储数据的容器(先声明再使用)B.运算符:2.面向对象编程C.类和对象总结D.继承继承的限制E.多态:方法重载和重写多态的优势多态的条件F.抽象类和接口适用场景3.其他重要方法字符串拼接G.常用工具类java.util包下的工具类
- Mat的构造函数
LQTGO
Opencv
然后我们看看Mat常用的构造函数:1、Mat::Mat()无参数构造方法;2、Mat::Mat(introws,intcols,inttype)创建行数为rows,列数为col,类型为type的图像;3、Mat::Mat(Sizesize,inttype)创建大小为size,类型为type的图像;4、Mat::Mat(introws,intcols,inttype,constScalar&s)创建
- 收集的问答
new“new关键字在JavaScript中用于调用构造函数,通过new关键字调用构造函数可以创建一个新的对象。构造函数可以看作是用来初始化对象的特殊函数,它会为新对象设置属性和方法。当使用new关键字和构造函数一起调用时,会创建一个空对象,并将这个空对象绑定到构造函数中的this关键字。然后构造函数中的代码会初始化这个对象的属性和方法,最终返回这个新的对象。通过这种方式我们可以轻松地创建多个拥有
- java面向对象高级01——final关键字
硕硕子啊~
javajava开发语言
1.final的本质及用法final关键字是最终的意思,可以修饰类、方法、变量。//final修饰类:该类为最终类,特点是不可以被继承(一般工具类可以用final修饰)//final修饰方法:该方法为最终方法,特点是不可以被重写//final修饰变量:该变量存在,且仅仅可以被赋值1次2.final修饰变量▶final修饰基本类型变量(四类八种),变量存的数据只能写一次,之后数据不可改变▶final
- Java基础方法重载的要求
五度鱼Java
javajavasejava
1.方法重载又被称为:overload2.什么时候考虑使用方法重载?功能相似的时候,尽可能然方法名相同【但是:功能不同/不相似的时候,尽可能让方法名不同】3.什么条件满足之后构成了方法重载?方法名相同参数列表不同:①数量不同②顺序不同③类型不同4.方法重载和什么有关系,和什么没有关系?①方法重载和方法名+参数列表有关系②方法重载和返回值类型无关③方法重载和修饰符列表无关被重载的方法可以改变返回类型
- [JAVA] 只知对象属性,不知类属性?就算类答应,static都不答应
老夫不正经
Java面向对象之类、对象、static成员对象在面向对象的思想中,一切事物都可以认为是对象——万物皆对象,把对象定义成包含状态和行为的一个实体,存在于现实世界中并且可以与其他实体区分开来的。对象具有状态和行为;比如:想想你心仪的小姐姐,可以把这个小姐姐看作是一个对象,那么该对象有两方面的定义:状态和行为;状态,如身高,年龄,三围,头发(长发或者短发)等;行为,如调戏你、跳舞,玩手机等。类通过多个
- Lombok 注解详解:让 Java 代码更简洁高效
贾修行
JAVAjavapython开发语言
在Java开发中,我们经常需要编写大量重复的模板代码,如getter、setter、构造方法等。这些代码不仅繁琐,还会增加维护成本。Lombok是一款优秀的Java工具库,它通过注解的方式,自动为我们生成这些模板代码,让开发者能够专注于核心业务逻辑。本文将详细介绍Lombok中常用的注解,帮助大家更好地使用Lombok提升开发效率。一、Lombok简介Lombok是一个可以通过简单注解来简化Jav
- Python - 面向对象编程 - 实例方法、静态方法、类方法
实例方法在类中定义的方法默认都是实例方法,前面几篇文章已经大量使用到实例方法实例方法栗子classPoloBlog:def__init__(self,name,age):print("自动调用构造方法")self.name=nameself.age=agedeftest(self):print("一个实例方法,需要通过对象调用")print("mynameis:",self.name,"andmy
- Java面向对象基础(多态)04--Java基础学习08
文章属于个人知识点总结名字:不懂技术的计科毕业生来源:尚学堂高棋老师的Java300课1、多态的定义多态指为不同数据类型的实体提供统一的接口。多态类型可以将自身所支持的操作套用到其它类型的值上。多态是指同一方法调用,由于对象不同可能会有不同的行为。现实生活中,同一方法具体实现会完全不同。2、多态的要点①多态是方法的多态,不是属性的多态(多态与属性无关)。②多态的存在有三个必要条件:继承、方法的重写
- 【Python篇】Python基础——08day.面向对象编程中类和对象的基本概念及属性和方法的常见分类和使用场景
WXX_s
python基础篇python分类开发语言学习
目录前言一、类和对象1.类→Class1.1概念1.2创建2.对象→Object2.1概念2.2创建二、属性和方法1.实例属性2.实例方法3.类属性4.类方法5.静态方法5.1综合应用6.构造方法7.初始化方法8.魔术方法8.1常用方法8.2案例参考总结前言这章讲的面向对象编程(Object-OrientedProgramming,简称OOP)是一种通过组织对象来设计程序的编程方法。为什么需要类和
- Java IO流
目录一、IO流的分类(一)字节流1、InputStreamInputStream类中的成员方法FileInputStream的构造方法read()和read(byte[]b)代码示例:2、利用Scanner进行字符读取代码示例:3、OutputStreamOutputStream中的成员方法FileOutputStream代码示例示例一:示例二:示例三:示例四:示例五:追加写:(二)字符流1、Re
- 前后端分离项目进阶1---后端
屋外雨大,惊蛰出没
java开发语言
前端链接:前端解析一.项目目录二.关键代码分析1)Admin.javapackageimprov1.improv1.entity;publicclassAdmin{privateStringaccount;privateStringpassword;privateStringname;//构造方法、getter和setterpublicAdmin(){}publicAdmin(Stringacco
- 从AlertDialog源码看链式调用
孙大硕
相信我们大家都用过AlertDialog,但是我们没办法去直接实例化一个AlertDialog,因为内部的构造方法都是private,我们只能通过AlertDialog的内部类Builder去生成一个AlertDialog对象,可是为什么要这样设计呢?看过设计模式的人一眼就会发现,这怎么像传说中的“建造者模式”呢?建造者解决的问题:是将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建
- 【Java源码阅读系列56】深度解读Java Constructor 类源码
·云扬·
源码阅读系列之Javajava开发语言
Java反射机制中,Constructor类是操作构造方法的核心入口。它封装了构造方法的元信息(如参数类型、修饰符)和实例化逻辑,是框架(如Spring、MyBatis)动态创建对象的关键工具。本文基于JDK1.8源码,从类结构、关键方法、设计模式、典型场景等维度,深入解析Constructor类的实现逻辑与设计思想。一、类结构与核心定位1.1类定义与继承关系Constructor类被声明为pub
- 小架构step系列17:getter-setter-toString
秋千码途
架构java开发语言
1概述在写代码的时候,有两类bean:一类是专门承载数据而无业务逻辑的bean,如DTO;另外一类是业务模型bean,其既要承载数据也要提供业务逻辑,在DDD中它们就对应于领域模型对象和值对象。这些bean里面可能要提供getter、setter、equals、hashCode、toString,甚至构造方法,这些代码写起来比较无聊,基本都是根据字段来的,属于非常机械化而无技术含量的操作,而这些操
- 04、抽象类与接口
想带你从多云到转晴
java开发语言
内容多,第二次复习时写的一、抽象类1、本质:当一个类不能描述一个具体对象时我们把它叫做抽象类2、与普通类的区别:它跟普通类一样可以定义成员方法和变量,但是不能实例化,它可以和普通类一样实现多态、向上转型、动态绑定以及拥有构造方法等等(它的主要作用就是用来继承的)这里举个实现的例子:publicabstractclassShape1{publicabstractvoiddraw();}publicc
- 04、抽象类与接口
内容多,第二次复习时写的一、抽象类1、本质:当一个类不能描述一个具体对象时我们把它叫做抽象类2、与普通类的区别:它跟普通类一样可以定义成员方法和变量,但是不能实例化,它可以和普通类一样实现多态、向上转型、动态绑定以及拥有构造方法等等(它的主要作用就是用来继承的)这里举个实现的例子:publicabstractclassShape1{publicabstractvoiddraw();}publicc
- iOS 多个线程对数组操作(遍历,插入,删除),实现一个线程安全的NSMutabeArray
//联系人:石虎QQ:1224614774昵称:嗡嘛呢叭咪哄一、概念1.含义:@synchronized(self){}//这个其实就是一个加锁。如果self其他线程访问,则会阻塞。这样做一般是用来对单2.重写构造方法@interfaceSHSafetyArray:NSObject{@privateNSMutableArray*_mutableArray;//声明数组}//遍历加锁-(void)m
- Lombok的作用与使用
weixin_43783165
java
Lombok是一个用于简化Java开发的工具库,主要通过注解在编译时自动生成代码,减少开发中的样板代码。其核心作用如下:1.消除样板代码(核心价值)Getter/Setter:通过@Getter/@Setter注解自动生成字段的访问方法,无需手动编写冗长的getXxx()和setXxx()方法。构造方法:@NoArgsConstructor:生成无参构造器。@AllArgsConstructor:
- Java面向对象程序设计三大支柱--多态
打代码的小熊饼干
eclipsegithubjava
面向对象程序设计的三大支柱是封装、继承和多态。本篇文章主要讲述多态的相关知识。一、概述1.定义多态意味着父类的变化可以指向子类对象;它是同一行为具有不同表现形式或形态的能力。ps:一个类实际定义了一种类型。子类定义的类型称为子类型;父类定义的类型称为父类型。2.要实现多态需要满足一下几个条件:有继承关系有方法重写(抽象方法)有父类引用指向子类对象3.多态的优点消除类型之间的耦合关系可替换性可扩充性
- 抽象类与接口:Java面向对象设计的两大支柱
一、学习抽象类与接口的必要性在Java面向对象设计中,抽象类和接口是构建可扩展、可维护系统的基石:抽象类:实现代码复用与框架设计的核心工具接口:定义系统契约与实现多继承特性的关键机制模板方法模式:通过抽象类实现算法框架的经典设计模式掌握这些概念能帮助开发者:设计灵活可扩展的系统架构实现代码复用与多态的优雅结合适应Java版本演进带来的新特性二、抽象类详解2.1抽象类核心特性publicabstra
- Java面向对象三大特性精华实战笔记:static、继承、多态与接口
文章目录Java面向对象三大特性精华实战笔记:static、继承、多态与接口一、static1.静态变量2.静态方法二、工具类1.Javabean类2.测试类3.工具类三、继承四、多态定义表现形式多态的前提多态的好处五、接口接口的定义和使用接口中成员的特点总结Java面向对象三大特性精华实战笔记:static、继承、多态与接口一、static在public后加上static表示老师名字这个属性被所
- Java 反射基础
文章目录反射:框架设计的灵魂一、获取Class对象的方式1、Class.forName("全类名")2、类名.class3、对象.getClass()注意:二、class对象功能1、获取成员变量们2、获取构造方法们3、获取成员方法们4、获取全类名三、Field:成员变量1、设置值2、获取值3、忽略访问权限修饰符的安全检查四、Constructor:构造方法1、创建对象:2、忽略访问权限修饰符的安全
- 【Python入门与进阶】Python面向对象编程练习
小龙
python面向对象编程练习
练习题1:定义一个Person类定义一个Person类,它有以下属性和方法:属性:name(字符串):表示人的名字。age(整数):表示人的年龄。方法:__init__(self,name,age):构造方法,用于初始化name和age。greet(self):打印Hello,mynameis[name]andIam[age]yearsold.classPerson:def__init__(sel
- java面向对象02:回顾方法
回顾方法及加深定义方法修饰符返回类型break:跳出switch和return的区别方法名参数列表packagecom.oop.demo01;//Demo01类publicclassDemo01{//main方法publicstaticvoidmain(String[]args){}/*修饰符返回值类型方法名(...){//方法体return返回值;}*///return结束方法,返回一个结果!p
- PHP,安卓,UI,java,linux视频教程合集
cocos2d-x小菜
javaUIPHPandroidlinux
╔-----------------------------------╗┆
- 各表中的列名必须唯一。在表 'dbo.XXX' 中多次指定了列名 'XXX'。
bozch
.net.net mvc
在.net mvc5中,在执行某一操作的时候,出现了如下错误:
各表中的列名必须唯一。在表 'dbo.XXX' 中多次指定了列名 'XXX'。
经查询当前的操作与错误内容无关,经过对错误信息的排查发现,事故出现在数据库迁移上。
回想过去: 在迁移之前已经对数据库进行了添加字段操作,再次进行迁移插入XXX字段的时候,就会提示如上错误。
&
- Java 对象大小的计算
e200702084
java
Java对象的大小
如何计算一个对象的大小呢?
 
- Mybatis Spring
171815164
mybatis
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
CustomerService userService = (CustomerService) ac.getBean("customerService");
Customer cust
- JVM 不稳定参数
g21121
jvm
-XX 参数被称为不稳定参数,之所以这么叫是因为此类参数的设置很容易引起JVM 性能上的差异,使JVM 存在极大的不稳定性。当然这是在非合理设置的前提下,如果此类参数设置合理讲大大提高JVM 的性能及稳定性。 可以说“不稳定参数”
- 用户自动登录网站
永夜-极光
用户
1.目标:实现用户登录后,再次登录就自动登录,无需用户名和密码
2.思路:将用户的信息保存为cookie
每次用户访问网站,通过filter拦截所有请求,在filter中读取所有的cookie,如果找到了保存登录信息的cookie,那么在cookie中读取登录信息,然后直接
- centos7 安装后失去win7的引导记录
程序员是怎么炼成的
操作系统
1.使用root身份(必须)打开 /boot/grub2/grub.cfg 2.找到 ### BEGIN /etc/grub.d/30_os-prober ### 在后面添加 menuentry "Windows 7 (loader) (on /dev/sda1)" { 
- Oracle 10g 官方中文安装帮助文档以及Oracle官方中文教程文档下载
aijuans
oracle
Oracle 10g 官方中文安装帮助文档下载:http://download.csdn.net/tag/Oracle%E4%B8%AD%E6%96%87API%EF%BC%8COracle%E4%B8%AD%E6%96%87%E6%96%87%E6%A1%A3%EF%BC%8Coracle%E5%AD%A6%E4%B9%A0%E6%96%87%E6%A1%A3 Oracle 10g 官方中文教程
- JavaEE开源快速开发平台G4Studio_V3.2发布了
無為子
AOPoraclemysqljavaeeG4Studio
我非常高兴地宣布,今天我们最新的JavaEE开源快速开发平台G4Studio_V3.2版本已经正式发布。大家可以通过如下地址下载。
访问G4Studio网站
http://www.g4it.org
G4Studio_V3.2版本变更日志
功能新增
(1).新增了系统右下角滑出提示窗口功能。
(2).新增了文件资源的Zip压缩和解压缩
- Oracle常用的单行函数应用技巧总结
百合不是茶
日期函数转换函数(核心)数字函数通用函数(核心)字符函数
单行函数; 字符函数,数字函数,日期函数,转换函数(核心),通用函数(核心)
一:字符函数:
.UPPER(字符串) 将字符串转为大写
.LOWER (字符串) 将字符串转为小写
.INITCAP(字符串) 将首字母大写
.LENGTH (字符串) 字符串的长度
.REPLACE(字符串,'A','_') 将字符串字符A转换成_
- Mockito异常测试实例
bijian1013
java单元测试mockito
Mockito异常测试实例:
package com.bijian.study;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import org.junit.Assert;
import org.junit.Test;
import org.mockito.
- GA与量子恒道统计
Bill_chen
JavaScript浏览器百度Google防火墙
前一阵子,统计**网址时,Google Analytics(GA) 和量子恒道统计(也称量子统计),数据有较大的偏差,仔细找相关资料研究了下,总结如下:
为何GA和量子网站统计(量子统计前身为雅虎统计)结果不同?
首先:没有一种网站统计工具能保证百分之百的准确出现该问题可能有以下几个原因:(1)不同的统计分析系统的算法机制不同;(2)统计代码放置的位置和前后
- 【Linux命令三】Top命令
bit1129
linux命令
Linux的Top命令类似于Windows的任务管理器,可以查看当前系统的运行情况,包括CPU、内存的使用情况等。如下是一个Top命令的执行结果:
top - 21:22:04 up 1 day, 23:49, 1 user, load average: 1.10, 1.66, 1.99
Tasks: 202 total, 4 running, 198 sl
- spring四种依赖注入方式
白糖_
spring
平常的java开发中,程序员在某个类中需要依赖其它类的方法,则通常是new一个依赖类再调用类实例的方法,这种开发存在的问题是new的类实例不好统一管理,spring提出了依赖注入的思想,即依赖类不由程序员实例化,而是通过spring容器帮我们new指定实例并且将实例注入到需要该对象的类中。依赖注入的另一种说法是“控制反转”,通俗的理解是:平常我们new一个实例,这个实例的控制权是我
- angular.injector
boyitech
AngularJSAngularJS API
angular.injector
描述: 创建一个injector对象, 调用injector对象的方法可以获得angular的service, 或者用来做依赖注入. 使用方法: angular.injector(modules, [strictDi]) 参数详解: Param Type Details mod
- java-同步访问一个数组Integer[10],生产者不断地往数组放入整数1000,数组满时等待;消费者不断地将数组里面的数置零,数组空时等待
bylijinnan
Integer
public class PC {
/**
* 题目:生产者-消费者。
* 同步访问一个数组Integer[10],生产者不断地往数组放入整数1000,数组满时等待;消费者不断地将数组里面的数置零,数组空时等待。
*/
private static final Integer[] val=new Integer[10];
private static
- 使用Struts2.2.1配置
Chen.H
apachespringWebxmlstruts
Struts2.2.1 需要如下 jar包: commons-fileupload-1.2.1.jar commons-io-1.3.2.jar commons-logging-1.0.4.jar freemarker-2.3.16.jar javassist-3.7.ga.jar ognl-3.0.jar spring.jar
struts2-core-2.2.1.jar struts2-sp
- [职业与教育]青春之歌
comsci
教育
每个人都有自己的青春之歌............但是我要说的却不是青春...
大家如果在自己的职业生涯没有给自己以后创业留一点点机会,仅仅凭学历和人脉关系,是难以在竞争激烈的市场中生存下去的....
&nbs
- oracle连接(join)中使用using关键字
daizj
JOINoraclesqlusing
在oracle连接(join)中使用using关键字
34. View the Exhibit and examine the structure of the ORDERS and ORDER_ITEMS tables.
Evaluate the following SQL statement:
SELECT oi.order_id, product_id, order_date
FRO
- NIO示例
daysinsun
nio
NIO服务端代码:
public class NIOServer {
private Selector selector;
public void startServer(int port) throws IOException {
ServerSocketChannel serverChannel = ServerSocketChannel.open(
- C语言学习homework1
dcj3sjt126com
chomework
0、 课堂练习做完
1、使用sizeof计算出你所知道的所有的类型占用的空间。
int x;
sizeof(x);
sizeof(int);
# include <stdio.h>
int main(void)
{
int x1;
char x2;
double x3;
float x4;
printf(&quo
- select in order by , mysql排序
dcj3sjt126com
mysql
If i select like this:
SELECT id FROM users WHERE id IN(3,4,8,1);
This by default will select users in this order
1,3,4,8,
I would like to select them in the same order that i put IN() values so:
- 页面校验-新建项目
fanxiaolong
页面校验
$(document).ready(
function() {
var flag = true;
$('#changeform').submit(function() {
var projectScValNull = true;
var s ="";
var parent_id = $("#parent_id").v
- Ehcache(02)——ehcache.xml简介
234390216
ehcacheehcache.xml简介
ehcache.xml简介
ehcache.xml文件是用来定义Ehcache的配置信息的,更准确的来说它是定义CacheManager的配置信息的。根据之前我们在《Ehcache简介》一文中对CacheManager的介绍我们知道一切Ehcache的应用都是从CacheManager开始的。在不指定配置信
- junit 4.11中三个新功能
jackyrong
java
junit 4.11中两个新增的功能,首先是注解中可以参数化,比如
import static org.junit.Assert.assertEquals;
import java.util.Arrays;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runn
- 国外程序员爱用苹果Mac电脑的10大理由
php教程分享
windowsPHPunixMicrosoftperl
Mac 在国外很受欢迎,尤其是在 设计/web开发/IT 人员圈子里。普通用户喜欢 Mac 可以理解,毕竟 Mac 设计美观,简单好用,没有病毒。那么为什么专业人士也对 Mac 情有独钟呢?从个人使用经验来看我想有下面几个原因:
1、Mac OS X 是基于 Unix 的
这一点太重要了,尤其是对开发人员,至少对于我来说很重要,这意味着Unix 下一堆好用的工具都可以随手捡到。如果你是个 wi
- 位运算、异或的实际应用
wenjinglian
位运算
一. 位操作基础,用一张表描述位操作符的应用规则并详细解释。
二. 常用位操作小技巧,有判断奇偶、交换两数、变换符号、求绝对值。
三. 位操作与空间压缩,针对筛素数进行空间压缩。
&n
- weblogic部署项目出现的一些问题(持续补充中……)
Everyday都不同
weblogic部署失败
好吧,weblogic的问题确实……
问题一:
org.springframework.beans.factory.BeanDefinitionStoreException: Failed to read candidate component class: URL [zip:E:/weblogic/user_projects/domains/base_domain/serve
- tomcat7性能调优(01)
toknowme
tomcat7
Tomcat优化: 1、最大连接数最大线程等设置
<Connector port="8082" protocol="HTTP/1.1"
useBodyEncodingForURI="t
- PO VO DAO DTO BO TO概念与区别
xp9802
javaDAO设计模式bean领域模型
O/R Mapping 是 Object Relational Mapping(对象关系映射)的缩写。通俗点讲,就是将对象与关系数据库绑定,用对象来表示关系数据。在O/R Mapping的世界里,有两个基本的也是重要的东东需要了解,即VO,PO。
它们的关系应该是相互独立的,一个VO可以只是PO的部分,也可以是多个PO构成,同样也可以等同于一个PO(指的是他们的属性)。这样,PO独立出来,数据持