---------android培训、java培训、期待与您交流! ----------
导读:关键字、常量、变量、类型转换、转义符、运算符
1、关键字
- 关键字所有字母都为小写
- main不为关键字,但确实为虚拟机所识别
2、常量和进制
- java6种常量中有二个特殊的常量boolen常量(有两个值true和false)和null常量(只有一个值null)
- 从二进制到十六进制会越来越短
3、变量:
(1)定义:
变量就是将不确定的数据进行存储,也就是需要在内存中开辟出一个空间。如何开辟内存空间呢,就是通过明确数据类型、变量名称、数据来完成
(2)什么时候定义变量?
当数据确定的时候,需要对数据进行存储的时候就定义一个变量,来完成存储动作。
(3)java基本数据类型
java语言是一个强类型的语言,对每一种数据都定义了明确的具体的类型,在内存中分配了不同大小的空间
java中凡是写整型默认类型都为int。
java中小数默认都是double型。例:float f = 2.3;(错误) float f = 2.3f;(正确)
char c = ' '; long l = 6L; byte b = 2; (-128~127) boolean b = true;
(4)其他
cpu中的内存我们称之为缓存。在买一些设备的时候要考虑一些缓存的情况。
变量除了可以存储数据块外还可以被重用
4、类型转换
(1)自动转换(隐式转换)
例:A. byte b = 3; b = b + 2;
会出现精度的损失。因为2默认是一个整型的数占4个byte,经过自动类型提升(以小的为主,小的向大的提升,计算机机底层自动帮你完成),b+2变为4个byte,再赋值给一个byte就会报错。
例:B.System.out.println('a'+1); 输出结果98
(2)强制转换(显式转换)
例:A. b = (byte)(b+2)
进行强制类型转换就不会出错
例:B. System.out.println((char)('a'+1)); 输出结果b.
P.S. : 在ASCII中a为97,A为65,字符‘1’代表49.
5、算术运算符
int x = 4027; x = x / 1000 *1000;将最高位留下,将后面的东西舍弃。
1 % -5 ==1; -1 % 5 == -1它的结果只看被余数即作数左边的。
int b; b = b + 4; 不能运算,因为在开始的时候b没有赋值。
+:即可以做加法运算,还可以做字符串连接。字符串和任何数据使用+都是相连接最后结果是字符串
例:System.out.println("a + b = " + 5 + 5); 结果为a + b = 55
System.out.println("a + b = " + (5 + 5)); 结果为a + b = 10 运用小括号提高的优先级
6、转义运算符
定义:通过\ 来转变后面字母或者符号的含义
\n:换行 \b:退格。相当于backspace。 \r:按下回车键。window系统,回车符是由两个字符来表示\r\n.
\t:制表符。相当于tab键
例:System.out.println("\"hello\"");输出一个带有双引号的"hello".
System.out.println("\\hello\\");
char ch = '\'';
char ch = '你' ;
7、赋值运算符和比较运算符
= += -= *= /= %=
例:short s = 4; s = s + 5; 和short s = 4; s += 5;有什么区别?
第一个会出错,第二个不会出错,因为第一个相当于进行了二次的运算,s自动提升为4个字节然后赋给s。而第二个只相当于进行了一次赋值运算
== != <> <= >=
运算结果都为boolean型,要么为true要么为false
8、逻辑运算符
定义:逻辑运算符用于连接boolean类型的表达式
& | ^ ! && ||
^: 异或 ;就是和 | 有点不一样。当true ^ true = false;(两边相同结果为假,两边不同结果为真)
&和&&特点:
&:无论左边是true是false。右边都运算。 &&:当左边为false时,不运算。
&&比&运算效率会高那么一点。如果&&前面的那个数错误的话,后面的那个就不运算了,因为结果一定为假
例:int a = 2; a>3 && a<6; 只运算a>3
|和||的特点:
|:两边都参与运算。 ||:当左边为true.右边不运算。
9、位运算
<< >> >>> & | ^ ~(取反)
一个数往左移越来越大(乘以2的左移的位数次幂),一个数往右移越来越小(除以2的右移的位数次幂)。
做运算的时候位运算是最快的,但有一个局限性,都必须是2的倍数。
练习1:最有效率的方式算出2*8等于几?2<<3;
>> : 最高位补什么由原有数据的最高位值而定,右移后,最高位是1就补1,如果最高位是0就补0
(带符号右移,负数右移结果还是负数)
>>> : 无论最高位是什么,右移后,都用0补
^ : 一个数异或同一个数两次,结果还是那个数。例:7 ^ 4 ^ 4 = 7; 可用于加密解密。
练习2:对两个整数的值进行互换(三种方法)
(1)运用第三方变量(开发中最常用的方法,可读性最强)
int temp = n;
n = m;
m = n;
(2)不运用第三方变量(如果n和m的值非常大,容易超出int范围)
n = n + m;
m = n - m;
n = n - m;
(3)不运用第三方变量(一种有技巧的方法,但在开发中不常用)
n = n ^ m;
m = n ^ m; //(n ^ m) ^ m
n = n ^ m; //n ^ (n ^ m)
记法:右边都是n ^ m ,左边是nmn
练习3:60的十六进制的获取?
60 & 15 = 12;(60的二进制先和15的二进制相&,即和低四为1高四位为0的二进制相与)
temp = 60 >>> 4;(上一步运算完成后将60的二进制右移四位)
(要写成>>>的右移,正数的话都一样,负数的话>>移不完)
temp & 15 = 3; (上一步的右移四位完成后,再和15的二进制相与)
将12和3分别转化为相应的字母:(char)(12 - 10 + 'A') ,得到C 3,再倒过来得到60的十六进制3C
玩十六进制的时候低四位获取,玩八进制低三位获取,玩四进制低二位获取,玩二进制低一位获取。
10、三目运算符:
要判断是否大于9,做相应的处理。int n2 = temp & 15;n2 > 9 ? (char)(12 - 10 + 'A') : n2; ( : 运算这里有强转)