`

Java学习系列(三)Java运算符、控制语句、数组及其在内存中的运行分析

 
阅读更多

梭罗说:“从圆到圆心有多少条半径,人们的生活方式也应该有这么多。” 同样学习也是如此,学习的渠道有很多种,但能找适合比较适合自己的却不是一件简单的事。比如说有的人喜欢看书,从书中学到一些自己感兴趣的东西。当然有时也迫于无赖,必须得学一些比较枯燥的理论,这就造成了有些人喜欢读书,有些人对读书比较厌倦,大学里的这种现象比较常见。记得中国达人秀的舞台有一个叫卓君的街舞达人,他是通过上网看视频自学的街舞。街舞跳的那么好,悟性是一方面,但坚持练习肯定必不可少。虽然本人没有学过街舞,但是我觉得编程和街舞还是有相似之处的,每一个动作好比是是一个方法或者称函数,那么连贯起来的一整套动作便是我们的程序。尽管动作有好有坏,但只要不断去练习改进(调试、调优),相信你离成功不远了。

运算符

算术运算符:+,-,*,/,%,++,-- 。对于++ -- 只能操作一个变量。++既可以放在变量前(先把变量+1,然后再拿来用),也可以放在变量后(先拿来用,再把变量+1),--也是也是如此。这是比较容易出错的地方。

赋值运算符:【= += -= *= /= %= >>= <<= &= |= ^=】赋值运算符优先级别低于其他的运算符,所以对该运算符往往最后读取。注意等号左边只能是变量,赋值运算符可以与所有的双目运算符结合,就形成了扩展后的赋值运算符。需要注意的:a+=b相当于a=(a的类型)(a+b);//隐式类型转换。注意+=之间不能有空格。赋值表达式的值就是等号右边被赋的值。

位运算符(基于2进制码运算):&、|、~、^(按位异或)、<<、>>、>>>。注意运算时要用补码去算,最终结果要转换为原码。>>:当右移除不尽的情况下,实际得到的整数总是比实际运算的结果值略小。>>>:无符号右移,在左边补0。^:同0异1。

关系运算符:等于运算符【==】、不等于运算符【!=】 、关系运算符【< > <= >= 】

按运算所需变量的个数来分:运算所需变量为一个的运算符叫单目运算符,例如【!,~,()】;运算所需变量为两个的运算符叫做双目运算符;算所需变量为三个的运算符叫三目运算符:【?:】

逻辑运算符(操作数要求只能是boolean值):&&、&(不会短路)、||、|(不会短路)、!、^(只有当两个操作数不同时,才返回true)。【自加的陷进】:int c=1;c=c++;//a).先拿出c来值为1,b).c自加成2,c).把刚取出的1赋给c,c又变回1。

流程控制语句

流程控制语句一共有3种结构:1.顺序结构 如果没有流程控制,计算机总是从上到下,一次执行每一行。2.分支 满足某个条件时,才去执行代码。3, 循环 重复执行一段代码。

分支控制:if/switch 如果省略了花括号,if条件只控制到第一个分号前面。else本身就是条件(在if条件上取反)。建议:即使条件执行体只有一行代码,也保留花括号。当有多个else if语句块时,建议先处理范围小的条件。switch:当等于某个值时,才执行一段代码。每次写完case,在写其它代码之前立即写break; 循环控制:while/do..while/forwhile

do{

//do something...

}while(返回boolean值的表达式)

这个循环与while相比,把循环放前面,先执行一次循环体,如果条件为true,将执行下一次循环。while使用规则:如果省略了花括号,while条件只控制到第一个分号前面。注意只要是循环体,就永远跳到循环条件。

举例说明:

Java代码收藏代码
  1. <spanstyle="font-size:18px;">publicclassLoopTest
  2. {
  3. publicstaticvoidmain(String[]args)
  4. {
  5. inti=1;
  6. while(i++<5);
  7. {
  8. System.out.println("i="+i);
  9. }
  10. }
  11. }
  12. </span>

分析一下,看看结果是不是i=6。

for(初始化语句;返回boolean值得表达式;每次循环体执行完后执行的代码)
{

//do something...
}
初始化语句:可以省略;如果有“初始化语句”,则只有在循环开始之前,会执行一次“初始化语句”。返回boolean值得表达式:可以省略;如果省略,意味着它的值永远是true。每次循环体执行完后执行的代码:可以省略。如果有,将在每次循环体执行之后,开始下一次循环之前执行。【注意】只要两个分号中间的表达式返回true,程序将执行循环体。循环嵌套:把内存循环当成外层循环的一条语句即可。控制循环的关键词:break(完全结束一个循环本身)、continue(停止当前循环体的执行【忽略continue后面的语句】,开始下一次循环体)、return(结束整个方法)。【注意】break、continue后面可以跟一个标号。带标号的break用于结束标号所标识的循环。带标号的continue忽略标号所标识的循环后面的剩下语句。另外注意Java里面没有goto(当做保留字)。

for循环的执行机制如图


再举一例:

Java代码收藏代码
  1. <spanstyle="font-size:18px;">publicclassLoopTest
  2. {
  3. publicstaticvoidmain(String[]args)
  4. {
  5. for(inti=1;i<10;i+=2){
  6. System.out.println("i的值为:"+(i*=1.2));
  7. }
  8. }
  9. }</span>

思考一下:运行结果会是多少呢? 这里需要注意的是:这里有个隐式类型转换,原型为a*=b相当于a=(a的类型)(a*b);这样我想不难得出结果为:1、3、6、9。

还有一种foreach循环:如使用foreach循环对数组进行遍历
for(元素类型 变量名:数组|集合)
{
//此处即可通过“变量名”依次访问每个数组|集合中的元素。
}
/*注意:在foreach中对循环变量赋值并不会改变原数组(下面会讲到)元素值*/

数组

数组类型(引用类型)(说明:如int[] a 则变量a的数据类型为int[],注意是int[],而不是int)。数组里的每个元素,就相当于一个普通的变量。这里补充一下,引用类型的本质其实就是指针,只是Java对它做了一些封装和异常等检查。定义数组时,不能指定数组的长度。【数组的初始化】:数组变量只是一个引用,必须让它指向有效的内存之后才能使用。数组的初始化分为两种:1.静态初始化:int[] a = new int[]{1,2,3}//只指定数组的元素,让系统来决定数组的长度,推荐使用这种。还有一种写法:int[] a={1,2,3}; //直接指定数组元素。2,动态初始化:int[] a=new int[3];//只指定数组的长度,让系统来决定数组的元素值,注意如果数组元素是基本类型,那么所有数组元素的默认值都是0/0.0/false/u0000;如果数组元素是引用类型,那么所有数组元素的默认值都是null。

方法栈(所有在方法中声明的变量,都放在相应的方法栈中)

每个方法运行时,系统都会为之建立一个方法栈。栈内存是临时性的内存,方法结束时,方法栈会被立即释放,所以栈不适合存放长有效的数据。java中的所有的对象都放在"堆"内存中,每个JVM只有一个"堆"内存。java不允许直接操作堆内存,只能通过引用来访问,只要JVM不退出,堆内存一直存在。这里补充一下:JVM有一条后台进程:垃圾回收器,它会用一种机制记录 堆内存中“每个对象”是否有引用变量(指针)引用它。如果有,垃圾回收器就不会管它;如果没有,垃圾回收器就会在合适的时候去回收该对象所占的内存。注意:当数组对象的引用变量被销毁之后,数组并不一定会回收(它在堆内存),它不会随着数组变量被回收,数组变量只是一个引用,它只是暂时指向了某块堆内存的地址而已。再说一下二维数组:Java允许初始化数组时只初始化左边的维数(如:int[][] a = new int[5][];)。二维数组的元素(引用变量,必须要有指向)是一维数组。

举例说明:

Java代码收藏代码
  1. <spanstyle="font-size:18px;">publicclassBinaryArrayTest
  2. {
  3. publicstaticvoidmain(String[]args)
  4. {
  5. //定义二维数组a
  6. int[][]a;
  7. //动态初始化二维数组a
  8. a=newint[5][];
  9. //静态初始化一维数组a[1]
  10. a[1]=newint[]{1,2,3,4,5,6,7,8,9,10};
  11. for(inti=0;i<10;i++){
  12. System.out.print(a[1][i]+"\t");
  13. }
  14. }
  15. }</span>

运行结果如下:



结束语

今天内容比较多,也有很多我们平常做题时容易出错的地方,大家以后一定要注意一下。以上部分内容来源于网络。

明天开始正式开始学习Java面向对象中的三大特征:封装、继承、多态。

分享到:
评论

相关推荐

    神经网络与量子计算的交叉研究.pptx

    神经网络与量子计算的交叉研究.pptx

    非线性端口 MEMS 麦克风的 Simscape 模型.zip

    1.版本:matlab2014/2019a/2021a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

    用于超声成像和仿真的 MATLAB 工具箱.zip

    1.版本:matlab2014/2019a/2021a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

    HFI高频注入仿真—matlab.zip

    1.版本:matlab2014/2019a/2021a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

    北京工商大学上网登陆版源码.zip

    android 源码学习. 资料部分来源于合法的互联网渠道收集和整理,供大家学习参考与交流。本人不对所涉及的版权问题或内容负法律责任。如有侵权,请通知本人删除。感谢CSDN官方提供大家交流的平台

    攻击离开优化器 (ALO)matlab代码.zip

    1.版本:matlab2014/2019a/2021a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

    Ruby基于Ruby的MKS rebase脚本 Ruby语言基础

    【Ruby】基于Ruby的MKS rebase脚本 Ruby语言基础 将MKS网盘中其他工程路径下的工程文件批量rebase到目标工程路径。 【Ruby】基于Ruby的MKS rebase脚本 Ruby语言基础

    18.CSGO赛事管理系统的设计与实现-Springboot+ Mysql+Java+ B/S结构(可运行源码+数据库+设计文档

    18.CSGO赛事管理系统的设计与实现|Springboot+ Mysql+Java+ B/S结构(可运行源码(含数据库脚本)+开发文档+lw(高分毕设项目) 详细介绍链接:http://t.csdnimg.cn/CDBjW 内容概要: 全套项目源码+详尽文档,一站式解决您的学习与项目需求。 适用人群: 计算机、通信、人工智能、自动化等专业的学生、老师及从业者。 使用场景及目标: 无论是毕设、期末大作业还是课程设计,一键下载,轻松部署,助您轻松完成项目。 项目代码经过调试测试,确保直接运行,节省您的时间和精力。 其他说明: 项目整体具有较高的学习借鉴价值,基础能力强的可以在此基础上修改调整,以实现不同的功能。

    46.书籍学习平台的设计与实现-Springboot+ Mysql+Java+ B/S结构(可运行源码+数据库+设计文档)论坛

    46.书籍学习平台的设计与实现|Springboot+ Mysql+Java+ B/S结构(可运行源码+数据库+设计文档)论坛,公告,付费专区,免费专区,销售,会员办理,书籍分类 详细设计文档链接:http://t.csdnimg.cn/GSeDN 内容概要: 全套项目源码+详尽文档,一站式解决您的学习与项目需求。 适用人群: 计算机、通信、人工智能、自动化等专业的学生、老师及从业者。 使用场景及目标: 无论是毕设、期末大作业还是课程设计,一键下载,轻松部署,助您轻松完成项目。 项目代码经过调试测试,确保直接运行,节省您的时间和精力。 其他说明: 项目整体具有较高的学习借鉴价值,基础能力强的可以在此基础上修改调整,以实现不同的功能。

    基于OpenCV+Tensorflow的银行卡号识别源码+使用文档+全部资料(优秀项目).zip

    【资源说明】 基于OpenCVTensorflow的银行卡号识别源码+使用文档+全部资料(优秀项目).zip基于OpenCVTensorflow的银行卡号识别源码+使用文档+全部资料(优秀项目).zip基于OpenCVTensorflow的银行卡号识别源码+使用文档+全部资料(优秀项目).zip 【备注】 1、该项目是个人高分毕业设计项目源码,已获导师指导认可通过,答辩评审分达到95分 2、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 3、本项目适合计算机相关专业(如软件工程、计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,也可作为毕业设计、课程设计、作业、项目初期立项演示等,当然也适合小白学习进阶。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!

    AI快速生成原创音乐的平台.txt

    AI快速生成原创音乐的平台.txt

    决斗者算法是一种元启发式优化算法matlab代码.zip

    1.版本:matlab2014/2019a/2021a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

    xiuno模板知乎蓝魔改版源码附多个插件.zip

    xiuno模板知乎蓝魔改版源码附多个插件

    学习 C语言 编程语言 中的实敲代码仓库,提升自我的编程思维,编程能力 坚持下去.zip

    C语言诞生于美国的贝尔实验室,由丹尼斯·里奇(Dennis MacAlistair Ritchie)以肯尼斯·蓝·汤普森(Kenneth Lane Thompson)设计的B语言为基础发展而来,在它的主体设计完成后,汤普森和里奇用它完全重写了UNIX,且随着UNIX的发展,c语言也得到了不断的完善。为了利于C语言的全面推广,许多专家学者和硬件厂商联合组成了C语言标准委员会,并在之后的1989年,诞生了第一个完备的C标准,简称“C89”,也就是“ANSI C”,截至2020年,最新的C语言标准为2018年6月发布的“C18”。 [5] C语言之所以命名为C,是因为C语言源自Ken Thompson发明的B语言,而B语言则源自BCPL语言。 1967年,剑桥大学的Martin Richards对CPL语言进行了简化,于是产生了BCPL(Basic Combined Programming Language)语言。

    FS-S01059_STEP_01A.zip

    FS-S01059_STEP_01A.zip

    监听自身被卸载.zip

    android 源码学习. 资料部分来源于合法的互联网渠道收集和整理,供大家学习参考与交流。本人不对所涉及的版权问题或内容负法律责任。如有侵权,请通知本人删除。感谢CSDN官方提供大家交流的平台

    基于遗传算法的公交排班系统分析matlab代码.zip

    1.版本:matlab2014/2019a/2021a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

    基于深度强化学习的住宅区电动汽车充电策略

    基于深度强化学习的住宅区电动汽车充电策略是一种用于优化住宅区电动汽车充电行为的算法。面对日益增长的电动汽车数量和有限的充电资源,该算法结合了深度学习和强化学习方法,旨在实现住宅区电动汽车充电的智能调度和管理。

    第5章 s7200编程语言及指令系统.ppt

    第5章 s7200编程语言及指令系统.ppt

    基于遗传算法将电子卡车和电子三轮车路由到街道街区的客户matlab代码.zip

    1.版本:matlab2014/2019a/2021a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

Global site tag (gtag.js) - Google Analytics