为什么会想学习Java呢,一句话: 书到用时方恨少。 要不是现场现在需要用到Java,我估计就不会学习这个了,现在才深刻的体会到
:技不压身这句话的含义。学习的时候不要想到立竿见影的求效果,也许某一天她就用到了,而这个时候,也许你就比别人的路更宽广了。
所以不要纠结这个东西有没有用了,学吧,骚年(本来是少年的,结果出现了这个词)..........,
上两次说了一点Java的入门的东西,到这个程度,我们是否想要干点别的事情呢?因此我们需要来认识一下Java中结构化程序设计的部分:
流程控制;以及数据的操作结构:运算符。
【Java 赋值运算符】
为什么要说这个运算符呢? 因为太简单了,简单到必须说。赋值是什么意思呢? 我们通过实例来说明:
/* This program test the oprator */ public class OprTest { public static void main(String[] args) { //asign value int IntTest; System.out.print("The value of IntTest is:"+IntTest); } }
上面的程序执行结果是:
抛出异常了,我们可以看到,编译的过程报错,为什么呢? 这个各位童鞋们可以自己想一下,就不多说了。
下面我们对代码进行一下修改:
/* This program test the oprator */ public class OprTest { public static void main(String[] args) { //asign value int IntTest; IntTest=100; //初始化变量值 System.out.print("The value of IntTest is:"+IntTest); } }
执行结果是:
我们看到这个时候程序已经成功执行。为什么要在这里说这个问题呢? 因为我们在C语言中,有些时候不给变量赋值也能编译通过(没有启用ALL Alarm模式),而且运行过程中
有时候也正常,而在Java中,如果变量没有进行初始化赋值,那么就不能编译通过。同时我们也看到,我没有在定义变量的时候给变量赋初值,而是再起语句初始化变量,这个地方是与
C语言的叫法不一致的,需要注意。
赋值运行符,还有一些复合的用法,在下面我们会介绍。
【Java 四则运算】
知道数数后,我们接受的教育应当就是四则运算了,加、减、乘、除;一切简单而自然,但是在计算机的世界里面,简单却不自然了。我们通过实例来认识一下四则运算:
/* This program test the oprator */ public class OprTest { public static void main(String[] args) { //asign value int IntTest; IntTest=100; //初始化变量值 System.out.println("The value of IntTest is:"+IntTest); //add int Sum; Sum=IntTest + 20121221; System.out.println("Sum=IntTest+20121221="+Sum); //sub int Dif; Dif=Sum - 300; System.out.println("Dif="+Dif); //Multiplication long Mul; Mul=Sum * Dif; System.out.println("Sum*Dif="+Mul); //overflow, but can execute,so you need pay atention to this double DoubleMul; DoubleMul=1.0*Sum* Dif; //here why we need to muliply with 1.0 ?? System.out.println("1.0*Sum*Dif="+DoubleMul); //Division int Div; Div=Dif/789; System.out.println("Dif/789="+Div); //Normally 20121021/20121321 = 0.999985;how can the result be ? double DoubleDiv; DoubleDiv=1.0*Dif/789; System.out.println("1.0*Dif/789="+DoubleDiv); //IS the same wiht the statement Div=Dif/Sum; ?? //Mod int Mod; Mod=Sum % 2; //Is this equal to Sum / 2 ?? System.out.println("Sum % 2 ="+Mod); System.out.println("Sum / 2 ="+Sum/2); //Multiply plus and sub int PostPlus; int PrePlus; int PostSub; int PreSub; System.out.println("Mod="+Mod+";"+" Dif="+Dif); PostPlus=Mod++; System.out.println("Mod++ is:"+PostPlus); PostPlus=++PostPlus; System.out.println("++Mod++ is:"+PostPlus); PostSub=Dif--; System.out.println("Dif-- is:"+PostSub); PreSub=--PostSub; System.out.println("--Dif-- is:"+PreSub); } }
上面程序运行的结果是:
四则运算需要说明的是: 在进行计算的时候,会进行类型转换。对于 / 运算符,如果操作数都是整型,则结果是整型;如果操作数有浮点类型,则结果
是浮点类型。对于 ++ 和 —— 运算符,则和C语言一样。
【Java关系运算符】
Java提供了功能丰富的关系运算符: == 、 != 、 <、<=、>、>=
这些运算符的效果和C语言中是一样的;这里就不进行具体的介绍了,但是有一点需要说明,在判断两个浮点数相等的时候,不能简单的用==符号进行比较。
我们就做一个简答的测试。
//Equal to float fNum1=1.0F; float fNum2=0.99999999F; if(fNum1!=fNum2) System.out.println("1.0 != 0.9999999");
这段程序的输出是什么呢?输出结果如下所示:
这里可以看到,什么也没有输出,那么就表示Java在判断if条件的时候,将 fNum1 判断为与fNum2相等了。
【Java 逻辑运算符】
在Java中也提供了逻辑运算符: 与、或、非;并且沿用了C语言的符号,与用 && 表示; 或用 || 表示;非用 ! 表示。
具体的与或非逻辑我们就举例了。
值得一提的是: 与或非逻辑运算过程中,有一个“短路”的求值过程,当可以判断出结果的时候就不会计算后面的数值了。这个有时候会影响参数的传递过程。
具体的实例我们等到讨论方法的时候再举例。
Java中还提供了一个三元运算符;那就是 “:?”。 这个运算符的计算规则与C语言一样,我们就不再举例了。
【Java 位运算符】
Java提供了与C语言类似的位运算符,这些位运算符应用非常广泛,通常用于“屏蔽技术”(怎么感觉像PLC中的屏蔽,不过两者还是有区别的)。位运算符有:
按位与、按位或、按位异或、按位非。
具体的实例我们就不举例了,有一个简单的应用就是求byte类型的溢出值: 300&0XFF; 具体实例见:http://www.cnblogs.com/volcanol/archive/2012/12/18/2824169.html
这里还有一个有趣的事情就是: & 和 | 可以对boolean的进行求值,其计算规则和用法和逻辑运算符一样, & 对应 &&,而| 对应||; 我们可以看一个实例:
//Bit oprator boolean bTest1=true; boolean bTest2=false; if(bTest1 & bTest2) System.out.println("True & True is ture"); if(bTest1 | bTest2) System.out.println("True | True is ture");
执行结果如下所示:
【Java 移位运算符】
在Java中也C语言一样,也提供了移位运算符,同样移位运算符适合于整型数的计算。Java提供了: 右移>>、左移<<两种运算符。其具体的用法和C语言的移位
运算符一致。
我们知道在C语言中右移运算符>>,最高位的补齐规则由编译器决定,标准并没有规定,为了消除这个歧义,Java特别设计一个右移运算符 ">>>" ; 并且规定
>> 运算符是符号位填充,即>> 不会改变数值的正负; 而>>> 则规定用0补齐最高位。
【Java中的常量】
我们知道在C语言中提供了define机制来定义符号常量,或者说符号字面值;而在C++中则另外提供了const这一机制补充“符号字面值”的使用,那么在Java中有没有
提供一种类似的机制呢?
很显然,提供这样一种机制,将有利于编程人员的程序编写和阅读;在Java中也提供了这样的机制。那如何实现呢?
在Java中我们可以通过 final 关键字来定义符号常量。其定义语法为:
final datatype VaribleName=常量字面值;
下面我们通过一个实例来说明这个问题:
我们在看下一个例子:
类中可以定义类常量,就像上面的定义,但是这样定义是默认为私有的呢?还是public的呢? 这里留下一个疑问,等到以后我们学到修饰符的时候再来解答。
下面是这次测试代码:
/* This program test the oprator */ public class OprTest { public static void main(String[] args) { /********* //asign value int IntTest; IntTest=100; //初始化变量值 System.out.println("The value of IntTest is:"+IntTest); //add int Sum; Sum=IntTest + 20121221; System.out.println("Sum=IntTest+20121221="+Sum); //sub int Dif; Dif=Sum - 300; System.out.println("Dif="+Dif); //Multiplication long Mul; Mul=Sum * Dif; System.out.println("Sum*Dif="+Mul); //overflow, but can execute,so you need pay atention to this double DoubleMul; DoubleMul=1.0*Sum* Dif; //here why we need to muliply with 1.0 ?? System.out.println("1.0*Sum*Dif="+DoubleMul); //Division int Div; Div=Dif/789; System.out.println("Dif/789="+Div); //Normally 20121021/20121321 = 0.999985;how can the result be ? double DoubleDiv; DoubleDiv=1.0*Dif/789; System.out.println("1.0*Dif/789="+DoubleDiv); //IS the same wiht the statement Div=Dif/Sum; ?? //Mod int Mod; Mod=Sum % 2; //Is this equal to Sum / 2 ?? System.out.println("Sum % 2 ="+Mod); System.out.println("Sum / 2 ="+Sum/2); //Multiply plus and sub int PostPlus; int PrePlus; int PostSub; int PreSub; System.out.println("Mod="+Mod+";"+" Dif="+Dif); PostPlus=Mod++; System.out.println("Mod++ is:"+PostPlus); PostPlus=++PostPlus; System.out.println("++Mod++ is:"+PostPlus); PostSub=Dif--; System.out.println("Dif-- is:"+PostSub); PreSub=--PostSub; System.out.println("--Dif-- is:"+PreSub); *********/ /******************** //Equal to float fNum1=1.0F; float fNum2=0.99999999F; if(fNum1!=fNum2) System.out.println("1.0 != 0.9999999"); ***********************/ /****************** //Bit oprator boolean bTest1=true; boolean bTest2=false; if(bTest1 & bTest2) System.out.println("True & True is ture"); if(bTest1 | bTest2) System.out.println("True | True is ture"); ************/ final int finalIntTest=100; System.out.println("finalIntTest is:"+finalIntTest); } }
发现Java是一种类C的语言,很多的机制和规则与C语言非常相似,但是需要细心的区别两者存在的区别。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· C++代码改造为UTF-8编码问题的总结
· DeepSeek 解答了困扰我五年的技术问题
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库