【JAVA零基础入门系列】Day5 Java中的运算符
【JAVA零基础入门系列】(已完结)导航目录
- Day1 开发环境搭建
- Day2 Java集成开发环境IDEA
- Day3 Java基本数据类型
- Day4 变量与常量
- Day5 Java中的运算符
- Day6 Java字符串
- Day7 Java输入与输出
- Day8 Java的控制流程
- Day9 Java中的那个大数值
- Day10 Java中的数组
- Day11 Java中的类和对象
- Day12 Java类的简单应用
- Day13 Java类的继承与多态
- Day14 Java对象的克隆
- Day15 对象的比较
运算符,顾名思义就是用于运算的符号,比如最简单的+-*/,这些运算符可以用来进行数学运算,举个最简单的栗子:
已知长方形的长为3cm,高为4cm,求长方形的面积。
好,我们先新建一个项目,命名为Rectangle。
然后右键src文件夹,新建一个package,命名为pers.frank.rectangle。
这里补充说明一下包的命名规则,相信很多人都知道,包命名的时候用去www域名反写,加上项目名称,但实际上,那一般是用于公司项目的命名方式,对于不同项目,有着不同的命名规则。
indi :个体项目,指个人发起,但非自己独自完成的项目,可公开或私有项目,copyright主要属于发起者。
包名为“indi.发起者名.项目名.模块名.……”。
pers :个人项目,指个人发起,独自完成,可分享的项目,copyright主要属于个人。
包名为“pers.个人名.项目名.模块名.……”。
priv :私有项目,指个人发起,独自完成,非公开的私人使用的项目,copyright属于个人。
包名为“priv.个人名.项目名.模块名.……”。
onem :与“indi”相同,推荐使用“indi”。
team :团队项目,指由团队发起,并由该团队开发的项目,copyright属于该团队所有。
包名为“team.团队名.项目名.模块名.……”。
com :公司项目,copyright由项目发起的公司所有。
包名为“com.公司名.项目名.模块名.……”。
package主要用于将完成不同功能的类分门别类,放在不同的目录(包)下,方便类的管理。我们这个项目中只需要用到一个类,所以不需要用到四级包名。前面教程说的有点快,包名设置成了HelloWorld,是不符合规则的,这里说明一下。(这是一个错误的演示,秘制尴尬。。。)
然后在package中新建一个class,右键选择即可,命名为Recrangle。
代码如下:
package pers.frank.rectangle; public class Rectangle {
public static void main(String[] args){
int length = 3;
int width = 4;
int area = (length + width) * 2;
System.out.println("Area:"+area);
}
}
因为长宽都是整数,所以用int类型即可。接下来,我们运行一下。
这样就得到了我们想要的结果。
这时候也许你就要问了,这个结果口算都能算的出来,为什么还要大费周章去写代码呢?我说了只是举一个最简单的栗子嘛,要是算长宽分别为1.234567和2.345678,你还能口算吗?你也许会说,按下计算器就好了。那如果是求十个矩形中面积最大的一个呢?如果是求斐波拉契数列的第1234项呢?你还能用计算机按出来吗?由此可见,问题越是复杂,越能体现出编程的优越性。当你还在苦逼的按着计算器的时候,我已经得出来结果,在召唤师峡谷遨游了。
也许你对于这段代码还有一些不理解的地方。别急,容我一句一句来解读。
第一行,package pers.frank.rectangle; 这里是说明一下当前这个类是属于这个包的,如果不写,也可以运行,但是这样的话,类就会被划分到默认的包中。而且带包名和不带包名时的编译方式是不一样的。具体的可以查看 http://blog.csdn.net/com_stu_zhang/article/details/25112591。
第二行,public class Rectangle,这是在声明一个类,public表示该类的访问权限为公开访问,class关键词表示这是一个类,Rectangle则是类名。后面花括号里的内容则是类的定义。
第三行,public static void main(String[] args),这是主入口函数的声明。每一个程序都要有一个入口函数,即第一个被执行的函数,编译器会先找到并加载包含入口函数的类,然后再加载其他相关的类,由于是第一个被执行的函数,在此之前没有类的实例化对象,所以需要用static修饰,小括号里为参数列表,String[]表示参数为一个字符串数组,args即为参数名,这里暂时不做详细介绍,现在不理解没关系,只需要知道入口函数长这样就行了。
第四五行即定义两个int型变量,length和width,并分别初始化。
第六行定义了一个int型变量area,并把表达式 (length + width) * 2 的值赋值给了它。
第七行即输出语句,输出的具体用法之后再详细介绍,这里只需要知道它可以这么用就好了。
这样,对我们的代码是不是又多了几分了解。
那除了这几个最基本的符号,还有哪些运算符呢?
1、自增、自减运算符。
在Java中,也像C++一样,有着自增自减运算符,效果就是让变量增加1,或者减少1,。直接看代码:
package pers.frank.test;
import java.lang.System; public class Test {
public static void main(String[] args){
int n = 10;
n++;
System.out.println(n);
n--;
n--;
System.out.println(n);
}
}
你会得到11跟9两个数字,这分别是n自增一次,然后自减两次的结果。怎么样,是不是很简单?别高兴的太早,来看看这段代码,你知道结果是多少吗?
package pers.frank.test;
import java.lang.System; public class Test {
public static void main(String[] args){
int n = 10;
int m = 10 * n++;
int i = m++ * --n;
int j = ++i + ++m - n--;
System.out.printf("n:%d, m:%d, i:%d, j:%d",n,m,i,j);
}
}
你看完之后也许心中会有万头草泥马在奔腾。别着急,其实也不难。自增符跟自减符放在变量前与变量后是不同的。有什么不同呢?如果放在变量之前,表示先自增/自减,然后再用这个值参与运算,如果是放在变量之后,则表示先计算表达式的值,之后再将变量自增/自减。
所以,m=10*n++;这一句运行时,n的值时10,先计算表达式后,m=100,之后n自增1,n=11;
至于后面几个运算,因为跟优先级有关,所以这里暂时不介绍,等后面说完优先级再做解释。
2.关系运算符和逻辑运算符
关系运算符包括:==、!=、>、<,分别是等于,不等于,大于和小于。这个我想不用过多介绍了吧,主要用于逻辑判断,在后面的控制流程中会更有详细的栗子。对于新人而言,需要注意的就是不要把赋值符=跟关系运算符==弄混淆了。逻辑运算符有,&&、||、! 分别叫做 与、或、非。或跟与都是双目运算符,也就是连接两个表达式,exp1 && exp2,只有当两个表达式的值都为真时,总表达式的值才为真,否则为假。比如:1>0 && 2<3 由于两个子表达式的结果都为真,所以总表达式的值也是真。而:10>9 && 9<8; 这里由于9<8不成立,即为假,所以总表达式的值为假。而对于或运算符,只需要两个表达式中,任意一个表达式成立,总表达式的值即为真。例如:10>11 || 1<2;由于后一个表达式为真,所以总表达式为真。对于否运算符,这是一个单目运算符,会将表达式的结果反转,真变成假,假变成真。
这里有一个表,大家一看应该就明白了。
如果实在没明白,那也没关系,后面的判断流程里会有代码帮助大家理解。
3.运算符级别
运算符是有优先级的,就像加减乘除也有着先乘除,后加减的先后顺序一样。这里有一张表,列举了这些运算符的优先级,优先级数值越小,表示越优先运算。
可能现在对于这个还没有多大概念,没关系,后面我们通过代码就能更好的体会了。
现在对之前那个WTF的表达式再做一个讲解。
i=m++ * --n;表达式从左到右运算,根据优先级,先计算自减运算,n的值变成了10,再计算乘法,得出i的值为100*10=1000再赋值给i;m再自增,值为101;
j = ++i + ++m - n--;同理,i自增得到1001,m自增得到102,计算:1001+102-10=1093;n再自减得到9;
这样,对于这个优先级也多了些了解吧,
4、枚举类型
最后顺便说说这个枚举类型吧,枚举类型用enum关键字进行定义,有时候变量的取值在一个有限的集合里,一般是我们自定义的一个集合,比如几个颜色的集合,当我们定义了一个枚举类型的时候,我们声明它里面有几个元素,在我们使用这个枚举的时候,我们只能够使用它有的元素,没有的元素我们是无法使用,系统就会报错。
比如:enum Color = {RED, GREEN, YELLOW}; Color myColor = Color.RED;
使用枚举有以下好处:
可减少由数字转置或键入错误引起的错误。
以后更改值很容易。
使代码更易读,这意味着代码中发生错误的概率降低。
确保向前兼容性。使用枚举可减少将来有人更改与成员名称对应的值时代码出错的概率。
其实要真细说的话,枚举也不简单,可以在枚举中自定义函数,可以实现接口,这些等以后在代码中遇到再做详细介绍。
至此,本次教程结束。欢迎大家继续关注下一篇教程。如果有发现任何错误,请及时联系我,我会及时更正修改,也希望大家多提提建议,多来交流。
【JAVA零基础入门系列】Day5 Java中的运算符的更多相关文章
- 【JAVA零基础入门系列】Day9 Java中的那个大数值
什么是大数值?用脚趾头想也知道,当然是"大"的数值(233).Java中有两个用于表示大数值的类,BigInteger和BigDecimal,那到底能表示多大的数值呢?理论上,可以 ...
- 【JAVA零基础入门系列】Day10 Java中的数组
什么是数组?顾名思义,就是数据的组合,把一些相同类型的数放到一组里去. 那为什么要用数组呢?比如需要统计全班同学的成绩的时候,如果给班上50个同学的成绩信息都命名一个变量进行存储,显然不方便,而且在做 ...
- 【JAVA零基础入门系列】Day11 Java中的类和对象
今天要说的是Java中两个非常重要的概念--类和对象. 什么是类,什么又是对象呢?类是对特定集合的概括描述,比如,人,这个类,外观特征上,有名字,有年龄,能说话,能吃饭等等,这是我们作为人类的相同特征 ...
- 【JAVA零基础入门系列】Day2 Java集成开发环境IDEA
开发环境搭建好之后,还需要一个集成开发环境也就是IDE来进行编程.这里推荐的IDE是IDEA,那个老掉牙的Eclipse还是先放一边吧,(手动滑稽). IDEA的下载地址:http://www.jet ...
- 【JAVA零基础入门系列】Day4 变量与常量
这一篇主要讲解Java中的变量,什么是变量,变量的作用以及如何声明,使用变量. 那么什么是变量?对于初学者而言,可以将变量理解为盒子,这些盒子可以用来存放数据,不同类型的数据需要放在对应类型的盒子里. ...
- 【JAVA零基础入门系列】Day6 Java字符串
字符串,是我们最常用的类型,每个用双引号来表示的串都是一个字符串.Java中的字符串是一个预定义的类,跟C++ 一样叫String,而不是Char数组.至于什么叫做类,暂时不做过多介绍,在之后的篇章中 ...
- 【JAVA零基础入门系列】Day8 Java的控制流程
什么是控制流程?简单来说就是控制程序运行逻辑的,因为程序一般而言不会直接一步运行到底,而是需要加上一些判断,一些循环等等.举个栗子,就好比你准备出门买个苹果,把这个过程当成程序的话,可能需要先判断一下 ...
- 【JAVA零基础入门系列】Day12 Java类的简单应用
俗话说的好,实践出真知,所以除了理论知识掌握扎实以外,更重要的是要多加操练,这样才能掌握核心科技. 今天我们就用刚学会的类来实践一下,目标便是完成上一篇中的剁手任务. 我们的商品类已经准备好了,代码重 ...
- 【JAVA零基础入门系列】Day13 Java类的继承与多态
继承是类的一个很重要的特性,什么?你连继承都不知道?你是想气死爸爸好继承爸爸的遗产吗?(滑稽) 开个玩笑,这里的继承跟我们现实生活的中继承还是有很大区别的,一个类可以继承另一个类,继承的内容包括属性跟 ...
随机推荐
- QT creator编程C++第一步,说“Hello world!”
这个学期选了计算机学院的<数字图像处理>,正好和我的图像识别项目有所关联,老师说不能用MATLAB来做,这让我一个没学过C++的孩纸欲哭无泪. 只好求助计算机学院的大佬,自学C++. 大佬 ...
- Json作为配置文件注意事项
错误描述 在一次开发中,使用了JSON数据作为配置文件,但反序列化时总是出错,开始还以为是转义字符的问题,因为存了一个绝对路径(D:\xx\xx.json),后来测试发现竟然发现是类嵌套的问题. 解决 ...
- 移动端iOS阻止橡皮筋效果
一.遇到的问题 移动端开发中,iOS的微信浏览器也好.Safari也好在浏览网页的时候会出现橡皮筋效果.就是当页面拉到尽头的时候还能再继续拉动,露出浏览器的底色,松手会回弹回去. 微信浏览器: Saf ...
- 从async await 报错Unexpected identifier 谈谈对上下文的理解
原文首发地址: 先简单介绍下async await: async/await是ES6推出的异步处理方案,目的也很明确:更好的实现异步编程. 详细见阮大神 ES6入门 现在说说实践中遇到的问题:使用 ...
- [js高手之路]Node.js模板引擎教程-jade速学与实战1
环境准备: 全局安装jade: npm install jade -g 初始化项目package.json: npm init --yes 安装完成之后,可以使用 jade --help 查看jade ...
- 新CCIE笔记之'口口相传'路由协议
//由于思科所有命令行中没有尖括号"<>"这样的关键字,所以本文中出现命令行中的尖括号中的内容均为注释提示信息,代表此处应该填入那一类数据. 请容许我将RIP和EIGR ...
- 探究JVM和GC
1.Java堆中各代分布: 图1:Java堆中各代分布 Young:主要是用来存放新生的对象. Old:主要存放应用程序中生命周期长的内存对象. Permanent:是指内存的永久保存区域,主要存放C ...
- JS中的事件&对象
一.JS中的事件 (一)JS中的事件分类 1.鼠标事件 click/dblclick/onmouseover/onmouseout 2.HTML事件 onload/onscroll/onsubmit/ ...
- 201521123114 《Java程序设计》第8周学习总结
1. 本章学习总结 2. 书面作业 Q1. List中指定元素的删除(题目4-1) 1.1 实验总结 使用iterator迭代器的remove()函数来移除元素,能够从最后一个元素来移除,可以避免从第 ...
- 201521123036 《Java程序设计》第12周学习总结
本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容. 书面作业 将Student对象(属性:int id, String name,int age,double grad ...