------- android培训、java培训、期待与您交流! ----------
1. 关键字
(1)被Java语言赋予特殊意义的单词。
(2)特点:
Java语言中的所有关键字全部是小写。
(3)注意事项:
goto和const作为保留字(在JDK的新版本中可能提升为关键字)存在。没有被使用。
2. 标识符
(1)定义:
java中对各种变量,方法和类的命名都叫标识符。(在java中凡是自己起的名字都叫标识符,都需要遵守标识符规则)
(2)组成:
由26个英文字母大小写,数字:0-9和符号:_ $
(3)定义合法标识符规则:
1.数字不可以开头。
2.不能是Java中的关键字。
(4)注意:
在起名字的时,为了提高阅读性,要见名知意。
另外还有一点:驼峰式命名
Java中严格区分大小写,定义标识符不限制长度。
(5)常用的命名规则:见名知意,驼峰命名
A包(文件夹,用于区分同名的类)
全部小写。如果多级包,用.分开。
举例:
com一级包
cn.itheima二级包
注意:www.itheima.cn(域名反写)
B类和接口
每个单词的首字母大写。大驼峰式
举例:Demo ,HelloWorld,StudyJava
C变量和方法名
从第二个单词开始每个单词的首字母大写。小驼峰式
举例:main,add,showName()
D常量
全部大写,如果多个单词组成,用_连接。
举例:PI,STUDENT_MAX_AGE
3. 常量
(1)在程序的运行过程中,其值是不可以发生改变的量。
(2)常量的分类:
A字面值常量
a整数常量
12,-23
b实数(这里专指小数)常量也称浮点型常量
12.5,-65.43
c字符常量
'a','A','0'
d字符串常量
“hello”
e布尔常量
true,false
d空常量(不是类型,是一个数值)
null
B自定义常量
(3)常量可以直接被输出
4. 进制
(1)是一种进位的方式。X进制,表示逢x进1。
(2)Java中整数常量的表示
inta = 15;
inta = 0b1111;
inta = 017;
inta = 0xF;
A二进制由0,1组成。以0b开头。JDK7以后的新特性。
B八进制由0-7组成。以0开头。
C十进制由0-9组成。默认就是十进制。
D十六进制由0-9,A-F(不区分大小写)组成,以0x开头。
(3)进制转换:
A其他进制到十进制
系数:就是每一位上的数据。
基数:X进制,基数就是X。
权:在右边,从0开始编号,对应位上的编号即为该位的权。
结果:把系数基数的权次幂相加即可
B十进制到其他进制
除基取余,直到商为0,余数反转
C快速转换
a8421码。
b二进制--八进制(3位组合)
c二进制--十六进制(4位组合)
5. 变量
定义:程序的运行过程中,在指定范围内发生改变的量。
理解:
内存中的一个存储区域
该区域有自己的名称(变量名)和类型(数据类型)
该区域的数据可以在同一类型范围内不断变化
变量就如同数学中的未知数
-
为什么要定义变量
用来不断的存放同一类型的常量,并可以重复使用
格式
数据类型变量名 =初始化值;
变量的定义格式:
数据类型变量名;
变量名 =初始化值;
数据类型变量名 =初始化值;
数据类型变量1,变量2,变量3=10;
举例:
方式1:byte b = 10;
方式2:byte b;
b = 10;
6. 数据类型
(1)分类
(2)基本类型数据长度
数据类型 |
关键字 |
内存中占字节 |
取值范围 |
默认值 |
布尔型 |
boolean |
没有明确指定 |
true,false |
false |
字节型 |
byte |
1个字节 |
-128~127 |
0 |
短整型 |
short |
2个字节 |
-2(15)~2(15)-1 |
0 |
整型 |
int |
4个字节 |
-2(31)~2(31)-1 |
0 |
长整型 |
long |
8个字节 |
-2(63)~2(63)-1 |
0 |
字符型 |
char |
2个字节 |
0~2(16)-1 |
‘\u0000’ |
单精度浮点型 |
float |
4个字节 |
1.4013E-45~3.4028E+38 |
0.0f |
双精度浮点型 |
double |
8个字节 |
4.9E-324~1.7977E+308 |
0.0 |
注意
-
整数默认是int类型。long类型需要加L或者l后缀。
如:
int i1 = 600; //正确
long l1 = 88888888888L; //必须加l否则会出错
long l2=600;//不会报错600在int范围内
浮点数默认是double类型。float类型需要加F或者f后缀
double d = 12345.6; //正确
float f = 12.3f; //必须加f否则会出错
c.Java字符采用Unicode编码,每个字符占两个字节,因而可用十六进制编码形式表示。注:Unicode是全球语言统一编码
d. boolean 类型适于逻辑运算,一般用于程序流程控制
e.boolean类型数据只允许取值true或false,不可以0或非0的整数替代true和false,这点和C语言不同
f.1.7的新特性在数值字面量中使用下划线
g.例如:数字5000000, java1.7就增加了此新特性,数字中可以添加下划线
如:5000000表示成5_000_000
※虽然下划线在数值字面量中应用非常灵活,但有些情况是不允许出现的,最基本的原则是下划线只能出现在数字中间,也就是说前后必须是数字.所以_100,120_,0b_101,0x_da0都是非法的!
(3)类型转换
自动类型转换(也叫隐式类型转换)
强制类型转换(也叫显式类型转换)
boolean类型不可以转换为其他的数据类型.
整型,字符型,浮点型的数据在混合运算的中相互转换时遵循以下的原则:
容量小的类型自动转换为容量大的数据类型;数据类型按容量大小排序为:
byte,short,char->int->long->float->double
byte,short,char之间不会互相互换,他们三者在计算时首先转换成int类型
容量大的数据类型转换为容量小的数据类型时,要加上强制转换符,但可能造成精度降低或溢出;使用时要格外注意
有多种数据类型的数据混合运算时,系统首先自动的将所有数据转换成容量最大的那一种数据类型,然后再进行计算.
如果想把一个超出了float的取值的double数,强转成float是不可以的,会出Infinity(无穷大)提示
案例:System.out.println(‘a’)与System.out.println(’a’+1)的区别。
分析:’a’是字符,直接打印字符,’a’+1,先把’a’转换成int型的值97再参与运算,因此输出98
(4)面试题
byteb1 = 3;
byteb2 = 4;
byteb3 = b1 + b2;//报错:可能会损失精度
byteb4 = 3 + 4;//不会报错
7. 运算符
(1) 就是把常量和变量连接的符号,一般参与运算使用。
(2) 分类:
算术运算符
赋值运算符
关系运算符
逻辑运算符
位运算符
三元运算符
算术运算符
+:正号,加法,字符串连接符。
“+”除字符串相加功能外,还能把非字符串转换成字符串
System.out.println("5+5="+5+5);//5+5=55
System.out.println(5+5+"=5+5");//10=5+5
b. %:取得余数
左边如果大于右边,结果是余数。
左边如果小于右边,结果是左边。
左边如果等于右边,结果是0。
正负号跟左边一致。
用途:任意正整数%2结果是要么0,要么1。用于切换条件对于
除号“/”,它的整数除和小数除是有区别的:整数之间做除法时,只保留整数部分而舍弃小数部分。
++与--:
++其实相当于把数据+1
单独使用:
在数据的前后,结果一致。
参与操作使用:
如果在数据的后边,数据先操作,在++--
如果在数据的前边,数据先++--,再操作
赋值运算符
=,+=,-=,=,=,%=
inta = 10;
把10赋值给int类型的变量a。
a+= 20;
把左边和右边的和赋值给左边。
注意事项:
short s = 3;
s=s+2;//错误
s+=2; //(short)(s + 2);
有什么区别?
s=s+2;//编译失败,因为s会被提升为int类型,运算后的结果还是int类型,无法赋值给short类型。
s+=2//编译通过,因为+=运算符在给s赋值时,自动完成了强转操作。s+=2其实就是jvm里的一个方法就运算符重载,相当于(short)(s+2);
关系运算符
==,!=,>,>=,<,<=
特点: 关系运算符的结果都是boolean类型
请千万注意:==不要写成 =
注意运算优先级
a = b==c的运算顺序是什么(先计算b==c的真假,再赋值给a,因为赋值运算符的优先级低于逻辑判等==)
以下的运算结果是什么
int a = 10
a++ > 10
++a > 10
逻辑运算符
&,|,!,^,&&,||
&:有false则false
|:有true则true
!:true变false,false变true
^:相同false,不同true
&&:有false则false
||:有true则true
&&和&的区别是:如果左边有false了,右边将不再执行。
||和|的区别是:如果左边有true了,右边将不再执行。
开发中常用:
&&,||,!
位运算
^:一个数据对同一个数据^两次,结果还是数据本身。
举例:a ^ b ^ b= a,此应用可以用来加密解密,而另一个数就是密钥
&:因为&运算只有两边结果都是1是结果才是1,否则为0,所以我们可以对于这个特点来获取某一段二进制位
例:获取60后四位有效位
三元运算符
格式:
条件表达式?表达式1:表达式2
执行流程:
根据条件表达式返回的是true还是false,决定结果是什么。
如果是true,就把表达式1作为结果。
如果是false,就把表达式2作为结果。
举例:
inta = 100;
intb = a > 50 ? 200 : 100;
请问b的值?200
面试题
(1)请用最有效率的代码写出2乘以8
2<<3
(2)请交换两个变量。
inta = 10;
intb = 20;
开发:临时变量
inttemp = a;
a= b;
b= temp;
面试:位^运算符
a= a ^ b;
b= a ^ b;
a= a ^ b;
8. 程序流程控制(语句)
一判断结构(分支语句)
if语句
(1)用于做判断使用的。
常见于对某个范围进行判断,或者几个变量进行判断,还有就是boolean表达式的判断。
(2)格式:
A:第一种格式
if(条件表达式)
{
语句体;
}
执行流程:
如果条件表达式为true,就执行语句体;
否则,什么都不执行。
例:
intx = 3;
if(x>1){
System.out.println("a");
}
B:第二种格式
if(条件表达式)
{
语句体1;
}
else
{
语句体2;
}
执行流程:
如果条件表达式为true,就执行语句体1;
否则,就执行语句体2;
intx = 3;
if(x>1){
System.out.println("a");
}else{
System.out.println("b");
}
特殊:
可以和条件表达式(三元运算符)在某些情况下进行替换。
if语句和三元运算符的区别
三元运算符可以称之为if语句的简写形式,但是只要简写就会有一定的弊端。
三元运算符,是一种运算符号,也就是说每次执行后,必须有结果。
if...else是语句,只是控制流程,执行后不一定有结果
if...else可以里面可以有语句,并输出结果,三元运算符不可以。
举例:
获取两个数中的最大值。
C:第三种格式
if(条件表达式1)
{
语句体1;
}
elseif(条件表达式2)
{
语句体2;
}
...
else
{
语句体n;
}
执行流程:
如果条件表达式1为true,就执行语句体1;
如果条件表达式2为true,就执行语句体2;
...
否则,就执行语句体n;
例:
int x = 3;
if(x>1){
System.out.println("a");
}else if(x>2){
System.out.println("b");
}else if(x>3){
System.out.println("c");
}else{
System.out.println("d");
}
D:注意事项
a:什么时候时候哪一种if语句。
第一种格式在判断条件为一种情况下使用。
第二种格式在判断条件为两种情况下使用。
第三种格式在判断条件为多种情况下使用。
b:每一种if语句其实都是一个整体,如果有地方执行了,
其他的就不执行了。
c:如果if或者else里面控制的语句体是一条语句,是可以省略大括号的
但是,如果是控制多条语句,就必须写上大括号。
建议:永远写上大括号。
d:大括号和分号一般不同时出现
E:作用域
所有变量的定义只在它所属的大括号内有效
二选择结构
switch语句
(1)用于做选择使用的。一般用于几个常量的判断。
switch会把几个常量值直接加载到内存,在判断的时候,效率要比if高。
所以,针对几个常量的判断,一般选择switch语句。
(2)switch语句的格式:
switch(表达式)//byte,short,int,char,String(注意没有long类型)
{
case值1:
语句体1;
break;
case值2:
语句体2;
break;
case值3:
语句体3;
break;
...
default:
语句体n;
break;
}
A:针对格式的解释
switch:表示这里使用的是switch语句,后面跟的是选项。
表达式:byte,short,int,char
JDK5以后可以是枚举
JDK7以后可以是字符
case:表示这里就是选项的值,它后面的值将来和表达式的值进行匹配。
case后面的值是不能够重复的。
break:
switch语句执行到这里,就结束了。
default:
当所有的case和表达式都不匹配的时候,就走default的内容。
它相当于if语句的else。一般不建议省略。
B:执行流程
进入switch语句后,就会根据表达式的值去找对应的case值。
如果最终没有找到,那么,就执行default的内容。
C:注意事项:
a:default整体可以省略吗?
可以,但是不建议。
b:default的位置可以放到前面吗?
可以,但是不建议。
c:break可以省略吗?
可以,但是不建议。
default在最后,break是可以省略的。
case后面的break可以省略,但是结果可能有问题。
d:switch语句什么时候结束呢?
就是遇到break或者执行到程序的末尾。
switch和if的区别
如果对几个具体的值进行判断,可以使用switch,也可以使用if,
如果是对区间进行判断或者boolean结果的判断,只能用if。因为switch里面不接收boolean的值
三循环结构
代表语句:while, do while, for
-
while语句格式:
while(条件表达式){
执行语句;
}
-
do while语句格式:
do{
执行语句;
}while(条件表达式);
do while特点:
是条件无论是否满足,
循环体至少执行一次。
定义循环的前提条件:
1,明确循环条件
2,控制循环次数
for(变量初始化;循环判断条件;循环变量变化){
执行循环体
}
注:
for里面的每个表达式运行的顺序,初始化表达式只读一次,判断循环条件,为真就执行循环体,然后再执行循环后的操作表达式,接着继续判断循环条件,重复找个过程,直到条件不满足为止。
while与for可以互换,区别在于for为了循环而定义的变量在for循环结束就是在内存中释放。而while循环使用的变量在循环结束后还可以继续使用。
最简单无限循环格式:while(true) , for(;;),无限循环存在的原因是并不知道循环多少次,而是根据某些条件,来控制循环。
可以用输出语句System.out.println();调试程序,看到循环中的每一步的输出
案例:
A:正三角形
内循环的判断条件:y<=x
<span style="font-size:18px;">for(int x=0; x<5; x++)
{
for(int y=0; y<=x; y++)
{
System.out.print("*");
}
System.out.println();
}
</span>
B:倒三角
****
***
**
*
内循环的初始化条件:y=x
<span style="font-size:18px;">for(int x=0; x<5; x++)
{
for(int y=x; y<5; y++)
{
System.out.print("*");
}
System.out.println();
}
</span>
C:九九乘法表
<span style="font-size:18px;">for(int i =1;i<=9;i++){
for(int j=1;j<=i;j++){
System.out.print(j+"*"+i+"="+j*i+"\t");
}
System.out.println();
}</span>
四其他流程控制语句
break(跳出), continue(继续)
break语句:应用范围:选择结构和循环结构。
continue语句:应用于循环结构。
注:
这两个语句离开应用范围,存在是没有意义的。
这个两个语句单独存在下面都不可以有语句,因为执行不到。
continue语句是结束本次循环继续下次循环。
标号的出现,可以让这两个语句作用于指定的范围。
例:
//break
<span style="font-size:18px;">int x = 4;
for(int i = 1; i<=10; i++){
//当i等于x的时候,退出循环
if(i==x){
break;
}
System.out.println("i = " + i);
}
</span>
//continue
int y = 4;
for(int i = 1; i<=10; i++){
//当i等于x的时候,退出循环
if(i==y){
continue;
}
System.out.println("i = " + i);
}
//带标号的for循环
<span style="font-size:18px;">a:for(int x = 0; x< 5; x++){
b:for(int y = 0; y<6; y++){
System.out.println("x="+x);
break a;
}
}
</span>
语句总结:
什么情况下,使用哪个语句
当对某几个值进行判断的时候,可以使用if语句,或者switch语句,建议switch,但是,使用switch要注意,它只能操作五种类型的值,byte short,int,char,String如果是五种类型以外的值,需要使用if。
如果对数据区间进行判断,或者对运算结果是boolean类型的进行判断。使用if语句。
当需要某些语句执行很多次的时候,使用循环结构。如果定义变量只为循环增量存在时,可以使用for语句。(如果对一个条件进行判断使用if,//如果对该条件进行多次判断,使用while。)
如果要结束循环,可以控制循环条件,或者通过break语句完成。如果要控制循环的流程,是否该继续执行,可以通过continue或者break来完成。