- 自定义view实战(5):手撕安卓侧滑栏
捡一晌贪欢
安卓#自定义View实战android自定义ViewLayoutParamslayout动画
前言上一篇文章学了下自定义View的onDraw函数及自定义属性,做出来的滚动选择控件还算不错,就是逻辑复杂了一些。这篇文章打算利用自定义view的知识,直接手撕一个安卓侧滑栏,涉及到自定义LayoutParams、带padding和margin的measure和layout、利用requestLayout实现动画效果等,有一定难度,但能重新学到很多知识!需求这里类似旧版QQ(我特别喜欢之前的侧滑
- GDI+学习及代码总结之------画线、区域填充、写字
Legend500
Windows编程gdi
《精通GDI编程》里的代码,在学习过程中对它加以总结,以防以后用到,所有代码都是在MFC单文档中实现的,写在View::OnDraw(CDC*/*pDC*/)中画线/边框(Pen)1、画单线——-DrawLine[cpp]viewplaincopyprint?Penpen(Color(255,0,0,0),3);PointFL_PTStart(0,0);PointFL_PTEnd(100,10);
- Windows预定义阴影画刷学习
bcbobo21cn
VC++图形学和3Dwindows画刷GDI
画刷是一个8*8位图;用来重复填充区域内部;有实心和阴影画刷;实心就是SolidBrush;有6种预定义阴影画刷;voidCHatchdemoView::OnDraw(CDC*pDC){CHatchdemoDoc*pDoc=GetDocument();ASSERT_VALID(pDoc);//TODO:adddrawcodefornativedatahereCRectrect1(40,40,200
- C语言函数指针实现函数参数化
bcbobo21cn
VC++算法c语言算法开发语言函数指针
之前学习了基本的函数指针;函数指针有多种用途;下面看一下函数参数化;函数参数化是指通过函数指针将函数的某些行为参数化。这样可以在调用函数时动态地指定函数的行为。新建一个单文档工程;下述增加的函数声明加到视类cpp文件的头部,函数体加到视类cpp文件的尾部,在OnDraw()函数中调用输出;voidprocess_array(int*,size_t,int(*process)(int));intin
- C语言指针函数学习2
bcbobo21cn
VC++c语言学习指针指针函数
之前写过一篇指针函数的博文;复习再学习一下;指针函数,是一个函数,它的返回值是指针类型;之前写了一个指针函数,返回一个int*类型的指针;下面做一个程序,返回一个结构体指针;VC6新建一个单文档工程;添加到视类cpp文件头部的代码和OnDraw函数中调用输出的代码如下;structTestData{intnum;doublea;doubleb;};TestData*mytest(intn,doub
- Android:自定义控件
偶是不器
Androidandroid自定义组件笔记
3.16自定义控件1.自定义VIEW组件创建CustomizeView,继承View。重写onDraw方法,通过onDraw方法绘制我们自定义的图像、位图、路径等。示例://自定义绘制ViewpublicclassCutomizeViewextendsView{//构造方法publicCutomizeView(Contextcontext){super(context);}//构造方法,这个构造必
- 自定义view - 炫酷进度条
世道无情
1.思路分析自定义View步骤:1>:values__attrs.xml,自定义属性;2>:在第三个构造方法中,获取自定义属性;3>:onMeasure:不是非必须的,测量控件大小;4>:onDraw:所有绘制代码都写在onDraw方法中;思路分析1>:自定义属性:内圆颜色、外圆颜色、圆弧宽度、中间文字颜色、文字大小;2>:自定义ProgressBar,继承View;2.效果图如下图片.png3.
- Android自定义圆形View实现小球跟随手指移动效果(详细介绍)
总会颠沛流离
一.需求功能手指在屏幕上滑动,红色的小球始终跟随手指移动。实现的思路:1)自定义View,在onDraw中画圆作为小球;2)重写自定义View的onTouchEvent方法,记录触屏坐标,用新的坐标重新绘制小球;3)在布局中引用自定义View布局,运行程序,实现跟随手指移动效果。关键技术点自定义View应用、触摸事件处理、canvas绘图、Paint应用。实现步骤1.新建一个工程,命名为BallV
- Android 自定义 View 分类
Kepler_II
自定义View分类继承View重写onDraw方法。实现一些不规则效果。需要自己支持wrap_content,padding也需自己处理。继承ViewGroup派生特殊的Layout。实现自定义布局。需要合适的处理ViewGroup的测量和布局这两个过程,并同时处理子元素的测量和布局过程。继承特定的View(如TextView)。用于扩展。不需要自己支持wrap_content,padding等。
- 【Android】自定义View / ViewGroup
小黄才不管那么多
Androidandroidkotlin
1.自定义View1.1简介我们自定义View的目的是为了针对我们的工程需要,完成一些内置View不能实现或者实现起来很麻烦的功能。其中我们需要复写onMeasure(),onLayout()以及onDraw()。接下来我们将通过自定义View实现类似于微信头像的效果。首先我们需要继承View或者View的子类并完成构造函数。比如我们在这里自定义一个CustomImageView://主构造函数第
- VC GDI双缓冲绘图
当当小螳螂
VC绘图双缓冲
VCGDI双缓冲绘图VCGDI双缓冲绘图创建内存DC和内存图片,缺一不可最好是封装一下内存绘制绘制效果关键是不闪烁PS重绘机制VCGDI双缓冲绘图双缓冲绘图,知道这个知识点,每次用的时候还得踩一遍坑,真是服,总结记录一下,下次抄~创建内存DC和内存图片,缺一不可创建的内存DC需要绘制到内存图片上,绘制完成以后再拷贝到内存DC,所以两者缺一不可。voidCImageView::OnDraw(CDC*
- Android中UI的绘制原理
ChristZc
前言根据Android事件分发机制一文中我们初步了解了Activity的UI视图结构,分别是ActivityPhoneViewDecorViewViewGroupview这些。我们也都知道View的主要工作流程是依靠三大方法:onMeasure、onLayout、onDraw。其中measure确定View的测量宽高,layout根据测量的宽高确定View在其父View中的四个顶点的位置,而dra
- Android画布Canvas裁剪区域clipRect,Kotlin
zhangphil
Androidkotlinandroidkotlin
Android画布Canvas裁剪区域clipRect,Kotlin只需要把clipRect放在Android系统的super.onDraw之前,就只绘制“剪切”出来的区域。意图很简单,只绘制中心区域宽高为800,600的那一小块:classMyImageView:AppCompatImageView{privatevarmSrcBmp:Bitmap?=nullprivatevalmSizeF=S
- Canvas
yezi1989
1、对象创建&获取//方法1//利用空构造方法直接创建对象Canvascanvas=newCanvas();//方法2//通过传入装载画布Bitmap对象创建Canvas对象//CBitmap上存储所有绘制在Canvas的信息Canvascanvas=newCanvas(bitmap)//方法3//通过重写View.onDraw()创建Canvas对象//在该方法里可以获得这个View对应的Can
- 自定义View
ZoranLee
最基本的三个方法onMeasure()onLayout()onDraw()View在Activity中显示出来,要经历测量、布局和绘制三个步骤,分别对应三个动作:measure、layout和draw。测量:onMeasure()决定View的大小;布局:onLayout()决定View在ViewGroup中的位置;绘制:onDraw()决定绘制这个view自定义控件分类自定义View:只需要重写
- 安卓仿苹果音量调节_android自定义view仿照MIUI中音量控制效果
weixin_39772352
安卓仿苹果音量调节
先看效果图:这就是miui中的音量效果图,实现思路是自定义视图,绘制圆环,然后设置进度显示。核心代码在onDraw中实现如下:@OverrideprotectedvoidonDraw(Canvascanvas){floatcx=getMeasuredWidth()/2;floatcy=getMeasuredHeight()/2;r1=cx-w1/2;r2=cx-w1/2-w2/2;r3=cx-w1
- Win32 GetDeviceCaps 函数学习
bcbobo21cn
VC++GetDeviceCaps
GetDeviceCaps函数检索指定设备的设备特定信息。其第二个参数取不同的值,返回不同结果;voidCdevcapView::OnDraw(CDC*pDC){CdevcapDoc*pDoc=GetDocument();ASSERT_VALID(pDoc);if(!pDoc)return;//TODO:在此处为本机数据添加绘制代码CStringstr1;intret;ret=GetDeviceC
- 【Android】自定义View onDraw()方法会调用两次
新镜
android前端
问题自定义了View后,在构造函数中设置画笔颜色,发现它没起效,但是在onDraw()里设置颜色就会起效,出问题的代码如下:publicRoundSeekbarView(Contextcontext,@NullableAttributeSetattrs){super(context,attrs);//布局引用调用的是两个参数的构造函数paint=newPaint(Paint.ANTI_ALIAS_
- 自定义View之Canvas使用
stone_zhu
自定义View的绘制流程一般都是这样:提前创建好Paint对象,重写onDraw(),把绘制代码卸载ondraw()里面,大致如下:Paintpaint=newPaint();@OverrideprotectedvoidonDraw(Canvascanvas){super.onDraw(canvas);//绘制一个圆canvas.drawCircle(300,300,200,paint);}这里主
- view -draw过程
刘佳阔
1.view中包含的绘制元素.view背景,任何view都有背景,可以是图片.色值或者drawable资源视图本身内容.在ondraw中绘制渐变边框,本质是一个shader对象滚动条,紧紧显示滚动的状态,任何的view都有滚动条.2.设置思路2.png和之前的layout,measure过程都是类似的.draw方法不建议子视图重写.首先是mView的draw函数被调用,一般来说mView就是窗户的
- 关于canvas那些事儿
most_xiaoya
实现自定义控件,无非分成这么几步:Ⅰ、在OnMeasure()方法中,测量自定义控件的大小,使自定义控件能够自适应布局各种各样的需求。Ⅱ、在OnDraw()方法中,利用哼哈二将(Canvas与Paint)来绘制要显示的内容。Ⅲ、在OnLayout()方法中来确定控件显示位置。Ⅳ、在OnTouchEvent()方法处理控件的触摸事件。今天我们主要了解OnDraw()方法。onDraw()方法绘制的关
- Android 画一个闹钟
新镜
android
结果图先上结果图(下面的代码是没有数字左下角的点的,这个点就是为了提醒文字的(x,y)是它的左下角)画闹钟其实就是自定义一个View,重写它的onDraw()我创建了publicclassClockViewextendsView重写onDraw()方法如下:须知:画布的(0,0)在左上角。画外面的大圆圈就不说了,这个圈可画可不画。其中x,y是圆心protectedvoidonDraw(Canvas
- 自定义View时的一些疑惑
兔斯基第2号
自定义View时的一些疑惑。1.onSizeChanged()何时被调用见名知意,当大小发生变化时被调用。继承View和继承现有控件都是下面的顺序,但是控件的大小是生成之后就固定的,不会再次改变。onMeasure()→onSizeChanged()→onLayout()→onMeasure()→onLayout()→onDraw()
- C++ 释放指针
bcbobo21cn
VC++c++开发语言deletedelete[]
在C++中,释放指针通常使用delete或delete[]操作符;如果指针指向的是单个对象,可以使用delete操作符进行释放;在释放完内存后,最好将指针置为nullptr,以避免出现悬空指针(danglingpointer)问题;voidCShifangView::OnDraw(CDC*pDC){CShifangDoc*pDoc=GetDocument();ASSERT_VALID(pDoc);
- 【MFC】计算机图形学实验1:熟悉开发环境及工具
guts350
计算机图形学实验/作业c++
安装MFC开发组件:安装MFC开发组件注意:本实验创建MFC文件时应用程序类型设置成单个文档,图形绘制一般在CView派生类OnDraw消息函数中调用相关函数实现,Windows通过CDC类及成员函数实现对基本图形的绘制、文本及图像的显示。基本图形包括点、直线、多义线、矩形、圆、椭圆等;文本包括相关字体属性的设置及文本的绘制;图像包括图像的缩放以及显示。MFC学习(可以查阅各种函数用法):官方文档
- [自定义View] Android自定义View中关于onDraw方法执行两次的解决办法
胖虎哥er
Andoid
this.postInvalidate();//更新视图这是调用View本身的刷新方法,看方法名的话是在主线程进行刷新,这本来是挺方便的一件事,但也就是这个方法,使得onDraw方法走了两次。this.invalidate();//修改之后的代码当然了还要很多个原因,这只是其中一个,希望对你会有帮助。
- 春招笔记(三)安卓第一部分
松爱家的小秦
1.说说自己用过的自定义控件自定义View的步骤:自定义View的属性在View的构造方法中获得我们自定义View的步骤[3.重写onMeasure](不必须)重写onDraw2.Serializable和Parcelable的区别;什么是序列化——序列化,表示将一个对象转换成可存储或可传输的状态。序列化后的对象可以在网络上进行传输,也可以存储到本地。怎么通过序列化传输对象?Android中Int
- 02. 基于MFC读取并显示一幅BMP图像
richfu72
MFC图像缩放算法示例MFC数字图像处理mfcwindowsc++
本博文内容是博文基于MFC框架的图像缩放算法示例的一部分(返回目录)。上一篇博文01.基于MFC绘制一个彩色正方形介绍了如何基于VisualStudio的MFC框架搭建一个单文档的GUI程序,并在消息响应函数OnDraw()利用系统提供的绘图工具CDC*pDC绘制一个彩色正方形。本篇在此基础上介绍有关BMP格式图像的相关内容,编写C++函数读取并在屏幕上显示一个BMP图像,为后续介绍图像缩放算法打
- Android中高级开发工程师-面试记录-长期更新(二)
肖义熙
由于篇幅原因,接上面的一篇继续:Android中高级开发工程师-面试记录-长期更新JD一面2021-05-2620:30电话面试1、Kotlin和Java的运算符可以重载么?协程和线程的区别2、自定义View和自定义ViewGroup的区别3、onMeasure、onLayout、onDraw方法的先后顺序,有没有哪些方法可以触发执行,invalidate、layout、postinvalidat
- Android 自定义View之咖啡杯动画
Samlss
效果CoffeeViewCoffeeView大概思路自定义view,直接继承view复写onSizeChanged()方法,在此计算杯垫,杯子,烟雾效果的path在onDraw()方法中,描绘杯垫,杯子处理烟雾动画效果画杯子这里需要画两部分内容,第一部分是杯子,第二部分是杯耳(提手的地方)我们可以使用addRoundRect来描绘圆角矩形,并且可指定每个圆角的半径即圆角的程度/***Addaclo
- ztree设置禁用节点
3213213333332132
JavaScriptztreejsonsetDisabledNodeAjax
ztree设置禁用节点的时候注意,当使用ajax后台请求数据,必须要设置为同步获取数据,否者会获取不到节点对象,导致设置禁用没有效果。
$(function(){
showTree();
setDisabledNode();
});
- JVM patch by Taobao
bookjovi
javaHotSpot
在网上无意中看到淘宝提交的hotspot patch,共四个,有意思,记录一下。
7050685:jsdbproc64.sh has a typo in the package name
7058036:FieldsAllocationStyle=2 does not work in 32-bit VM
7060619:C1 should respect inline and
- 将session存储到数据库中
dcj3sjt126com
sqlPHPsession
CREATE TABLE sessions (
id CHAR(32) NOT NULL,
data TEXT,
last_accessed TIMESTAMP NOT NULL,
PRIMARY KEY (id)
);
<?php
/**
* Created by PhpStorm.
* User: michaeldu
* Date
- Vector
171815164
vector
public Vector<CartProduct> delCart(Vector<CartProduct> cart, String id) {
for (int i = 0; i < cart.size(); i++) {
if (cart.get(i).getId().equals(id)) {
cart.remove(i);
- 各连接池配置参数比较
g21121
连接池
排版真心费劲,大家凑合看下吧,见谅~
Druid
DBCP
C3P0
Proxool
数据库用户名称 Username Username User
数据库密码 Password Password Password
驱动名
- [简单]mybatis insert语句添加动态字段
53873039oycg
mybatis
mysql数据库,id自增,配置如下:
<insert id="saveTestTb" useGeneratedKeys="true" keyProperty="id"
parameterType=&
- struts2拦截器配置
云端月影
struts2拦截器
struts2拦截器interceptor的三种配置方法
方法1. 普通配置法
<struts>
<package name="struts2" extends="struts-default">
&
- IE中页面不居中,火狐谷歌等正常
aijuans
IE中页面不居中
问题是首页在火狐、谷歌、所有IE中正常显示,列表页的页面在火狐谷歌中正常,在IE6、7、8中都不中,觉得可能那个地方设置的让IE系列都不认识,仔细查看后发现,列表页中没写HTML模板部分没有添加DTD定义,就是<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3
- String,int,Integer,char 几个类型常见转换
antonyup_2006
htmlsql.net
如何将字串 String 转换成整数 int?
int i = Integer.valueOf(my_str).intValue();
int i=Integer.parseInt(str);
如何将字串 String 转换成Integer ?
Integer integer=Integer.valueOf(str);
如何将整数 int 转换成字串 String ?
1.
- PL/SQL的游标类型
百合不是茶
显示游标(静态游标)隐式游标游标的更新和删除%rowtyperef游标(动态游标)
游标是oracle中的一个结果集,用于存放查询的结果;
PL/SQL中游标的声明;
1,声明游标
2,打开游标(默认是关闭的);
3,提取数据
4,关闭游标
注意的要点:游标必须声明在declare中,使用open打开游标,fetch取游标中的数据,close关闭游标
隐式游标:主要是对DML数据的操作隐
- JUnit4中@AfterClass @BeforeClass @after @before的区别对比
bijian1013
JUnit4单元测试
一.基础知识
JUnit4使用Java5中的注解(annotation),以下是JUnit4常用的几个annotation: @Before:初始化方法 对于每一个测试方法都要执行一次(注意与BeforeClass区别,后者是对于所有方法执行一次)@After:释放资源 对于每一个测试方法都要执行一次(注意与AfterClass区别,后者是对于所有方法执行一次
- 精通Oracle10编程SQL(12)开发包
bijian1013
oracle数据库plsql
/*
*开发包
*包用于逻辑组合相关的PL/SQL类型(例如TABLE类型和RECORD类型)、PL/SQL项(例如游标和游标变量)和PL/SQL子程序(例如过程和函数)
*/
--包用于逻辑组合相关的PL/SQL类型、项和子程序,它由包规范和包体两部分组成
--建立包规范:包规范实际是包与应用程序之间的接口,它用于定义包的公用组件,包括常量、变量、游标、过程和函数等
--在包规
- 【EhCache二】ehcache.xml配置详解
bit1129
ehcache.xml
在ehcache官网上找了多次,终于找到ehcache.xml配置元素和属性的含义说明文档了,这个文档包含在ehcache.xml的注释中!
ehcache.xml : http://ehcache.org/ehcache.xml
ehcache.xsd : http://ehcache.org/ehcache.xsd
ehcache配置文件的根元素是ehcahe
ehcac
- java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderL
白糖_
javaeclipsespringtomcatWeb
今天学习spring+cxf的时候遇到一个问题:在web.xml中配置了spring的上下文监听器:
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
随后启动
- angular.element
boyitech
AngularJSAngularJS APIangular.element
angular.element
描述: 包裹着一部分DOM element或者是HTML字符串,把它作为一个jQuery元素来处理。(类似于jQuery的选择器啦) 如果jQuery被引入了,则angular.element就可以看作是jQuery选择器,选择的对象可以使用jQuery的函数;如果jQuery不可用,angular.e
- java-给定两个已排序序列,找出共同的元素。
bylijinnan
java
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class CommonItemInTwoSortedArray {
/**
* 题目:给定两个已排序序列,找出共同的元素。
* 1.定义两个指针分别指向序列的开始。
* 如果指向的两个元素
- sftp 异常,有遇到的吗?求解
Chen.H
javajcraftauthjschjschexception
com.jcraft.jsch.JSchException: Auth cancel
at com.jcraft.jsch.Session.connect(Session.java:460)
at com.jcraft.jsch.Session.connect(Session.java:154)
at cn.vivame.util.ftp.SftpServerAccess.connec
- [生物智能与人工智能]神经元中的电化学结构代表什么?
comsci
人工智能
我这里做一个大胆的猜想,生物神经网络中的神经元中包含着一些化学和类似电路的结构,这些结构通常用来扮演类似我们在拓扑分析系统中的节点嵌入方程一样,使得我们的神经网络产生智能判断的能力,而这些嵌入到节点中的方程同时也扮演着"经验"的角色....
我们可以尝试一下...在某些神经
- 通过LAC和CID获取经纬度信息
dai_lm
laccid
方法1:
用浏览器打开http://www.minigps.net/cellsearch.html,然后输入lac和cid信息(mcc和mnc可以填0),如果数据正确就可以获得相应的经纬度
方法2:
发送HTTP请求到http://www.open-electronics.org/celltrack/cell.php?hex=0&lac=<lac>&cid=&
- JAVA的困难分析
datamachine
java
前段时间转了一篇SQL的文章(http://datamachine.iteye.com/blog/1971896),文章不复杂,但思想深刻,就顺便思考了一下java的不足,当砖头丢出来,希望引点和田玉。
-----------------------------------------------------------------------------------------
- 小学5年级英语单词背诵第二课
dcj3sjt126com
englishword
money 钱
paper 纸
speak 讲,说
tell 告诉
remember 记得,想起
knock 敲,击,打
question 问题
number 数字,号码
learn 学会,学习
street 街道
carry 搬运,携带
send 发送,邮寄,发射
must 必须
light 灯,光线,轻的
front
- linux下面没有tree命令
dcj3sjt126com
linux
centos p安装
yum -y install tree
mac os安装
brew install tree
首先来看tree的用法
tree 中文解释:tree
功能说明:以树状图列出目录的内容。
语 法:tree [-aACdDfFgilnNpqstux][-I <范本样式>][-P <范本样式
- Map迭代方式,Map迭代,Map循环
蕃薯耀
Map循环Map迭代Map迭代方式
Map迭代方式,Map迭代,Map循环
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
蕃薯耀 2015年
- Spring Cache注解+Redis
hanqunfeng
spring
Spring3.1 Cache注解
依赖jar包:
<!-- redis -->
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-redis</artifactId>
- Guava中针对集合的 filter和过滤功能
jackyrong
filter
在guava库中,自带了过滤器(filter)的功能,可以用来对collection 进行过滤,先看例子:
@Test
public void whenFilterWithIterables_thenFiltered() {
List<String> names = Lists.newArrayList("John"
- 学习编程那点事
lampcy
编程androidPHPhtml5
一年前的夏天,我还在纠结要不要改行,要不要去学php?能学到真本事吗?改行能成功吗?太多的问题,我终于不顾一切,下定决心,辞去了工作,来到传说中的帝都。老师给的乘车方式还算有效,很顺利的就到了学校,赶巧了,正好学校搬到了新校区。先安顿了下来,过了个轻松的周末,第一次到帝都,逛逛吧!
接下来的周一,是我噩梦的开始,学习内容对我这个零基础的人来说,除了勉强完成老师布置的作业外,我已经没有时间和精力去
- 架构师之流处理---------bytebuffer的mark,limit和flip
nannan408
ByteBuffer
1.前言。
如题,limit其实就是可以读取的字节长度的意思,flip是清空的意思,mark是标记的意思 。
2.例子.
例子代码:
String str = "helloWorld";
ByteBuffer buff = ByteBuffer.wrap(str.getBytes());
Sy
- org.apache.el.parser.ParseException: Encountered " ":" ": "" at line 1, column 1
Everyday都不同
$转义el表达式
最近在做Highcharts的过程中,在写js时,出现了以下异常:
严重: Servlet.service() for servlet jsp threw exception
org.apache.el.parser.ParseException: Encountered " ":" ": "" at line 1,
- 用Java实现发送邮件到163
tntxia
java实现
/*
在java版经常看到有人问如何用javamail发送邮件?如何接收邮件?如何访问多个文件夹等。问题零散,而历史的回复早已经淹没在问题的海洋之中。
本人之前所做过一个java项目,其中包含有WebMail功能,当初为用java实现而对javamail摸索了一段时间,总算有点收获。看到论坛中的经常有此方面的问题,因此把我的一些经验帖出来,希望对大家有些帮助。
此篇仅介绍用
- 探索实体类存在的真正意义
java小叶檀
POJO
一. 实体类简述
实体类其实就是俗称的POJO,这种类一般不实现特殊框架下的接口,在程序中仅作为数据容器用来持久化存储数据用的
POJO(Plain Old Java Objects)简单的Java对象
它的一般格式就是
public class A{
private String id;
public Str