我的编程空间,编程开发者的网络收藏夹
学习永远不晚

【Gson】【3】实例演习

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

【Gson】【3】实例演习

【本文范围】:

本文并非JSON知识讲解资料,亦非GSON知识讲解资料,而是通过实例让开发人员了解通过Gson如何使Java对象和Json对象进行相互转换。


【JSON参考资料】:

Json快速入门:http://www.w3school.com.cn/json/index.asp

Json官网:http://www.json.org/


【GSON参考资料】:

Gson官网:http://code.google.com/p/google-gson/


一、JSON基础知识:

1、Json概念:

Json全称JavaScript object notation(Javascript对象表示法),是轻量级的文本数据交换格式,它独立于语言和平台,用来描述数据对象,具有自我描述性、容易理解等特性。


2、举例:

{“TeamName":"hr", "NewProject":true, "Leader":"wang", "Employee":[{"name":"li", "BelongTo":"train"}, {"name":"kpi", "BelongTo":"Security"}, {"name":"liu", "BelonTo":"service"}]}

这个Json对象描述了hr项目组。项目组名称为hr,是一个新项目,Leader是wang,有三个员工,分别为负责培训的li,负责kpi的zheng和负责服务的liu


3、Json语法

数据以健值对形式描述(如:"TeamName":"hr");

数据以逗号分隔;

花括号保存对象(如{"Name":"li", "BelongTo":"train"});

方括号保存数组(如"csn":[20,21,22,23]);


4、Json值:

数字(整数或浮点数);

字符串(在双引号中);

逻辑值(true或false);

数组(在方括号中);

对象(在花括号中);

null


二、实例演习:

实例1:在查询告警窗口中对告警流水号为2012的记录做“清除”操作

【思路】:

假如清除操作的命令码为41,那么向服务端请求的JSON对象应该为{“cmdCode”:41, “csn”:2012}

【演示代码】:

1、定义AlarmClearCondition.java

public class AlarmClearCondition

{

private int cmdCode = 0;

private int csn = 0;

public void setCmdCode(int cmdCode)

{

thisNaNdCode = cmdCode;

}

public void setCsn(int csn)

{

this.csn= csn;

}

}


2、使用Gson把AlarmClearCondition对象转换为Json对象

AlarmClearConditioncondition = new AlarmClearCondition();

condition.setCmdCode(41);

condition.setCsn(2012);

Gson gson = newGson();

String jsonCond= gson.toJson(condition);



实例2:在查询告警窗口中对告警流水号为2012和2013的记录做“清除”操作

【思路】:

与实例1不同,这里的CSN有两个,意味着告警流水号CSN必须是一个数组,那么向服务端请求的JSON对象应该为{“cmdCode”:41, “csn”:[2012, 2013]}

【演示代码】:

1、改造AlarmClearCondition.java定义,使csn变成一个集合csnList

public class AlarmClearCondition

{

private int cmdCode = 0;

private List<Integer> csnList = newArrayList<Integer>();

public void setCmdCode(int cmdCode)

{

thisNaNdCode = cmdCode;

}

public void setCsn(int csn)

{

csnList.add(csn);

}

}


2、把AlarmClearCondition对象转换为Json对象

AlarmClearConditioncondition = new AlarmClearCondition();

condition.setCmdCode(41);

condition.setCsn(2012);

condition.setCsn(2013);

Gson gson = newGson();

String jsonCond= gson.toJson(condition);



实例3:若实例2中对流水号2012和2013的两条记录“清除”成功后,服务端返回的结果为{“errorCode”:0, “errorMsg”:“Clear alarmssuccessful!”, “clearedCsn”:[2012, 2013]},则客户端如何把这个结果解析为Java对象?

【思路】:

1、直接用硬编码进行解析未尝不可,但代码不够优雅。

2、与生成Json对象一样定义一个Java类,剩余的转换工作由Gson协助完成。见演示代码。

【演示代码】:

1、定义AlarmClearResult类

public class AlarmClearResult

{

private int errorCode = 0;

privateString errorMsg = null;

private List<Integer> clearedCsn = new ArrayList<Integer>();


public int getErrorCode()

{

return errorCode;

}


public String getErrorMsg()

{

return errorMsg;

}


public List<Integer> getClearedCsn()

{

return clearedCsn;

}

}


2、把Json对象转换为AlarmClearResult对象

AlarmClearResult result =gson.fromJson(jsonObject, AlarmClearResult.class);



实例4:当前屏最后一条告警记录流水号为44531611,查询下一屏告警记录时与服务端约定请求条件为{“FieldName”:”logId”,”Operator”:”<”, “value”:44531611},使用Gson把Java对象转换为此Json对象,但要求Java的属性字段定义为是“驼峰”风格。

【思路】:

1、不考虑属性字段定义“驼峰”风格问题,那只需要把FileName、Operator和value作为Java类的属性即可,见演示代码1。

2、为使Java属性字段定义和显示为不同的值,Gson提供了@SerializedName注释,见演示代码2.

【演示代码1】:

1、定义EndlessQuery类

public class EndlessQuery

{

private String FieldName = null;

private String Operator = null;

private int value = 0;


public void setFieldName(String filedName)

{

this.FieldName = fieldName;

}


public void setOperator(String operator)

{

this.Operator = operator;

}


public void setValue(int value)

{

this.value = value;

}

}


2、把AlarmClearResult转换为JSON对象

EndlessQueryqueryCond = new EndlessQuery();

queryCond.setFiledName(“logId”);

queryCond.setOperator(“<”);

queryCond.setValue(44531611);

Gson gson = newGson();

System.out.println(gson.toJson(queryCond));


【演示代码2】:

只修改EndlessQuery类的FileName和Operator两个字段即可,其余保持不变,如下:

public class EndlessQuery

{

@SerializedName(“FieldName”)

private String fieldName= null;

@SerializedName(“Operator”)

private String operator= null;

private int value = 0;


public void setFieldName(String filedName)

{

this.fieldName = fieldName;

}


public void setOperator(String operator)

{

this.operator = operator;

}

public void setValue(int value)

{

this.value = value;

}

}



实例5:列举一个稍微真实的场景,告警监控TOPN是指客户端向任意一个应用服务下发请求后,应用服务从各个数据服务中读取最新上报的TOPN条告警记录,然后再把获取的告警记录按条件进行重排序取TOPN条给客户端。

假如监控TOPN的命令码为22,每次监控40条最新的告警记录,在获取这40条最新的告警记录时使用的排序条件为“按网元发生时间”和“告警流水号”进行降序排序,其JSON对象为{"CmdCode":22, "Limit":40, "VersionID":0, "SortCond":[{"FieldName":"occurNeTime", "SortOrder":"desc","Priority":1},{"FieldName":"logId", "SortOrder":"desc", "Priority":6}]},则客户端如何生成这个JSON对象?

【思路】:

1、直接拼凑字符串代码(不是本文的意图)。

2、定义属性字段为CmdCode、Limit、VersionID和SortCond的类,但SortCond与其它字段不同之处在于SortCond是一个集合,这个集合中对象类型必须能够描述出按“网元发生时间”和“流水号”进行排序。

【演示代码】:

1、定义排序SortConditionBean对象

public class SortConditionBean

{

@SerializedName("FieldName")

private String fieldName = null;

@SerializedName("SortOrder")

private String order = null;

@SerializedName("Priority")

private int priority = 0;


public void setFieldName(String fieldName)

{

this.fieldName = fieldName;

}

public void setOrder(String order)

{

this.order = order;

}

public void setPriority(int priority)

{

this.priority = priority;

}

}


2、定义监控TOPN对象MonitorTopnCond类

public class MonitorTopnCond

{

@SerializedName("CmdCode")

private int cmdCode = 0;

@SerializedName("VersionID")

private int versionID = 0;

@SerializedName("Limit")

private int limit = 0;

@SerializedName("SortCond")

private List<SortCondtionBean> sortCond = new ArrayList<SortConditionBean>():


public void setCmdCode(int cmdCode)

{

this.cmdCode = cmdCode;

}

public void setVersionID(int versionID)

{

this.versionID = versionID;

}

public void setLimit(int limit)

{

this.limit = limit;

}

public void setSortCond(SortConditionBean sortItem)

{

this.sortCond.add(sortItem);

}

}


3、测试方法:

SortConditionBean occuTime = new SortConditionBean();

occuTime.setFieldName("occurNeTime");

occuTime.setOrder("desc");

occuTime.setPriority(1);


SortConditionBean logID = new SortConditionBean();

logID.setFieldName("logId");

logID.setOrder("desc");

logID.setPriority(6);


MonitorTopnCond topnCond = new MonitorTopnCond();

topnCond.setCmdCode(22);

topnCond.setLimit(40);

topnCond.setVersionID(0);

topnCond.setSortCond(occuTime);

topnCond.setSortCond(logID);


Gson gson = new Gson();

System.out.println(gson.toJson(topnCond));



实例6:实例5中向应用服务下发监控TopN请求之后,应用服务从各个数据分区读取数据后,再重排序取了Top40条告警记录返回客户端,结果如下(为简单起见这里把40条告警记录改成1条):

{

"ErrorMsg": "0",

"LastVersionId": 0,

"ResultCode":0,

"TotalNum":24006,

"records":

[

{

"Basic":["链路断连","BTS","NE=10009","NE=10009","Location=Test1, m_strPara=1","",-1,19],

"Paras":[0,0,0,0,0,19,0,0,0,0],

"intExt":[[0,0,0,0,0,0,0,0,0,0],[134, 13528,0,0,4,199,199]],

"strExt":[["","",""], ["","","","","127.0.0,1","",""]]

}

]

}

客户端如何解析这个Json对象呢?

【思路】:

仔细观察返回结果可发现,它由ErrorMsg、LastVersionId、ResultCode、TotalNum、records构成,所以可以定义一个Java类使其包含这五个属性字段。重要的一点records不同于ErrorMsg等属性字段,它又由有Basic、Paras、intExt和strExt构成。

【演示代码】:

1、定义告警记录对象AlarmRecord,对应record集合中的一个元素。

public class AlarmRecord

{

@SerializedName("Basic")

private List<Object> basicField = null;

@SerializedName("Paras")

private List<Integer> parasField = null;

@SerializedName("intExt")

private int[][] intExtField = null;

@SerializedName("strExt")

private String[][] strExtField = null;


public List<Object> getBasicField()

{

return basicField;

}


public List<Integer> getParasField()

{

return parasField;

}


public int[][] getIntExtField()

{

return intExtField;

}


public String[][] getStrExtField()

{

return strExtField;

}

}


2、定义结果响应对象AlarmResponseRecord

public class AlarmResponseRecord

{

@SerializedName("ResultCode")

private int errorCode = 0;

@SerializedName("ErrorMsg")

private String errorMessage = null;

@SerializedName("LastVersionId")

private int versionID = 0;

@SerializedName("TotalNum")

private int totalNum = 0;

private List<ALarmRecord> records = null;


public int getErrorCode()

{

return errorCode;

}

public String getErrorMessage()

{

return errorMessage;

}


public int getVersionID()

{

return versionID;

}


public int getTotalNum()

{

return totalNum;

}


public List<AlarmRecord> getRecords()

{

return records;

}

}


3、测试方法:

String result = "{'ErrorMsg':'ccq', 'LastVersionId':0, 'ResultCode':0, 'TotalNum':24006, 'records':[{'Basic':[0,'通讯系统',3,0,0,0,'链路断连'], 'Paras':[0,0,0,19,0,0], 'intExt':[[1,2,3,4,5],[6,7,8,9,11]], 'strExt':[['a','b','c','d'],['','','']]}]}";

Gson gson = new Gson();

AlarmResponseRecord almRecords = gson.fromJson(result, AlarmResponseRecord .class);

System.out.println(almRecords.getRecords());



实例7:告警监控TOPN请求的JSON对象为:{"CmdCode":22,"Limit":40,"VersionID":0,"SortCond":[{"FieldName":"occurNeTime", "SortOrder":"desc", "Priority":1},{"FieldName":"logId", "SortOrder":"desc","Priority":6}]}

告警无尽列表查询请求的JSON对象为{"CmdCode":21,"Limit":41,"SortCond":[{"FieldName":"occurNeTime", "SortOrder":"desc", "Priority":1},{"FieldName":"logId", "SortOrder":"desc","Priority":6}],"EndlessTableCond":[{"FieldName":"occurNeTime", "Operator":"=","value":[1355899366]},{"FieldName":"logId", "Operator":"<","value":[33394632]}]}

仔细观察会发现这两个请求的JSON对象结构非常类似,如何使用一个Java对象生成这两个Json对象呢?

【思路】:

很容易想到的是把相同的数据作为Java的属性字段(如CmdCode、Limit、SortCond),不同的数据作为子类属性字段(如EndlessTableCond、VersionID),使用Java的继承机制可实现。

【演示代码】:

1、定义排序对象SortConditionBean

public class SortConditionBean

{

@SerializedName("FieldName")

private String fieldName = null;

@SerializedName("SortOrder")

private String order = null;

@SerializedName("Priority")

private int priority = 0;


public void setFieldName(String fieldName)

{

this.fieldName = fieldName;

}

public void setOrder(String order)

{

this.order = order;

}

public void setPriority(int priority)

{

this.priority = priority;

}

}


2、定义无尽列表查询对象EndlessConditionBean

public class EndlessConditionBean

{

private String FieldName = null;

private String Operator = null;

private int value = 0;

public void setFieldName(String fieldName)

{

this.FieldName = fieldName;

}

public void setOperator(String operator)

{

this.Operator = operator;

}

public void setValue(int value)

{

this.value = value;

}

}


3、定义公共父类AlarmConditionBean对象

public class AlarmConditionBean

{

@SerializedName("CmdCode")

private int cmdCode = 0;

@SerializedName("Limit")

private int limit = 0;

@SerializedName("SortCond")

private List<SortConditionBean> sortCond = new ArrayList<SortConditionBean>();


public void setCmdCode(int cmdCode)

{

thisNaNdCode = cmdCode;

}

public void setLimit(int limit)

{

this.limit = limit;

}

public void setSortCond(SortConditionBean sortItem)

{

this.sortCond.add(sortItem);

}

}


5、定义监控AlarmMonitorBean类

public class AlarmMonitorBean extends AlarmConditionBean

{

@SerializedName("VersionID")

private int versionID = 0;

public void setVersionID(int versionID)

{

this.versionID = versionID;

}

}


6、定义查询AlarmQueryBean类

public class AlarmQueryBean extends AlarmConditionBean

{

@SerializedName("EndlessTableCond")

private List<EndlessConditionBean> queryCond = new ArrayList<EndlessConditionBean>();

public void setEndlessCond(EndlessConditionBean endlessItem)

{

queryCond.add(endlessItem);

}

}


7、测试代码

测试告警监控TOPN

SortConditionBean occuTimeSortItem = new SortConditionBean();

occuTimeSortItem.setFieldName("occurNeTime");

occuTimeSortItem.setOrder("desc");

occuTimeSortItem.setPriority(1);


SortConditionBean logIDSortItem = new SortConditionBean();

logIDSortItem.setFieldName("logId");

logIDSortItem.setOrder("desc");

logIDSortItem.setPriority(6);


AlarmMonitorBean monitorCond = new AlarmMonitorBean();

monitorCond.setCmdCode(22);

monitorCond.setLimit(40);

monitorCond.setVersionID(0);

monitorCond.sortSortCond(occuTimeSortItem);

monitorCond.sortSortCond(logIDSortItem);


Gson gson = new Gson();

System.out.println(gson.toJson(monitorCond));


测试告警无尽列表查询:

SortConditionBean occuTimeSortItem = new SortConditionBean();

occuTimeSortItem.setFieldName("occurNeTime");

occuTimeSortItem.setOrder("desc");

occuTimeSortItem.setPriority(1);


SortConditionBean logIDSortItem = new SortConditionBean();

logIDSortItem.setFieldName("logId");

logIDSortItem.setOrder("desc");

logIDSortItem.setPriority(6);


EndlessConditionBean occuTimeEndlessItem = new EndlessConditionBean();

occuTimeEndlessItem.setFieldName("occurNeTime");

occuTimeEndlessItem.setOperator("=");

occuTimeEndlessItem.setValue(1355899366);


EndlessConditionBean logIDEndlessItem = new EndlessConditionBean();

logIDEndlessItem.setFieldName("logId");

logIDEndlessItem.setOperator("<");

logIDEndlessItem.setValue(33394632);


AlarmQueryBean queryCond = new AlarmQueryBean();

queryCond.setCmdCode(21);

queryCond.setLimit(41);

queryCond.setSortCond(occuTimeSortItem);

queryCond.setSortCond(logIDSortItem);

queryCond.setEndlessCond(occuTimeEndlessItem);

queryCond.setEndlessCond(logIDEndlessItem);


Gson gson = new Gson();

System.out.println(gson.toJson(queryCond));

【备注】:

关于此例还有一种解决方式,即使用Gson的@Since注释,但这样会影响代码的易读性,不建议使用,有兴趣的读者可以了解一下Gson的API



实例8:服务端返回给客户端的数据只是一个数组,如[96301,0,1,"链路断连","BTS","NE=1009"],此时客户端如何解析?

【思路】:

JSON对象在定义数据时明确指出数据是一个键值对,但并不表明Gson不能解析,因为这也是一个Json对象,这样做的目的主要是为了减少通讯传输量给带宽带来的拥挤。假如各字段的含义如下:

9630101链路断连BTSNE=1009
告警流水号清除状态确认状态告警类型告警源类型告警源

【演示代码】:

1、定义告警记录AlarmRecord类

final class AlarmSimpleRecord

{

private int logID = 0;

private int clearStatus = 0;

private int confirmStatus = 0;

private String alarmType = null;

private String neType = null;

private String neFDN = null;


public int getLogID()

{

return logID;

}

public void setLogID(int logID)

{

this.logID = logID;

}


public int getClearStatus()

{

return clearStatus;

}

public void setClearStatus(int clearStatus)

{

this.clearStatus = clearStatus;

}


public int getConfirmStatus()

{

return confirmStatus;

}

public void setConfirmStatus(int confirmStatus)

{

this.confirmStatus = confirmStatus;

}


public String getAlarmType()

{

return alarmType;

}

public void setAlarmType(String alarmType)

{

this.alarmType = alarmType;

}


public String getNeType()

{

return neType;

}

public void setNeType(String neType)

{

this.neType = neType;

}


public String getNeFDN()

{

return neFDN;

}

public void setNeFDN(String neFDN)

{

this.neFDN = neFDN;

}

}


2、解析演示

public class AlarmRecord

{

private static final int LOG_ID = 0;

private static final int CLEAR_STATUS = 1;

private static final int CONFIRM_STATUS = 2;

private static final int ALARM_TYPE = 3;

private static final int NE_TYPE = 4;

private static final int NE_FDN = 5;


public static void main(String[] args)

{

String result = "[96031, 0 ,1, '链路断连','BTS', 'NE=10009']";

Gson gson = new Gson();

JsonElement resultElement = gson.fromJson(result, JsonElement.class);

if(resultElement.isJsonNull())

{

// do nothing.

return;

}


AlarmSimpleRecord record = new AlarmSimpleRecord();

JsonArray elementArray = resultElement.getAsJsonArray();

record.setLogID(elementArray.get(LOG_ID).getAsInt());

record.setClearStatus(elementArray.get(CLEAR_STATUS).getAsInt());

record.setConfirmStatus(elementArray.get(CONFRIM_STATUS).getAsInt());

record.setAlarmType(elementArray.get(ALARM_TYPE).getAsString());

record.setNeType(elementArray.get(NE_TYPE).getAsString());

record.setNeFDN(elementArray.get(NE_FDN).getAsString());


System.out.println(record);

}

}

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

【Gson】【3】实例演习

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

【Gson】【3】实例演习

【本文范围】:本文并非JSON知识讲解资料,亦非GSON知识讲解资料,而是通过实例让开发人员了解通过Gson如何使Java对象和Json对象进行相互转换。【JSON参考资料】:Json快速入门:http://www.w3school.com
2023-01-31

我是一个*** 演习 [3]

演习 [3]   时间在沉默中不断的流逝,我们小组的工作也在一步一步的向前发展。老张利用linux 2.4内核的一个溢出漏洞,已经能够让对方停止服务。他试图进一步利用这个漏洞,试图让对方执行自己的代码,但是这个工作是非常艰苦的。从老张黑着的
2023-01-31

Python 的练习实例3

编程学习网:Python 练习实例3,一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
Python 的练习实例3
2024-04-23

CSS3学习3----举例

1.浏览器支持的四种状态:①:link → 未访问的 链接 。②:visited → 已访问的 链接 。③:hover → 鼠标正停在上面的 链接 。④:active → 正在点击的链接  eg> 
2023-01-31

Java中利用gson解析Json实例教程

前言本文主要跟大家介绍了关于Java用gson解析Json的相关内容,分享出来供大家参考学习,需要的朋友们下面来一起看看吧。json数据{ "resultcode": "200", "reason": "successed!", "resu
2023-05-31

【17】Python100例基础练习(3

例11:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?程序分析:兔子的规律1,1,2,3,5,8,13,21... ...方法1:使用defde
2023-01-31

学习python:实例3.终端版拼图游戏

效果:输入数字进行移动,当数字排列成为【1,2,3,4,5,6,7,8】游戏胜利!代码:# 拼图from sys import exitfrom os import systemfrom random import shuffle# 游戏胜
2023-01-31

小五实习笔记3

LJ回齐齐哈尔了,所以工作室就只剩下我一个人住。因为不太熟悉环境,第一夜竟然很晚才睡着,原因不是想LJ了,而是蚊子惹得祸。记得从未在意过蚊子,之前不过一个文字咬几个包包吃饱了就飞走了或者撑死了,而如今确实长江后浪推前浪一波还未平息一波又来侵
2023-01-31

数组切片的实例演示

数组切片功能详解:获取部分元素:array[start:end]截取指定范围的元素(包含start,不包含end)。创建新数组:切片可创建包含指定索引元素的新数组。修改数组:切片可覆盖并修改指定范围内的元素。删除元素:使用del切片可从数组
数组切片的实例演示
2024-04-30

Android Fragment使用之实例演示

Fragment是Android honeycomb 3.0新增的概念,在如何使用Android Fragment中做了关于Fragment的详细介绍。本文则主要是通过实例的方式让大家更直观的了解Fragment的使用方
2022-06-06

RabbitMQ学习及实践3--Spr

根据学习的RabbitMQ知识配了一个SpringMVC的实现。这是一个完整的工程,view的部分使用freeMarker,持久化操作是通过mybatis实现。    整个工程的目录结构如下:src下的相关包的解释:    controll
2023-01-31

实例演示:用PHP实现游戏需求

抱歉,我无法提供程序代码的实际编写,但我可以提供一些思路和指导。你可以根据以下步骤尝试用PHP实现游戏需求:确定游戏需求:首先,明确游戏的基本要求,包括游戏类型、游戏规则、玩家目标等。设计游戏逻辑:根据游戏需求,设计游戏逻辑,包括玩家角色
实例演示:用PHP实现游戏需求
2024-03-09

Spring从@Aspect到Advisor使用演示实例

这篇文章主要介绍了Spring从@Aspect到Advisor使用演示实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
2023-02-08

PHP值传递解析与实例演示

标题:PHP值传递解析与实例演示PHP是一种广泛应用的服务器端脚本语言,具有强大的功能和灵活的特性。在PHP中,变量的传递方式分为值传递和引用传递两种,本文将重点讨论PHP中的值传递,通过剖析和实例演示来帮助读者更好地理解和应用这一特性。
PHP值传递解析与实例演示
2024-03-08

将近3个月的实习总结

这篇文章应该写的更早写,但是一直忙学校的论文,其实这个也是借口,如果想要做什么事,怎么都会有时间的。     ......     将近3个多月的实习,发现收获最多的一天就是最后一天,准备离开的时候和鹏叔在外面聊天,然后 突然感觉自己的实习
2023-01-31

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录