关键字:
被java赋予了特殊的含义
一.标识符
在程序中自定义的一些名称 比如说 类名
规则:(必须要遵守的 )
由26个引文字母大小写,数字:0-9符号 _$组成
定义合法标识符规则:
1.数字不可以开头
2.不可以使用关键字。(main不是关键字)
java中严格区分大小写
注意:在起名字的时候,为了提高阅读性,要尽量有意义。
Java中的命名规范
包名:多单词组成时所有字母都小写。
类名接口名:多单词组成时,所有单词的首字母大写。
变量名和函数名:多单词组成时,第一个单词首字母小写,第二 个单词开始每个单词首字母大写。
常量名:所有字母都大写。多单词时每个单词用下划线连接。
二.常量
Java中一些固定不变的数值
Java中常量的分类:
1.整数常量:所有整数 (4 ,8 , 12)
2.小数常量:所有小数
3.布尔型常量:较为特有,只有两个数值:true false(用于判断)
4.字符常量:将一个数字字母或者符号用单引号(' ')标识(‘4’ ‘+’字符)
5.字符串常量:将一个或者多个字符用双引号标识 (“abc”)
6.null常量,只有一个数值就是null
三.进制的特点
对于整数:java有三种表现形式
十进制:0-9,满10进1 (23)
八进制:0-7,满8进1,用0开头表示(023)
十六进制:0-9,A-F,满16进1,用0x开头表示(0x4a2c)
进制的由来:任何数据在计算机中都是以二进制的形式存在。二进制早期由电信号开关演变而来。
一个整数在内存中一样也是二进制的,但是使用一大串的1或者0组成的数值进行使用很麻烦。
所以就想把一大串缩短点,将二进制中的三位用一位表示。
这三位可以取到的最大值就是7,超过7就进位了。这就是八进制。(为了让操作形式更简单)
但是对于过长的二进制变成八进制还是较长,所以出现的用4个二进制位表示一位的情况,
四个二进制位最大是15,这就是十六进制
规律:进制越大,表现形式越短
0100-0101 由八个二进制位 表示一个最小的单位(最基本的数据单元) 叫做字节
计算机中 全是用二进制进行存储的
数据的映射 就形成了一张表 老美用的表 叫做ASCII 编码表
之所以出现八进制 和 十六进制 为了更方便的表示数据
四.进制转换(十进制和二进制)
十进制--->二进制
原理:对十进制数进行除2运算
Integer.toBinaryString(int i);//十进制向二进制的转换
二进制-->十进制
原理:二进制乘以2的过程
五.进制转换(八进制和十六进制)
六.负数的二进制表现形式
其实就是正数的二进制取反+1
一个整数在内存中 占了4 个字节
取反:将二进制的1变成0,0变成1
负数的二进制位的最高位是1 正数是0 负数是1 1 是取反得来的
七.变量
内存中开辟一个空间 把要运算的值 或者叫做 要操作的值 存放到该空间当中
这个空间存在的好处在于 这个空间里的值 可以任意变化
只要能够操作该空间 就能操作空间里的值
变量:就是将不确定的数据进行存储。
也就是需要在内存中开辟一个空间
如何开辟内存空间呢 ?
空间里可以一直往里面存变化的数据
这个空间定义完 想去使用 必须有个名称 这个名称 我们称之为 变量名
明确一下空间的类型 我们称之为 数据类型
Java 对类型的划分是非常细致的
开辟空间 就是通过明确数据类型 变量名称 数据来完成的 。
byte:是以一个8位来表示的 8个二进制位来表示一个字节数据 (取值范围-128~~127)-2的7次方 到 2的7次方减1
short:是以16个二进制位来表示的 (取值范围 -32768~~32767) -2的15次方 到 2的15次方减1
int:4个8位 也就是32个二进制位来表示的 (取值范围 -2的31次方 到 2的31次方减1)
long:
一般情况下 写整数 默认为 int型 byte 是1两的碗 short是2两的碗 int是4两的碗 long是8两的碗
CPU里的内存叫做缓存 是用于缓存数据用的 缓冲存储区域
float:单精度浮点数 占了4个8位
double:双精度浮点数 占了8个8位
两者精确程度不同
凡是写的小数 默认是double
定义变量的格式: 数据类型 变量名 = 初始化值;
什么时候定义变量?
当数据不确定的时候,需要对数据进行存储时,就定义一个变量来完成存储动作
八.类型转换
自动类型提升
强制类型转换
System.out.println('A'+0);
System.out.println((char)5);
九.算术运算符
int x = 3518;
x = 3518 / 1000 * 1000 ;
System.out.println(x);
打印出:3000
%取模 就是取余数
注意 如果左边小于右边 结果是左边
如:3%5 的结果是 3
左边等于右边 结果是 0
右边是1 结果是0
取模的时候 如果出现负数的话 这个负数只看被模数(就是只看左边)
例如 -2%5=-2 2%-5=2 -3%-5=-3
++自增
--自减
int a=3,b;
b=a++;//a++ ++叫做给a中的这个变量值进行+1操作 并把+1后的值 重新赋给a
System.out.println(b);
System.out.println(a);
答案为 3 4
int a=3,b;
b=++a;
System.out.println(b);
System.out.println(a);
答案为 4 4
字符串数据和任意数据使用+都是相连接,最终都会变成字符串
System.out.println("5+5="+5+5);
答案是:5+5=55
十.转义字符
通过"\"来转变后面字母或者符号的含义
\n 换行
\b 退格 相当于Backspace
\r 按下回车键 window系统,回车符是由两个字符来表示\r\n
\t 制表符 相当于Tab键
十一.赋值运算符和比较运算符
赋值运算符 = , +=, -=, *=, /=, %=
short a = 4 ;
a = a + 5;//两次运算,容易损失精度
a+=5;//一次赋值运算 将左右两边的和 赋值给 左边(自动完成了强转操作 )
比较运算符
十二.逻辑运算符
逻辑运算符用于连接boolean类型的表达式
true & true = true;
true & flase = false ;
false & true = false ;
false & false = false ;
&特点:只要两边的boolean 表达式结果,有一个为false ,那么结果是flase
只有两边都为true,结果为true;
true | true = true ;
true | false = true;
false | true = true ;
false | false = false;
|特点:两边只要有一个为true结果为true
只有两边都为flase 结果为flase
true ^ true = true ;
true ^ false = true;
false ^ true = true ;
false ^ flase = false;
^异或 就是和 "|" 有点不一样 当true ^ true = false;
^特点:两边相同 结果是 false;
两边不同 结果是 true;
&和&& 特点
&:无论左边是true还是false ,右边都运算
&&:当左边为false,右边不运算
一般用&& 效率高
||
|:两边都参与运算
||:当左边为true时 右边不运算
十三.位运算符(左移右移)
位,就是二进制位 的位
所谓的位运算符 就是二进制运算的 运算符号
<<:其实就是乘以2的移动位数次幂(左移变大) 例如 3<<2 相当于 3*2的2次方 = 3*4=12
>>:其实就是除以2的移动位数次幂(右移变小) 例如 3>>2 相当于 3/2的2次方 = 3/4 = 0
>>:最高位补什么由原有数据的最高位值而定
如果最高位0,右移后,用0补空位
如果最高位1,右移后,用1补空位
>>>:无论最高位是什么,右移后,都用0补
十四.位运算符(与-或-异或)
& | ^ ~反码 就是取反
0 视为 false
1 视为 true
负数的二进制 = 正数的二进制取反+1
要想得到负数二进制的值 = 负数的二进制-1 再取反
7 ^ 4 ^ 4 = 7;
一个书异或同一个数两次,结果还是那个数
十五.位运算符(练习)
1.最有效的方式算出2乘以8等于几?
2<<3
2.对两个整数变量的值进行互换(不需要第三方变量)
int n = 3 , m = 8 ;
三种方式:
1、
int temp = n;
n = m ;
m = temp;
2、
n = n + m ;//如果n和m的值非常大,容易超出int范围
m = n - m ;
n = n - m ;
3、
n = n ^ m ;
m = n ^ m;//(n^m)^m
n = n ^ m ;//n^(n^m)
十六.三元运算符
//取得16进制码
int num = 60 ;
//获得最低4位 通过&15
int n1 = num&15;
//打印最低位的16进制码
System.out.println((n1>9)?(char)(n1-10+'A'):n1);
//获得下一组四位,将数右移4位
int temp = num>>>4;
int n2 = temp&15;
System.out.println((n2>9)?(char)(n2-10)+'A':n2);
(条件表达式)?表达式1:表达式2;
如果条件为true,运算后的结果是表达式1;
如果条件为false,运算后的结果是表达式2;
十七.语句(if语句)
1.if(条件表达式){
执行语句;
}
2.if(条件表达式){
执行语句;
}else{
执行语句;
}
3.
if(条件表达式){
执行语句;
}else if(条件表达式){
执行语句;
}
......
else{
执行语句;
}
if语句特点:
a,每一种格式都是单条语句。
b,第二种格式与三元运算符的区别:三元运算符运算完要有值出现。好处是:可以写在其他表达式中。
c,条件表达式无论写成什么样子,只看最终的结构是否是true 或者false;
十八.语句(Switch)
Switch语句
格式:
Switch(表达式){
case 取值1
执行语句;:
break;
case 取值2:执行语句;
break; .........
default:
执行语句;
break;
}
switch语句特点:
a,switch语句选择的类型只有四种:byte,short,int ,char。
b,case之间与default没有顺序。先执行第一个case,没有匹配的case执行default。
c,结束switch语句的两种情况:遇到break,执行到switch语句结束。
d,如果匹配的case或者default没有对应的break,那么程序会继续向下执行,运行可以执行的语句,直到遇到break或者switch结尾结束。
if和switch语句很像,具体什么场景下,应该用哪个语句呢 ?
如果判断的具体数值不多,并且符合byte short int char 这四种类型
虽然两个语句都可以使用,建议使用swtich语句,因为效率稍高。
其他情况:对区间判断,对结果为boolean类型判断,使用if
if的使用范围更大。