(一)变量:在程序执行的过程中,在某个范围内其值可以发生改变的量
定义格式:数据类型 变量名 = 初始化值;
例如:int x = 1;(固定格式)
定义变量的注意事项:
1)定义变量必须在某一个作用域内定义.
2)变量名只能被定义一次.
3)同一行可以定义多个变量,但是不建议这样去做.书写不规范.
4)定义变量,并且没有初始化值,那么一定要在使用(输出这个变量)之前,给它进行赋值,否则报错!
(二)数据类型
1)基本数据类型
1.数值型
(1)整数类型:整数默认为int类型.
byte(-128~127)占用1个字节的存储空间.
short:占用2个字节的存储空间.
int:占用4个字节的存储空间.
long:占用8个字节的存储空间.(若数据为长整型,应该在数据末尾加L/l,建议加L)
(2)浮点类型:浮点类型默认为双精度浮点类型.
float(单精度浮点型):占用4个字节的存储空间.(若数据为单精度浮点型,应该在数据末尾加F/f,建议加F)
double(双精度浮点型):占用8个字节的存储空间.
2.字符型char:占用2个字节的存储空间.
3.布尔型boolean(true/false):占用1个字节的存储空间.
2)引用数据类型
1.类(class)
2.接口(interface)
3.数组([])
3)数据类型的默认转换
byte,short,char—int—long—float—double
byte,short,char相互之间补转换,他们参与运算首先转换为int类型.
4)数据类型的强制转换
目标类型 变量名=(目标类型)(被转换的数据);
例如:byte a = 3 ;
int b = 4 ;
//强制转换不好,会损失精度
byte c = (byte) (a + b) ;
例1: byte b = 130;有没有问题?如果想让赋值正确,可以怎么做?结果是多少呢?
(计算机底层对数据进行计算通过补码进行的)
130的原码: 00000000 00000000 0000000010000010
(130的原码最高符号位0.整数的原码,反码,都相同)
截取3个字节,变成byte类型
补码: 10000010
已知补码求原码
最高符号位 数值位
1 0000010
(通过补码求反码:数值位-1)
1 0000001 -- 反码
(通过反码求原码:符号位不变,数值为按位取反)
1 1111110
- 64+32+16+8+4+2=126
byte b = (byte) 130;//输出b后结果为-126
例2: System.out.println("hello"+'a'+1);//helloa1--"+"全为拼接符号
System.out.println('a'+1+"hello");//98hello
System.out.println("5+5="+5+5);//5+5=55
System.out.println(5+5+"=5+5");//10=5+5
(三)运算符
1)算术运算符
1.基本算术运算符:+,-,*,/,%(模<取余>)
注意事项;
/:默认取整,如果想结果为小数给分子或者分母乘以一个浮点类型数据
%:模(除法):取的是余数
2.扩展的算术运算符:++,--
++或者--单独使用:无论++或者--在前还是在数据的后面,都是自增1或者自减1
++或者--参与运算的使用:++和--在数据的后面,先参与运算(赋值),然后在自增1或者自减1;
++和--在数据的前面,先自增1,或者自减1,然后把最终的得到的结果进行赋值运算
例1: int a = 10 ;
int b = 10 ;
int c = 10 ;
a = b++;// a=10,b=11,c=10
c = --a;// a=9,b=11,c=9
b = ++a;// a=10,b=10,c=9
a = c--;// a=9,b=10,c=8
例2: int x = 4 ;
int y = (x++)+(++x)+(x*10);
//x:4,5,6
//y= 4+6+60
2)赋值运算符
1.基本赋值运算符:=(把等号右边的值赋值给等号左边的变量)
例如:int a = 1 ;把1值赋值给int类型的变量a
2.扩展的赋值运算符:+=,-=,*=,/=,%=
例如:int result = 10 ;
result += a ; 相当于result = result + a
把符号的左边的值和右边的值相加,赋值给左边
例: short s = 1; s = s+ 1;
short s = 1; s += 1 ;
上面两个代码有没有问题,如果有,哪里有问题.
short s = 1; s = s + 1;有问题:隐含了一个默认类型转换:类型不匹配:等号右边最终int类型,而等号左边属于short类型
正确的为 s = (short)(s + 1);
short s = 1; s += 1;没有问题:扩展的赋值运算符隐藏了强制类型转换.
3)比较运算符
比较运算符:>,>=,<,<=,!= ,==
(结果都是boolean类型)
注意事项:
1.== 不能写成 =.
2.类似这种2>x>4在Java语言中是不能直接这样写的,要用逻辑运算符连接.
4)逻辑运算符:可以连接某个值或者某一个表达式:
1.基本的逻辑运算符:&,|,^,!
&(逻辑与)-并列关系
特点:有false则false
|(逻辑或)两个满足一个条件即可
特点:有true则true
^(逻辑异或)
特点:相同则为false,不同则为true
!(逻辑非)
特点:非false则true,非true则false.
偶数个非为它本身
2.扩展的逻辑运算符: 逻辑双与:&& ; 逻辑双或:||
逻辑单与&和逻辑双与&&的区别:
共同点:两个表达的效果是一样的:有false则false
不同点:逻辑双与&&,具有短路效果:左边的表达式如果是false,则右边不执行
同样,逻辑双或||具有短路效果:左边如果是true,右边不执行.
5)位运算符: &(位与),|(位或),^(位异或),~(反码):按位取反
注意事项:计算一个数据对另一个数据进行位运算操作,就必须算出该数据对应的二进制数据
例: System.out.println(3&4);//0
System.out.println(3|4);//7
System.out.println(3^4);//7
System.out.println(~3);//-4
3对应的二进制数为 0b11
4对应的二进制数为 0b100
3对应的二进制数据:4个字节 00000000 00000000 0000000000000011
4对应的二进制数据:4个字节 00000000 00000000 0000000000000100
位&:有0则0
00000000 00000000 0000000000000011
位(&) 00000000 0000000000000000 00000100
00000000 00000000 0000000000000000 结果:0
位|:有1则1
00000000 00000000 0000000000000011
位(|) 00000000 0000000000000000 00000100
00000000 00000000 0000000000000111 结果:7
位^:相同则为0,不同则为1
00000000 00000000 0000000000000011
位(^)00000000 0000000000000000 00000100
00000000 00000000 0000000000000111 结果:7
~:反码:按位取反,0变1,1变0
~ 00000000 00000000 0000000000000011
11111111 11111111 1111111111111100(补码)
已知补码,求原码
11111111 11111111 1111111111111100(补码)
-1
11111111 11111111 1111111111111011 (反码)
10000000 00000000 0000000000000100(原码) 结果:-4
位^运算符的特点:一个数据被另一个数据位异或两次,其值本身不变(可以用于实现两个数据的交换)
<<:左移动:最高位丢弃掉,在右边补齐0
>>:右移动:最高位是1,左补齐1,最高位为0,左补齐0
>>>:无符号右移:无论最高符号位是1还是0,左边补齐0
6)三目运算符(三元运算符)
格式:(表达式) ? 表达式1的结果 : 表达式2的结果;(表达的结果是一个boolean类型)
执行流程:先判断表达式是否成立
如果成立,就是true,把表达式1作为true的结果;如果不成立,就是false,把表达式2作为false的结果.
例:判断两个数据的最大值
int a = 100 ;
int b = 200 ;
int max = (a> b) ? a : b ;
System.out.println("两个数据的最大值是:" + max);
(四)键盘录入数据
javaAPI给提供(Sacnner类)
使用Scanner类去做键盘录入
格式:创建键盘录入对象
Scanner sc = new Scanner(System.in) ;
导包:在package下面 ,在class类的上面:两者之间位置书写
import java.util.Scanner;
接收数据:使用Scanner类中方法
输出语句:给用户提示:请您输入一个数据:
int x = sc.nextInt();
输出语句输出值
例:求三个数据最大值,键盘录入数据.
package 键盘录入;
import java.util.Scanner;
//求:三个数据最大值,键盘录入数据
public class ScannerDemo {
public static void main(String[] args) {
//创建键盘录入对象
Scanner sc = new Scanner(System.in);
//提示用户并接收数据
System.out.println("请输入第一个数据: ");
int a = sc.nextInt();
System.out.println("请输入第二个数据: ");
int b = sc.nextInt();
System.out.println("请输入第三个数据: ");
int c = sc.nextInt();
//定义中间变量,记录前两个数的最大值
//使用三元运算符
int temp = (a>b) ? a : b;
//使用中间变量与第三个数进行比较
int max = (temp>c) ? temp : c;
//输出最大值
System.out.println("您所输入的三个数据中的最大值为: "+max);
}
}