常量:程序中固定不变化的值。
常量分类:
字面值常量:就是指一个写死的/直接写出来的值;比如:整数常量1,2,3,小数常量3.14,布尔常量false,true等。.
定义的final变量。
变量的定义和基本使用
变量的定义:
表示存储空间,可用来存放某一类型的常量值,没有固定值,并可以重复使用,也可以用来存储某种类型的未知数据。
变量的特点:
① 占据着内存中的某一块存储区域;
② 该区域有自己的名称(变量名)和类型(数据类型);
③ 可以被重复使用;
④ 该区域的数据可以在同一类型范围内不断变化;
变量的定义:
先定义变量,再赋值:
数据类型 变量名;
变量名 = 值;
或在声明时同时赋值:
数据类型 变量名 = 初始化值;
注:格式是固定的,记住格式,以不变应万变。
不推荐:同时定义多个变量.
变量的分类:
根据变量定义在类中的位置不同,故把变量分成两大类:
1):成员变量:直接定义在类里的变量,又称为全局变量或字段。
2):局部变量:变量除了成员变量之外,其他就是局部变量。根据定义的位置不同有3种表现形式:方法形参,方法内变量,代码块变量。
变量作用域(作用范围:在哪一个范围之内可以使用):
指变量的存在范围,只有在这个范围内,程序代码才能访问它。当一个变量被定义时,它的作用域就确定了:
作用域是定义开始到定义所在的花括号结束;
变量使用规则:
1.变量必须先声明,并且初始化后才能使用;
2.声明变量必须有数据类型
3.同一作用域内变量不能重复定义
Java表达式
表达式(expression):是由数字、运算符、数字分组符号(括号)、变量等以能求得结果的有意义排列的组合。
用运算符号连接的变量/常量可称为表达式。那么也就是说表达式是由常量、变量、运算符、括号组成能求得值的有意义结果的语句。
如:
a
a + b
3.14 + a
(x + y) * z + 100
表达式中操作数进行运算得到的最终结果就是表达式的结果。
表达式的运算顺序(大多和数学一样,但是有运算符操作优先级)
数据类型和分类
Java数据类型,总得来说,分成两种:
① 基本数据类型,又称为原生数据类型;
② 引用数据类型,又称为对象数据类型;
8大基本数据类型:
数值类型:
整数: byte,short,int,long
小数: float,double
字符类型:符号char
布尔类型:对/错boolean
ASCII字符代码表
引用数据类型String
Java引用类型: 类/接口/数组;
最常用的的引用类型:String类.(字符串)
什么是字符串:
除了8种基本数据类型,其他所有类型都是引用数据类型,包括类、接口、数组。引用数据类型默认初始值都是null。
String是一个类,表示字符串,所谓字符串,就是一串字符,也就是N个字符连接在一起(N可以表示0或多个)。
字符串都得使用 "" 括起来的,连接字符串使用 “+”符号。
任何数据类型和String相连接(+),结果都是新的字符串.
数据过大和溢出
当要表示的数据超出数据类型的临界范围时,称为溢出。溢出情况发生时程序并没有做数据范围检查处理,此时会出现数据紊乱情况。
int类型的范围:[-2147483648,2147483647]
基本数据类型转换
在8大基本数据类型中,boolean不属于数值类型,不参与转换.
基本数据类型转换:
方式1: 自动类型转换
方式2: 强制类型转换
自动类型转换,也称为“隐式类型转换:
当把小数据范围类型的数值或变量赋给另一个大数据范围类型变量,系统可以完成自动类型转型。
再次强调:boolean 类型是不可以转换为其他数据类型。
强制类型转换,也称为“显示类型转换":
当把大范围类型的数值或变量赋给另一个小范围类型变量时,此时系统不能自动完成转换,需要加上强制转换符,但这样的操作可能造成数据精度的降低或溢出,所以使用时要格外注意。
表达式类型的自动提升
当一个算术表达式中包含多个基本数据类型(boolean除外)的值时,整个算术表达式的数据类型将在数据运算时出现类型自动提升,其规则是:
所有的byte、short、char类型被自动提升到int类型;
整个表达式的最终结果类型被提升到表达式中类型最高的类型;
算数运算符
Arithmetic operators
用来处理四则运算的符号:
加号:在操作数值、字符、字符串时其结果是不同的,当两个字符相加得到的是ASCII码表值,当两个字符串相加时表示将两个字符串连接在一起,从而组成新的字符串。
除号:整数在使用除号操作时,得到的结果仍为整数(小数部分忽略),当整数除以0的时候,会引发算术异常。
正无穷大(Infinity):当一个正浮点类型数除以0时,或者正整数除以0.0时;
负无穷大(-Infinity):当一个负浮点类型数除以0时,或者负整数除以0.0时;
NaN(Not a Number):当0.0除以0.0时;
取模:模数的符号忽略不计,结果的正负取决于被模数.
注意:无穷大和NaN都属于double浮点类型,但是所有正无穷大都是相等的,所有负无穷大也是相等的,NaN永远不相等,也不等于自己.
自增: ++, 递增操作符,使变量值增加1,有前置和后置之分, 只能操作变量。
自减: -- ,递减操作符,使变量值减去1,有前置和后置之分, 只能操作变量。
自增和自减具体操作是一样的,仅仅是一个是加1,一个是减1而已,现在单讲++:
代码 result ++和 ++result,都将使result变量的值加1。
唯一的区别是:
前置(++result): 表示对result加1之后的结果进行运算,
后置(result++): 表示对变量加1之前的值(原始值)进行运算。
如果仅仅执行简单的递增操作(只写result++或++result),那么选用任意一个都可以。
赋值运算符
assigning operator
专门为变量指定值或重新指定值
注意Java支持同时给多个变量赋值,好比支持同时声明多个变量一样,但因影响代码可读性,故也不推荐。
加等于:x += 5; 相当于 x = x + 5,但还包括隐式类型转换。
public class Hello{
public static void main(String[] args){
int a, b, c; //不推荐
a = b = c = 5; //不推荐
short s = 5;
//s = s + 3;//编译出错,需要强转 s = (short)(s + 3);
s += 3;//编译OK,隐式类型转换
}
}
比较运算符
comparison operator
用于比较两个变量或常量之间的关系,比较运算符的结果是boolean类型,其操作格式为:
boolean result = 表达式A 比较运算符 表达式B;
==:等于,若比较的是两个操作数都是数值类型,即使他们的类型不同,只要值相同就返回true。
当然==也可以比较引用数据类型。
instanceof
三元运算符
需求:
现在给一个小数,需要求出其四舍五入之后的结果,怎么完成该功能?
double num = 4.56;
四舍五入:5
double num = 4.44;
四舍五入:4
思路:判断num的小数部分,和0.5的大写关系:
小数部分>=0.5: 5
小数部分 <0.5: 4
解决该问题:三元运算符.
boolean类型表达式 ? 值1 : 值2;
如果:boolean表达式结果为true,则结果为值1,否则结果为值2;
逻辑运算符
语法格式为:boolean result = 表达式A 逻辑运算符 表达式B;
&:表示并且,当操作数A和B都为true结果才为true,否则结果result 是false。
&&:和&结果相同,具有短路效果,如果左边操作数A是false,result 一定为false,且不运行B的运算。
|:表示或者,A和B都为false结果result为false,只要有A或B是true,结果就是true。
||:和|结果相同,具有短路效果,如果左边操作数A是true,result一定为true,且不运行B的运算。
^:判断A和B是否不同,不同则为true,相同则为false。
!:取反,!true结果是false,!fasle结果是true。
位运算符
遵循规则:0看做是false,1看做是true.
&:参与运算的两个数,若相应位数的值都为1,则该位结果值是1,否则是0。
|:参与运算的两个数相应位中只要有一个1,结果就是1。
^:参与运算的两个数相应位相同则结果为0,否则为1。
~ :表示把每个二进制位的“1”换成“0”,把“0”换成“1”。
移位操作:
<<:将操作数的二进制码整体左移指定位数,左移之后的空使用“0”来补充。
>>:将操作数的二进制码整体右移指定位数,右移之后的空使用“符号位”来补充:
若是正数使用“0”补充;
若是负数使用“1”补充;(操作负数:取反,求补,操作,取反,求补)
>>>:将操作数的二进制码整体右移指定位数,右移之后的空位使用“0”来补充。
运算符的操作优先级