常量
常量的定义及分类
- 定义:在程序执行过程中不发生变化的量。
- 分类:字面值常量和自定义常量
字面值常量的分类**
- 字符串常量:用双引号引起来的内容 eg:“Hello” “okok”等
- 整数常量:所有整数 eg: 1 2 123等
- 小数常量:所有小数 eg:1.1 2.2等
- 字符常量:用单引号引起来的单个字符 eg:‘a’ ‘ 0’等
- 布尔常量:只有true 和false
- 空常量:null
class Constant
{
public static void main(String[] args)
{
System.out.println("Hello World!")
System.out.println("你好,世界!");
System.out.println("321");
System.out.println("世界");
//以上四行代码为输出字符串常量
System.out.println('c');
System.out.println('y');//以上两行代码为输出字符常量
System.out.println(100);//输出整数常量
System.out.println(0.88);//输出小数常量
System.out.println(true);
System.out.println(false);//以上两行代码为输出布尔常量
//System.out.println(null);不可以输出空常量,会报错
}
}
变量(重点)
变量的定义
在程序执行过程中在某个范围内其值可以发生改变的量
实质就是内存中的一小块区域
定义变量的作用
用来不断的存放同一类型的常量,并可以重复使用。
变量的定义格式
数据类型 变量名 = 变量值
数据类型概述和分类
概述
数据类型的存在就是为了在为变量开辟区域时根据我们选择的数据类型来分配合适的内存空间。
数据类型的分类
- 基本数据类型
- 引用数据类型:数组 类 接口
基本数据类型的分类
三类八种
- 数值型:
整数型:
byte (字节型) 占用一个字节 取值范围:-128 ~ 127
short(短整型) 占用两个字节 取值范围:-2^15 ~ 2^15 - 1
int (整型) 占用四个字节 取值范围:-2^31 ~ 2^31 - 1
long (长整型) 占用八个字节 取值范围:-2^63 ~ 2^63 - 1
浮点型:
float(单精度浮点型) 占用四个字节 取值范围:-3.403*10^38
double(双精度浮点型)占用八个字节 取值范围:-1.79810^308 ~ 1.79810^308
-
字符型
char(字符型) 占用两个字节 取值范围:0 ~ 65535
- boolean(布尔型) 占用一个字节
整数默认是int类型的 , 浮点数默认是 double类型的
class Variable { public static void main(String[] args) { byte a=100; byte b=126; short c=600; int d=30000; long e=999999L;//long类型的变量后缀L float f=11.28F;//float类型的变量后缀F double f2=9.9; boolean flag=true; boolean flag2=false; char ch='i'; char ch2='好'; char ch3='1'; char ch4='6'; System.out.println(a); System.out.println(b); System.out.println(c); System.out.println(d); System.out.println(e); System.out.println(f); System.out.println(f2); System.out.println(flag); System.out.println(flag2); System.out.println(ch); System.out.println(ch2); System.out.println(ch3); System.out.println(ch4); } }
使用变量的注意事项
class AA{ public static void main(String[] args) { //1.在同一个作用域里面,不能定义同名变量;作用域:同一对大括号,所扩起来的范围 int a=20; a=100; //重新赋值 System.out.println(a); //2.变量必须赋值,才能使用 int b; b=20; System.out.println(b); //3.定义变量的其他语法 int f,f2; f=20; f2=30; System.out.println(f); System.out.println(f2); } }
数据类型转换
1.隐式转换
我们首先以一个错误的程序来引入:
class CD { public static void main(String[] args) { byte a=2; byte b=3; byte c=a+b; System.out.println(c); } }
以上代码看似没有语法错误,但是在编译时会报错“不兼容的类型: 从int转换到byte可能会有损失”
这就是数据类型的隐式转换
byte short char 类型的变量,在参与运算时,会自动提升为int类型,当有long float double 类型的数据参与运算时还会相应的提升为 long float double
所以我们将上面的代码修改成以下内容就可以正常运行
class CD { public static void main(String[] args) { byte a=2; byte b=3; int c=a+b; System.out.println(c); } }
总结
Java中的默认转换规则
(1): boolean类型不能转换为其他的数据类型
(2): byte,short,char—int—long—float—double
(3): byte,short,char之间不转换,他们参与运算首先转换为int类型2.强制类型转换
以上述代码为例,我们如果就是想要用byte类型输出运算的结果也是可以实现的。这就用到了强制类型转换。
class CD { public static void main(String[] args) { byte a=2; byte b=3; byte c=(byte)(a+b);//注意 System.out.println(c); } }
将程序修改为以上内容就可以实现
读程序我们可以得出:强制转换的格式就是
目标数据类型 变量名=(目标数据类型)(被转换的数据);强制转换的注意事项
我们尽量不要使用强制类型转换,因为这样可能会损失精度。
继续以上述程序为例:
class CD { public static void main(String[] args) { byte a=2; byte b=126; byte c=(byte)(a+b); System.out.println(c); } }
运行上述程序,得到的结果是“-128”,但我们计算2+126等于128
实质
强制类型转换的实质就是丢弃掉多余字节,保留目标类型的字节数,所以这样做有可能会造成精度损失。
补充
变量相加与常量相加的区别: 变量相加时可能会“触发”隐式转换。
常量优化机制,当多个常量相加,会先看结果是否在这个数据类型的范围内, 如果在就不报错,反之报错。
eg:面试题:看下面的程序是否有问题,如果有问题,请指出并说明理由。
byte b1 = 3;
byte b2 = 4;
byte b3 = b1 + b2;//两个byte类型进行运算,隐式转换为“int”,会报错。 byte b4 = 3 + 4;
字符和字符串参与运算
字符参与运算
class CD { public static void main(String[] args) { System.out.println('a'); System.out.println('a' + 1); } }
以上程序运行结果为:a
98
所以我们自然推出 a=97
这时我们会提出问题:为什么’a’会等于97呢?
因为字符类型在参与运算时,会用 ASCII 码表中字符的十进制值
ASCII码表中的数据很多,我们只需要记住最常用的三个值:‘0’ 48 ‘A’ 65 ‘a’ 97即可。
字符串参与运算
当有如下代码时,输出的结果是什么呢?
class CD { public static void main(String[] args) { System.out.println("hello" + 'a' + 1); System.out.println('a' + 1 + "hello"); } }
答案是:helloa1
98hello
原因是:+不仅有相加的作用,在有字符串参与运算时+起字符串连接符的作用。且当+号两端有任意一端是个字符串,+号就起拼接符的作用,将两端内容拼接起来形成一个新的字符串
算术运算符
定义
对常量和变量进行操作的符号
分类
算数运算符
赋值运算符
比较运算符
逻辑运算符
位运算符
三目运算符
算数运算符
包括 + , - , * , / , % , ++ , –
运算符的用法基本符合数学中的用法,但要注意整数相除只能得到整数,要想得到小数就要使用浮点数。
/获取的是除法操作的商,%获取的是除法操作的余数 %运算结果的符号,取决于参与运算是左边的符号
算数运算符 ++ 和 – 的用法
作用
自加自减
++:自加,对原有数据+1;
– :自减,对原有数据-1;
注意:这两个运算符放到操作数前后的区别
单独使用时:二者效果是一样的
参与运算时:
- 放在操作数的前面,先自增或者自减,然后再参与运算。
- 放在操作数的后面,先参与运算,再自增或者自减。
eg:
int a = 10; int b = 10; int c = 10; a = b++; c = --a; b = ++a; a = c--; a=9 b=10 c=8
int x = 4; int y = (x++) + (++x) + (x*10); x=6 , y=70
赋值运算符的基本用法
-
赋值运算符包括:=, +=,-=,*=,/=,%=
-
基本用法:以+=为例
int s=1;s = s+1;
int s=1;s+=1;两行代码所表达的意思相同
注意事项:
a:基本的赋值运算符:=把=右边的数据赋值给左边。
b:扩展的赋值运算符:+=,-=,*=,/=,%=+= 把左边和右边做加法,然后赋值给左边。
其余类推
c: 赋值运算符要求左边的数据必须是一个变量
PS short s=1;s = s+1;
short s=1;s+=1;看起来两行代码所表达的意思相同,但是实际操作时第一行代码会报错,因为这时候定义的short变量参与了运算,隐式转换为了int变量。
关系运算符
== ,!= , < , > , <= , >= , instanceof
关系运算符的输出类型永远是“boolean”类型
注意:不要将==写成=