-----------android培训、java培训、java学习型技术博客、期待与您交流!------------
一、常量
(一)常量概述:在程序执行的过程中其值不可以发生改变
(二)Java中常量分类:
1.字面值常量
2.自定义常量
(1)字面值常量的分类:
字符串常量:用双引号括起来的内容。例:"hello"
整数常量:所有整数。例:12,23
小数常量:所有小数。例:12.34,56.78
字符常量:用单引号括起来的内容。例:'a','A'
布尔常量:较为特有,只有true和false
空常量:null
(2)字面值常量输出的简单实现代码:
class ConstantDemo{
public static void main(String[] args){
//字符串
System.out.println("常量");
System.out.println("constant");
//整数
System.out.println("123");
//小数
System.out.println("1.23");
//字符
System.out.println(" ");
System.out.println("a");
System.out.println("B");
//布尔
System.out.println("true");
System.out.println("false");
}
}
运行结果如下:
(三)Java针对整数常量提供了4种表现形式:
1.二进制
2.八进制
3.十进制
4.十六进制
(1)进制概述
进制:就是进位制,是人们规定的一种进位方法。 对于任何一种进制--X进制,就表示某一位置上的数运算时是逢X进一位。二进制就是逢二进一,八进制是逢八进一,十进制是逢十进一,十六进制是逢十六进一。
(2)不同进制的数据组成
①二进制:由0,1组成。以0b开头
②八进制:由0,1,…7组成。以0开头
③十进制:由0,1,…9组成。整数默认是十进制的
④十六进制:由0,1,…9,a,b,c,d,e,f(大小写均可)。以0x开头
(3)进制的转换
①x进制转到10进制:结果=系数*基数^权值 之和
系数:数位上的那个值
基数:进制就是那个基数
权值:就是那个基数上次幂,从右向左,从0开始数.
举例:
二进制 0b100
基数为2
结果 = 1*2^2 + 0*2^1 + 0*2^0
= 4 + 0 + 0
= 4
八进制 0100
基数8
结果 = 1*8^2 + 0 + 0 = 64
十六进制 0x100
基数16
结果 = 1*16^2 + 0 + 0 = 256
②10进制转到x进制:除基数(x),直到商为0,余数自下而上反转
③十进制和二进制的快速转换:
8421码:每一位二值代码的1都是代表一个固定数值,把每一位的1代表的十进制数加起来,得到的结果就是它所代表的十进制数码。
举例:
1.1010100转成十进制
二进制:1 0 1 0 1 0 0
64 32 16 8 4 2 1
十进制:结果=64*1+32*0+16*1+0*8+4*1+2*0+1*0=84
2.100转成二进制
十进制: 128 64 32 16 8 4 2 1
二进制: 0 1 1 0 0 1 0 0
所以结果为:0110 0100
④二进制和八进制,十六进制如何转换
方式1:以十进制做为桥梁
方式二:通过八进制、十六进制的由来的方式--分组转换
二进制到八进制--3位组合(位数不够,左边补0)
举例:
二进制:001 011 001
八进制:1 3 1
二进制到十六进制--4位组合(位数不够,左边补0)
二进制: 0101 1001
十六进制: 5 9
(4)不同进制的简单代码实现
class ConstantDemo1{
public static void main(String[] args){
//二进制
System.out.println(0b100);
//八进制
System.out.println(0100);
//十进制
System.out.println(100);
//十六进制
System.out.println(0x100);
}
}
运行结果:
(四)有符号数据表示法
在计算机内,有符号数有3种表示法:原码、反码和补码。所有数据的运算都是采用补码进行的。
原码:就是二进制定点表示法,即最高位为符号位,“0”表示正,“1”表示负,其余位表示数值的大小。
反码:正数的反码与其原码相同;负数的反码是对其原码逐位取反,但符号位除外。
补码:正数的补码与其原码相同;负数的补码是在其反码的末位加1
举例:已知某数X的原码为1100 1110B,试求X的补码和反码
符号位 数值位
原码:1 1 0 0 1 1 1 0
反码:1 0 1 1 0 0 0 1
补码:1 0 1 1 0 0 1 0
二、变量
(一)变量概述:在程序执行的过程中,在某个范围内其值可以发生改变的量。
(二)变量定义格式:数据类型 变量名=初始化值;
(三)数据类型分类
1.基本数据类型
2.引用数据类型
(1)基本数据类型--四类八种
①整数类型(byte, short, int, long)
整数类型
占用存储空间
表数范围
byte
1字节
-128~127
short
2字节
-2^15~2^15-1
int
4字节
-2^31~2^31-1
long
8字节
-2^63~2^63-1
②浮点类型(float, double)
浮点类型
占用存储空间
表数范围
float
4字节
-3.403E38~3.403E38
double
8字节
-1.798E308~1.798E308
③字符型(char):占用2个字节的空间,范围为:0~65535
④布尔型(boolean):只用true和false
(2)使用变量注意事项:
①作用域:变量定义在哪一级大括号中,哪个大括号的范围就是这个变量的作用域。相同的作用域中不能定义两个同名变量。
②初始化值:没有初始化值不能直接使用。
③在一行上建议只定义一个变量,可以定义多个,但是不建议。
④在定义变量的时候,虚拟机默认接收的整数是int类型,如果你想赋值long类型的数,需要在数值后面加 l 或者 L。
⑤在定义变量的时候,虚拟机默认接收的浮点数是double类型,如果你想赋值float类型的数,需要在数值后面加 f 或者 F。
⑥boolean类型不能转换为其他的数据类型。
⑦默认转换:
byte,short,char—int—long—float—double
byte,short,char相互之间不转换,他们参与运算首先转换为int类型
⑧强制转换:数据类型 变量名=(目标类型)(被转换的数据);
(四)不同数据类型的变量定义的代码演示
class VarDemo1{
public static void main(String[] args){
//整数
//byte
byte b=100;
//short
short s=1000;
//int
int i=10000;
long l=1000000L;//记得加L或l
System.out.println(b);
System.out.println(s);
System.out.println(i);
System.out.println(l);
//浮点型
//float
float f=123.45f;//记得加F或f
//double
double d=123.45;
System.out.println(f);
System.out.println(d);
//char
char c='a';
char c1='珍';
//注意:字符的个数只能为一个,不能写成'aa'或者'珍珍'
System.out.println(c);
System.out.println(c1);
//boolean
boolean bl=true;
boolean bl1=false;
System.out.println(bl);
System.out.println(bl1);
}
}
运行结果:
(五)关于强制转换的代码演示
class VarSumDemo{
public static void main(String[] args){
//定义变量
int a=3;
byte b=4;
int c=a+b;
byte sum=(byte)(a+b);//可行,隐含了可能损失精度
//byte c=a+b;// 错误: 可能损失精度,a与b在运算时,b自动提升为byte
System.out.println("c="+c);
System.out.println("sum="+sum);
}
}
运行结果:
三、运算符
(一)算术运算符
1.常见的算术运算符:+,-,*,/,%,++,--
(1)+的作用:
加法
正数
字符串连接符
(2)++和--的使用规则:
++和--在前面时,先自增,再运算。
++和--在后面时,先运算,后自增。
注意:整数做运算,结果还是整数
(3)基本的算术运算符的代码演示
class OperatorDemo{
public static void main(String[] args){
//基本算术运算符
System.out.println(4+3);
System.out.println(4-3);
System.out.println(4*3);
System.out.println(4/3);
System.out.println(4/3.0);
System.out.println(5%3); //取的是余数
}
}
运行结果:
(4)自增与自减的代码实现
class OperatorDemo2{
public static void main(String[] args){
int x =3;
int y =4;
int c = x++;
int d = y--;
System.out.println("c="+c);
System.out.println("d="+d);
System.out.println("x="+x);
System.out.println("y="+y);
System.out.println("----------------------");
int i =3;
int j =4;
int m = ++i;
int n = --j;
System.out.println("m="+m);
System.out.println("n="+n);
System.out.println("i="+i);
System.out.println("j="+j);
}
}
运算结果:
(二)赋值运算符
1.常见的赋值运算符:=,+=,-=,/=,*=,%=
基本的赋值运算符:=
作用:把右边赋值给左边
扩展的赋值运算符:+=,-=,/=,*=,%=
作用:左边跟右边做运算,再赋值给左边
注意:扩展的赋值运算符隐含了强制转换。
(三)关系运算符
1.常见的关系运算符:>,<,==,!=,<=,>=,instanceof(检查是否是类的对象)
注意1:关系运算符的结果都是boolean型,也就是要么是true,要么是false。
注意2:比较运算符“==”不能误写成“=”
(四)逻辑运算符
概述:逻辑运算符用于连接布尔型表达式,在Java中不可以写成3<x<6,应该写成x>3 & x<6。
1. 常见的逻辑运算符:&(与),|(或),^(异或),! (非),&&(短路),||(短路)
2. &与&&区别:
单&时,左边无论真假,右边都进行运算
双&时,如果左边为真,右边参与运算,如果左边为假,那么右边不参与运算
3. |和||的区别:
单|时,左边无论真假,右边都进行运算
双|时,如果左边为假,右边参与运算,如果左边为真,那么右边不参与运算
4. 异或( ^ )与或( | )的不同之处是:当左右都为true时,结果为false。
(五)位运算符
1. 概述:位运算是直接对二进制进行运算。
运算符
运算
范例
<<
左移
3 << 2 = 12 --> 3*2*2=12
>>
右移
3 >> 1 = 1 --> 3/2=1
>>>
无符号右移
3 >>> 1 = 1 --> 3/2=1
&
与运算
6 & 3 = 2
|
或运算
6 | 3 = 7
^
异或运算
6 ^ 3 = 5
~
反码
~6 = -7
2. 位运算的细节:
<<
空位补0,被移除的高位丢弃;
>>
被移位的二进制最高位是0,右移后,空缺位补0;
最高位是1,最高位补1。
>>>
被移位二进制最高位无论是0或者是1,空缺位都用0补。
&
任何二进制位和0进行&运算,结果是0;
和1进行&运算结果是原值。
|
任何二进制位和0进行 | 运算,结果是原值;
和1进行 | 运算结果是1。
^
任何相同二进制位进行 ^ 运算,结果是0;
不相同二进制位 ^ 运算结果是1。
举例:
0000 0011
& 0000 0100
--------------------
0000 0000
0000 0011
| 0000 0100
--------------------
0000 0111
0000 0011
^ 0000 0100
--------------------
0000 0111
记得:
&:有0则0
|:有1则1
^:相同为0,不同为1
3. 位运算的简单代码实现:
class OperatorDemoPlace{
public static void main(String[] args){
int x=3;
int y=4;
System.out.println(x&y);
System.out.println(x|y);
System.out.println(x^y);
System.out.println(~x);
}
}
运行结果:
4. 用^实现两个整数变量的交换
class OperatorDemoPlace1{
public static void main(String[] args){
int a=5;
int b=6;
a=a^b;
b=a^b;
a=a^b;
System.out.println("a="+a);
System.out.println("b="+b);
}
}
运行结果:
(六)三目运算符
格式:(关系表达式)?表达式1:表达式2;
如果条件为true,运算后的结果是表达式1;
如果条件为false,运算后的结果是表达式2;
用三目运算符获得两个数中的大数的代码:
class ComepareDemo{
public static void main(String[] args){
int x=30;
int y=20;
int z=(x>y)?x:y;
System.out.println(z);
}
}
运行结果:
用三目运算符比较两个数是否相等,并输出结果的代码:
class JudgeDemo{
public static void main(String[] args){
int x=30;
int y=20;
//boolean z=(x==y)?true:false;
String s=(x==y)?"相等":"不相等";
System.out.println(x+"与"+y+s);
}
}
运行结果: