1 java标识符
java中包,类,方法,参数,变量的命名规则,英文字母以及数字还有美元符($)和下划线(_)。但是数字不能在第一位,也不能是关键字。
2 java关键字
关键字:在java语句中有特殊意义的单词
注:main不是关键字,却是被虚拟机所识别的一个名称。
java 无sizeof ,goto, const 关键字,但不能用goto const作为变量名
3 java常量
定义:Java中固定不变的、表示不能改变的数值。
Java中常量的分类:
整型常量:十进制 ,十六进制 ,八进制(其中十六进制要注意的是0-9后A-F代表10到15)
长整型常量:13L
单精度浮点数:5.1f,.4f ,2e3f ,0f(后面不加f则默认为double类型)
双精度浮点数 :5.1,.4,2e-3,0d
布尔常量 :true和false
字符常量 :‘a’ , ‘8’, '\u0027'
‘\r‘ 回车键;(这里的\是转义字符的意思)
‘\n‘ 换行;
‘\t‘ 制表符,相当于table键;
‘\b‘ 退格键,相当于Back Space;
‘\‘‘ 单引号,而‘\“‘是双引号;
‘\\‘ 一个斜杠“\”。
字符串常量 :“Hello World“,”123”, "Welcome \nXXX"
null常量 :null常量只有一个值,用null表示,表示对象的引用为空
4 java变量
定义:内存中的一个存储空间。有自己的名称(变量名)和类型(数据类型)。
数据类型:
Java中有两种数据类型:1、基本数据类型;2、引用数据类型。
基本数据类型有八种。
1.byte占用一个字节
2.short占用两个字节
3.int占用四个字节
4.long占用八个字节
5.float占用四个字节
6.double占用八个字节
7.char占两个字节 是unicode编码。如果直接给char赋值为一个大小范围内的数字而不加单引号,那么输出的是这个数字的unicode编码代表的字符。
<span style="font-size:14px;">package testchar;
public class Test2 {
public static void main(String []args){
char b = '6';
System.out.println(b);
}
}</span>
比如这个程序的输出就是大写的B
8.Boolean占一个字节(或者一位),其取值只有两个,true和false。
引用数据类型有三种。分别是类class 接口interface 数组array
5 数据转换
5.1隐式转换,由数据长度小的自动转换到大的 其中(byte short char)——》int long float double三者从左往右依次变强,谁出现转换为谁。比如:System.out.println(‘a’+1)打印的是98,自动类型提升,把a转换成ASCII编码值(97)与1相加。
5.2强制转换,这个是需要手动的,比如用int和byte相加,但是想要byte的数据类型,虽然大小是在byte的数据长度以内,但是类型不符合会报错,所以需要先转换,如下图
<span style="font-size:14px;">package test;
public class Test2 {
public static void main(String []args){
int a = 2;
byte b =(byte)(1+a);
}
}</span>
6.运算符
1, 算术运算符:+,-,*,/,%,++,--
2, 赋值运算符:=,+=,-=,*=,/=,%=
3, 比较运算符:==,!=,<,>, <=, >=, instanceof
Instanceof检查是否是类的对象 返回为布尔类型。
4, 逻辑运算符:&,|,^,!,&&,||
5, 位运算符:<< 左移 >> 右移 >>> 无符号右移
几个注意的点: 第一,++在前面和在后面的区别,在前面是先+1,赋值给本身,在后面就是先赋值,后+1
第二点,==和equals的区别,前者是判断内存中的地址值,比如创建了两个String字符串都存的是“hello”但是用==比较,那么返回值是false。equals在object类中也是调用了==的方法,但是针对不同类中的equals的方法都进行了重写,比如String类中,如果地址值不同,还会进行值的判断。
第三点,&和&&的区别 |和 ||的区别 前者是运算符,后者是短路符号。例如 a&&b 如果a的结果是false,那么直接返回false,b不参与运算。
第四点,>> 和>>>的区别,有符号右移的补位是根据原有位的最高位补的,后者直接补0
例如下图:
十六进制与二进的对比
0x80000000 =1000,0000, 0000, 0000, 0000, 0000, 0000, 0000
0xc0000000 =1100,0000, 0000, 0000, 0000, 0000, 0000, 0000
0x40000000 =0100,0000, 0000, 0000, 0000, 0000, 0000, 0000
总结与注意事项:
1. 移位运算符适用类型有整型和字符型。
2. 对低于int型的操作数将先自动转换为int型再移位。
3. 左移或者右移的位数需要取模运算,比如int类型要右移33位,那么实际上是右移了一位,如果右移32位,那么大小实际上上没变。
4. x>>1的结果和x/2的结果是一样的,x<<2和x*4的结果也是一样的。总之,一个数左移n位,就是等于这个数乘以2的n次方,一个数右移n位,
就是等于这个数除以2的n次方。
5. %取模运算,得到的模是前一个数字的符号,不管后面的数字的符号。
6 三元运算符
7.运算符的优先级(有的公司的笔试题里会出)
关于退格/b 在eclipse中的打印是空格 在dos界面运行是删除 不清楚什么状况。
8.程序的流程的流程控制
判断结构 选择结构 循环结构
判断结构:
判断语句三种格式:
格式一:
if(条件表达式){
执行语句;
}
执行流程:如果条件表达式为true,就执行语句,否则,什么都不执行。
格式二:
if(条件表达式){
if语句执行体;
}else{
else语句执行体;
}
执行流程:如果条件表达式为true,就if语句执行体;否则,就执行else语句执行体;
格式三:
if(条件表达式){
if语句执行体;
}
else if(条件表达式){
else if语句执行体;
}
...
else{
注意点:当有两个判断条件且有结果是可以优先考虑使用三元运算符 比如else语句执行体;
}
switch语句
用于做选择使用的。一般用于几个常量的判断。
switch语句会把几个常量值直接加载到内存,在判断的时候,效率要比if语句高。
所以,针对几个常量的判断,一般选择switch语句。
选择语句格式:
switch(变量){
case 取值1:
执行语句;
break;
case 取值 2:
执行语句;
break;
...
default:
注意点:switch后面的变量数据类型,在比较早期的jdk版本中只接受四种基本类型的,后来在1.5之后接受枚举类型,1.7接受String执行语句;
break;
}