1.关键字
- 规范:必须小写(类名首字母大写)。
- 有特别意义的标识符,诸如case,abstarct等等无须强记。
2. 标识符
-程序中自定义的有意义的名称。
-规范:26个英文字母大小写,数字0~9,符号 _ $组成;
数字不可以开头;不可以使用关键字。
-注意:_ 连接某些名称$子名称(Demo_1$Test);
凡是名称都是标识符。
3.注释
-单行注释://
-多行注释:/*......*/
-文档注释:/**......*/
-多行,文档区别:文档可以被javadoc.exe提取,生成一个说明书,把这些文档注释和源代码放在一个网页文件中,它记录了说明性文字和程序代码。
-注意:多行注释不允许多行注释;
注释不占字节码。
前期敲代码必须要有注释(诸如思路步骤说明等)。
-作用:注解说明;
调试程序。
4.常量和变量
-常量:不能改变的数值。
-分类:整数(byte,short,int,Long),小数(float,double),布尔型(boolean),字符(char),字符串(String),null。
-整数表现形式:二进制 0,1
八进制 0~7,用0开头表示
十进制 0~9
十六进制 0~9,A~F,用0x开头表示
-进制换算
-计数方式:8 bit(二进制位)=1 byte(最小数据单位)。
-声明:八进制数,二进制中3个二进制位为一个八进制位;
十六进制,二进制中4个二进制位为一个十六进制位。
-例子:二进制-->八进制:1011=1*2^3+1*2^2+1*2^1+1*2^0
010-101-110 = 0256
2 5 6
二进制-->十六进制:-1010-1111 = 0xAF
10 15
十进制-->二进制:除2运算,6/2=3余0,
3/2=1余1,从下往上
1/2=0余1,6的二进制数为110.
-负数的进制:最高位是1;该负数的绝对值的二进制取反+1;
-举例:-6 6的二进制0000-0110(int类型8位)
取反1111-1001
+1 1111-1010(逢2进1)
-变量(未知数x)
-定义:存放在某区域中的数据在同一类型范围内不断变化(可以重复使用)。
-注意:变量有效范围{};初始化值。
-格式:数据类型 变量名 = 初始化值。
-基本数据类型:整数(byte,short,int,Long),小数(float,double),布尔型(boolean),字符(char)。
-引用类型:类(class),接口(interface),数组(array)
-ps:整数默认,int;小数默认:double。
-大小位:o=8 bit;
byte~o;short,char~oo;int,float~oooo;long,double~oooooooo.
-类型转换
-自动转换:低位-->高位,无风险。byte,short,char自动转成int类型。
-强制转换:高位-->低位,精度可能损失,有风险。
b = (byte)(b+4);//默认int类型,强转。
System.out.println(b);
-int与byte区别
int x1 = Integer.MAX_VALUE;
int x2 = 2;
x = x1 + x2;
System.out.println(x);//默认int类型,结果超出32位,只保留32位,高位被舍弃,最高位变为1,x=-2^32+1
byte b =3;//默认强转(int-->byte,判断3是否在byte之内满足强转)
b = 3 + 4;//b=7
byte b1 = 3;
byte b2 = 4;
b = b1 + b2;//分析过程/*b1,b2是变量,如果b1=127,b的最高位超出报错。*/
5.运算符
-算术运算符:+,-,*,/,%,++,--,+连接符
-/:取整(6200/1000=6)
-%:取余,模运算(5%2=1;若x<y则x%=x;涉及负数只参考被模数,5%-2=1,-5%2=-1)
-a++/a--:只要知道这个的原理,另外一个--a/++a正常运算正常赋值就可以了
-举例说明:
`int a=1;
int b =a++;//a在前面,所以把a的值赋给b,b=1;然后a进行运算即a=a+1=2;
-容易混淆的:
`int i =1; //int temp = i;
i = i++; //i = i+1;
System.out.println(i);//i=temp相当于临时变量i=1`
/*分析:首先i=1刚开始是放到a区域的,然后把第二行的i=先暂时放到b区域,接着进行运算i++知道i=2这时把a区域的1给盖掉了,此时b区域的i=1来凑热闹把a区域的2给盖掉了,最终i=1*/
-赋值运算符:= += —= *= /= %=
-面试题
short s = 3;//= 是赋值运算符
s += 3;// += 也是赋值运算符,一次运算(+=自动转换过程)
/*s = s + 3; 两次运算,不作自动转换,取2^16 -1时报错*/
s = (short)(s+3)//可行
-比较运算符:== != > < >= <= instanceof
-结果必须是boolean类型,true或false。
-逻辑运算符:& | ^ ! && ||(短路)
-用于连接两个boolean类型的表达式。
-&: 一个false,结果false;全true,结果true(唯一)。
-|:一个true,结果true;全false,结果false(唯一)。
-^:一个true,结果true;两边相同,结果false。(小区别)
**-面试题**:
&与|:无论左边运算结果是啥,右边都要参与运算。
&&:左边为false,右边跳过。
||:左边为true,右边跳过。
-位运算符:<< >> >>> & | ^ ~(二进制计算)
-& | ^:思想与逻辑运算符相同,举例:
这里是int类型32位,为方便只写相应后三位。
6&3-->110 6|3-->110 6^3-->110
& 011 | 011 ^ 011
----- ----- -----
2<--010 7<--111 5<--101
^ 011
-----
110-->6
**注意** 一个数^同一个数两次结果还是这个数。
-~(取反):正数原码、反码、补码都一样;负数原码是该数绝对值对应的二进制数且最高位+1;反码是除最高位为1外,其余取反;补码就是反码+1。
**注意**
取反和反码不一样,取反的过程是:原码-->反码-->补码-->取反
(实际运用极少,仅作了解)
-<<(左移):3<<x <=> 3*2^x(空位0补,不论正负)
3<<2 00|000000000000000000000000000011
000000000000000000000000000011|00-->12
->>(右移):6>>y <=> 6/2^y(取整)(空位根据最高位是啥补啥)
6>>1 0000000000000000000000000000011|0
0|0000000000000000000000000000011-->3
->>>(无符号右移):空位0补,不论正负。
**面试题**
1.最高效的2*8;(2<<3)
2.对两个整数变量进行交换
面试要求
int a = 5; ** int temp;
int b = 3; temp = a;
a = a ^ b;//a=3^5 a = b;
b = a ^ b;//b=(3^5)^3=5 b = temp;**
a = a ^ b;//a=(3^5)^5=3
System.out.println("a="+a+",b="+b);
-三元运算符:(条件表达式)?表达式1:表达式2;
true---->执行表达式1
false---------->执行表达式2
举例:获取三个整数中较大的一个数
int a,b,c,temp,max;
temp = a>b?a:b;
max = temp>c?temp:c;
System.out.println(max);
6.程序流程控制
-顺序结构
-判断结构
-if语句
1.if(布尔表达式)
{}
2.if(布尔表达式){
}else{}
ps:三元运算符为其简写格式(当其运算后有一具体的结果可以用该简写格式)
3.if(布尔表达式 1){
}else if(布尔表达式 2){
}else if(布尔表达式 3){
}else { }
**注意**
一条语句可省略大括号,但不建议省略。
if语句一定只执行其中满足条件的一条语句(而不是多条)。
局部代码块:定义局部变量的生命周期(回到变量:作用域,初始值,大括号)
-选择结构
-switch语句(byte、short、int 或者 char)
(功能性差,书写麻烦,不常用)
switch(expression){
case value :
//语句
break; //可选
case value :
//语句
break; //可选
//你可以有任意数量的case语句
default : //可选
//语句
}//先读有效结果,最后才是default
**注意**
if:对具体的值判断;
对区间判断;
对运算结果是boolean类型的表达式判断;
switch:对具体的值判断;
值的个数通常是固定的;
对于几个固定的值判断,建议switch,它会把具体的答案 都加载进内存,效率较高。
-循环结构
-while语句(先判断后执行)
while( 布尔表达式 ) {
//循环内容
}
-do……while语句(先执行后判断,至少执行一次)
do {
//代码语句
}while(布尔表达式);
**累加算法思想**
/*练习:获取1~10的和值(累加算法)
1+0
1+2
2+3
2+3+4
2+3+4+5
...
思路:每次参与加法数值不确定;
每次出现和值不确定;
和值递增;
加法多次重复运算,且都是和值+下一个数。
步骤:定义一个变量1,用于记录参与加法的数值;
定义一个变量2,用于记录和值;
对变量1进行自增 ;
加法运算时重复的。
*/ int a = 1;//变量1
int sum = 0;//变量2
for (a = 1; a < 11; a++) {
sum = sum + a;
}
System.out.println(sum);
**计数器思想**
/*需求:1~100中6的倍数出现的次数(计数器思想)
思路:由于从1开始增加,不断循环至100;
1~100中出现某数等于6的倍数时,记录该数,并计数一次。
步骤:定义一个变量,用于自增;
定义一个变量,用于计数;
设置条件能否被6整除(取模),可用if语句
多次循环可用循环结构;
*/
int a = 0;
int count = 0;
for (int i = 1; i <= 100; i++) {
if (i%6==0) {
count++;
}
}
System.out.println(count);
-for语句
for(初始化; 布尔表达式; 更新) {
1 2 4
//代码语句
3
}
*无限循环最简单的形式*
while(true){}
for(;;){}
*强调内容*
一个条件一次判断-->if语句
一个条件多次判断-->循环结构:循环次数未知-->while和do...while;
循环次数已知-->for
*while,do...while和for的说明*
同:可以互换。
异:变量的作用域不同。
-foreach语句(数组)
for(声明语句 : 表达式)
{
//代码句子
}
**记一下break和continue**
break:
break 主要用在循环语句或者 switch 语句中,用来跳出**整个**语句块。
break 跳出最里层的循环,并且继续执行该循环下面的语句。
continue:
continue 适用于任何循环控制结构中。作用是让程序立刻跳转到下一次循环的迭代。
在 for 循环中,continue 语句使程序立即跳转到更新语句。
在 while 或者 do…while 循环中,程序立即跳转到布尔表达式的判断语句。