------- android培训、java培训、期待与您交流! ----------
一、标识符
就是自己在完成相应的程序功能的时候为了方便描述相应的内容我们自己起的名字。
Java中标识符的名称规则:
①包名:多单词组成时所有字母都小写。
xxxyyyzzz
②类名接口名:多单词组成时,所有单词的首字母大写。
XxxYyyZzz
③变量名和函数名:多单词组成时,第一个单词首字母小写,第二个单词开始每个单词首字母大写。
xxxYyyZzz
④常量名:所有字母都大写。多单词时每个单词用下划线连接。
XXX_YYY_ZZZ
二、数据的保存
1、软件安装d盘,但是程序运行时是在内存中运行的
2、程序运行过程中数据和代码都需要加载到内存
a:内存保存数据的方式
变量名:就是方便对内存中数据的操作,给某个数据区域起的名字
b:常量:就是保存在内存中不再发生变化的量
Java中常量的分类:
①整数常量。所有整数
②小数常量。所有小数
③布尔型常量。较为特有,只有两个数值。true false。
④字符常量。将一个数字字母或者符号用单引号( ' ' )标识。
⑤字符串常量。将一个或者多个字符用双引号标识。
⑥null常量。只有一个数值就是:null.
三、整数常量的表现形式
十进制:0~9,满10进1
八进制:0~7,满8进1,用0开头表示
十六进制:0~9,A~F,满16进1,用0x开头表示
进制的由来:任何数据在计算机中都是以二进制的形式存在的。二进制早起由电信号开关演变而来。
一个整数在内存中一样也是二进制的,但是使用一大串的1或者0组成的数值进行使用很麻烦。
所以就想把一大串缩短点,将二进制中的三位用一位表示。
这三位可以取到的最大值就是7.超过7就进位了,这就是八进制。
但是对于过长的二进制变成八进制还是较长,所以出现的用4个二进制位表示一位的情况,
四个二进制位最大是15,这就是十六进制。
规律:进制越大,表现形式越短
四、进制转换
1、十进制 二进制 互转
十进制转成二进制 除以2取余数
二进制转成十进制 乘以2的幂数
比如:1011转化成十进制:1*2(3)+0+1*2(1)+1*2(0)=11
2、十进制 八进制 互转
十进制转成八进制 先转成二进制再转成八进制
八进制转成十进制 先转成二进制再转成十进制
3、十进制 十六进制 互转
十进制转成十六进制 先转成二进制再转成十六进制
十六进制转成十进制 先转成二进制再转成十进制
4、负数的二进制表现形式
对应的正数二进制取反加1
五、变量及常量在内存中保存空间的大小
1、计算机中的数据类型:将不同类型的数据放入各自对应内存提高内存使用率
Java语言是强类型语言,对于每一种数据都定义了明确的具体数据类型,在内存总分配了不同大小的内存空间
整数默认:int 小数默认:double
2、变量:就是将不确定的数据进行存储。需要在内存中开辟一个空间
怎样使用变量在内存中保存数据:
格式:数据类型 变量名 =初始化值;
什么时候定义变量?
当数据不确定的时候,需要对数据进行存储时,就定义一个变量来完成存储动作
使用规则:不限,必须先定义后使用,而且变量的使用是有范围的,{ }来界定变量的使用范围
命名规则:如果变量名是由多个单词组成的,除了第一个单词的首字母小写外,其余单词首字母大写,变量名不能以数字开头。
3、数据的类型转换
自动类型提升
表达式的数据类型自动提升:
所有的byte型、short型和char的值将被提升到int型。
如果一个操作数是long型,计算结果就是long型;
如果一个操作数是float型,计算结果就是float型;
如果一个操作数是double型,计算结果就是double型。
byte b = 3;
int x = 4;
x = x + b;//b会自动提升为int类型进行运算。
强制类型转换
byte b = 3;
b = b + 4;//报错
b = (byte)(b+4);//强制类型转换,强制将b+4的结果转换为byte类型,再赋值给b。
总结:
如果目标类型小于源类型,需要进行强制类型转换
如果目标类型大于源类型,会自动转换
六、java中的运算符
1、算术运算符
算术运算符的注意问题
如果对负数取模,可以把模数负号忽略不记,如:5%-2=1。但被模数是负数就另当别论了,如-5%2=-1
对于除号“/”,它的整数除和小数除是有区别的:整数之间做除法时,只保留整数部分而舍弃小数部分。
例如:int x=3510;x=x/1000*1000; x的结果是3000
“+”除字符串相加功能外,还能把非字符串转换成字符串,
例如:System.out.println("5+5="+5+5);//打印结果是5+5=55
转义字符:通过 \来转变后边字母或者符号的含义
\n:换行
\b:退格,相当于键盘上backspace键
\r:按下回车键,windows系统中,回车符是由两个字符来表示\r\n
\t:制表符,相当于键盘上tab键
2、赋值运算符
符号:
= , +=, -=, *=, /=, %=
示例:
int a,b,c; a=b=c =3;
int a = 3; a+=5;等同运算a=a+5;
思考:
short s = 3;
s = s + 2;//编译失败,因为s会被提升为int类型,运算后的结果还是int类型,无法复制给short类型
s += 2;//编译通过,因为+=运算符在给s赋值时 ,自动完成了强转操作。
3、比较运算符
注意:
1:比较运算符的结果都是boolean型,也就是要么是true,要么是false。
2:比较运算符“==”不能误写成“=” 。
4、逻辑运算符
&:只要两边的boolean表达式结果,有一个为false,那么结果就是false,只有两边都为true,结果为true。
|:两边只要有一个为true,结果为true,只有两边都为false,结果为false。
^:异或:两边相同结果是false,两边不同结果是true
(1)逻辑运算符用于连接布尔型表达式,在Java中不可以写成3
(2)“&”和“&&”的区别:
单&时,左边无论真假,右边都进行运算;
双&时,如果左边为真,右边参与运算,如果左边为假,那么右边不参与运算。
“|”和“||”的区别同理,双或时,左边为真,右边不参与运算。
(3)异或( ^ )与或( | )的不同之处是:当左右都为true时,结果为false。
5、位运算符
<<:相当于乘以2的移动的位数次幂
>>:相当于除以2的移动的位数次幂
移n位,就是对乘以或者除以2的n次幂。
位运算直接对二进制进行运算。
运算时,最快的运算是位运算。
一个数异或同一个数两次,结果还是那个数。
练习题:
1、最有效的方法算出2乘以8等于几?(面试题)
答:2<<3
2、对两个整数变量的值进行互换
第一种方式:
class SwapDemo1
{
public static void main(String[] args)
{
int x = 88;//定义x和y的值
int y = 77;
//第一种方式
int temp = 0;//定义第三方变量
temp = x;//将x的值赋给temp
x = y;//将y的值赋给x
y = temp;//将temp(也就是原来x的值)的值赋给y
System.out.println("x="+x+",y="+y);
}
}
第二种方式:
class SwapDemo2
{
public static void main(String[] args)
{
int x = 88;//定义x和y的值
int y = 77;
//第二种方式
x = x ^ y;//将x异或y的值赋给x
y = x ^ y;//相当于y=x^y^y,即y=x
x = x ^ y;//相当于x=x^x^y,即x=y
System.out.println("x="+x+",y="+y);
}
}
第三种方式:
class SwapDemo3
{
public static void main(String[] args)
{
int x = 88;//定义x和y的值
int y = 77;
//第三种方式
x = x + y;//将x和y相加的结果赋给x
y = x - y;//相当于y=x+y-y,即y=x
x = x - y;//相当于x=x-(x-y),即x=y
System.out.println("x="+x+",y="+y);
}
}
6、三元运算符
格式:
(条件表达式)?表达式1:表达式2;
如果条件为true,运算后的结果是表达式1;
如果条件为false,运算后的结果是表达式2;
示例:
获取两个数中大数。
int x=3,y=4,z;
z = (x>y)?x:y;//z变量存储的就是两个数的大数。
好处:可以简化if else代码
弊端:因为是一个运算符,所以运算完要有一个结果
class OperatorDemo2
{
public static void main(String[] args)
{
int x = 100;
int y = (x>50)?100:50;
System.out.println("y="+y);
}
}
七、流程控制
1、判断结构
if语句:可以用于判断执行满足条件的语句。
格式:
if(条件表达式)
{
执行语句;
}
条件表达式:这里的表达式无论是简答还是复杂,结果是boolean类型。
执行流程:
当条件表达式里面的结果是true的时候,就执行里面的执行语句;
否则,没有任何操作。
注意:
if语句的条件表达式后面不能跟;,如果跟了就可能导致结果不是我们想要的。
if语句后面的大括号可以省略,只能是在执行语句是单条语句的时候,可以。
如果,if语句的控制体想控制多条语句,必须使用大括号。
即使是单条语句,也建议使用大括号。
三种格式:
(1)if(条件表达式)
{
执行语句;
}
(2)if(条件表达式)
{
执行语句;
}
else
{
执行语句;
}
if else结构简写格式: 变量 =(条件表达式)?表达式1:表达式2;
(3)if(条件表达式)
{
执行语句;
}
else if (条件表达式)
{
执行语句;
}
……
else
{
执行语句;
}
if语句特点:
a,每一种格式都是单条语句。
b,第二种格式与三元运算符的区别:三元运算符运算完要有值出现。好处是:可以写在其他表达式中。
c,条件表达式无论写成什么样子,只看最终的结构是否是true或者 false;
注意事项:
a:大括号问题,如果是一条语句,可以不写大括号,但是建议写上。
b:条件表达式无论是简单还是复杂,它的结构都是boolean类型。
c:只有if后面才有条件表达式。
d:分号问题,不要在if条件表达式后面直接加;
e:每种语句都是一个整体。
f:if语句在赋值的情况下可以使用三元运算符简化。
if语句练习:
class IfTest
/*
需求:根据用于指定月份,打印该月份所属季节
3,4,5,春季 6,7,8,夏季 9,10,11,秋季 1,2,12冬季
*/
{
public static void main(String[] args)
{
int x = 3;
if(x>12 && x<1)
System.out.println(x+"月份不存在");
else if(x>=3 && x<=5)
System.out.println(x+"春季");
else if(x>=6 && x<=8)
System.out.println(x+"夏季");
else if(x>=9 && x<=11)
System.out.println(x+"秋季");
else
System.out.println(x+"冬季");
}
}
2、选择结构
switch语句
格式:
switch(表达式)
{
case 取值1:
执行语句;
break;
case 取值2:
执行语句;
break;
…...
default:
执行语句;
break;
}
switch语句特点:
a,switch语句选择的类型只有四种:byte,short,int , char。
JDK5以后,可以使用枚举
JDK7以后,可以使用String
b, case后面跟的是值,将来表达式里面的内容要和这个值进行比较。如果,匹配,就执行该case所控制的语句。case之间与default没有顺序。先执行第一个case,没有匹配的case执行default。
c,结束switch语句的两种情况:遇到break,执行到switch语句结束。
d, default:假如没有匹配的情况存在,那么,我们就执行default。它类似于if语句中的else。如果匹配的case或者default没有对应的break,那么程序会继续向下执行,运行可以执行的语句,直到遇到break或者switch结尾结束。
注意事项:
a:case和default在写的时候,没有顺序关系。但是,建议按照格式写。执行的时候,会先执行case,如果没有匹配,在执行default。
b:case穿透问题。
练习:
class SwitchTest
/*
需求:根据用于指定月份,打印该月份所属季节
3,4,5,春季 6,7,8,夏季 9,10,11,秋季 1,2,12冬季
*/
{
public static void main(String[] args)
{
int x = 3;
switch(x)
{
case 3:
case 4:
case 5:
System.out.println(x+"春季");
break;
case 6:
case 7:
case 8:
System.out.println(x+"夏季");
break;
case 9:
case 10:
case 11:
System.out.println(x+"秋季");
break;
case 12:
case 1:
case 2:
System.out.println(x+"冬季");
break;
default:
System.out.println("您输入的"+x+"月份不存在");
}
}
}
if和 switch语句都什么时候使用?
答:如果判断的具体数值不多,而且符合byte short int char这四种类型,虽然两种语句都可以使用,建议使用switch语句,因为效率稍高。
其他情况:对区间判断,对结果为boolean类型判断,使用if,if的适用范围更广。
3、循环结构
通过while,do...while,for三种循环体现。
A:while格式:
while(条件表达式)
{
执行语句;
}
执行流程:
A:首先判断条件表达式是否成立:
如果是true,就执行语句。
否则不执行语句。
B:执行语句后,再次回到A
while语句和for是可以等价转换的。区别在于:
for(初始化表达式;循环条件表达式;循环后的操作表达式)
{
执行语句;
}
如果转换成while,就应该如下写:
初始化表达式;
while(循环条件表达式)
{
执行语句;
循环后的操作表达式;
}
重要的区别:
区别在于,在for里面定义过的初始化表达式的值,在for循环结束后,不能再被使用。
而while循环里面操作后,循环即使结束了,初始化变量还可以继续被使用。
一般推荐使用for循环。
class WhileDemo
{
public static void main(String[] args)
{
int x = 1;
while(x<=10)
{
System.out.println(x);
x++;
}
/*
for(int x=1; x<=10; x++)
{
System.out.println(x);
}*/
System.out.println("x="+x);
}
}
B:do...while格式
do{
执行语句;
}while(条件表达式);
注意:
执行流程:
这种循环和其他两种循环的区别在于,他首先会执行一次执行语句,再次进行条件判断。
如果为true,就继续执行,否则,就结束循环。
class DoWhileDemo
{
public static void main(String[] args)
{
//输出1-10的数据
int x = 1;
do
{
System.out.println(x);
x++;
}
while (x<=10);
}
}
C:for格式
for循环的基本格式:
for(初始化表达式;循环条件表达式;循环后的操作表达式)
{
执行语句;
}
初始化表达式:一般都是定义一个变量。只执行1次。
循环条件表达式:一般都是一个判断条件。执行1次以上。
循环后的操作表达式:一般是一个增量表达式。++,--。可能1次都没有。
执行流程:
A:首先执行初始化表达式,
B:其次执行循环条件表达式,
如果是true,就执行语句,
否则,for循环结束。
C:执行语句后,执行循环后的操作表达式,回到B继续
D:注意事项:
a:do...while循环至少执行一次循环体。
b:while和for循环可以等价转换。
class ForDemo
{
public static void main(String[] args)
{
//需求:请给我输出1-10之间的整型数据。
for(int x=1; x<=10; x++)
{
System.out.println(x);
}
System.out.println("**********************");
//需求:请输出10-1。怎么做
for(int x=10; x>=1; x--)
{
System.out.println(x);
}
}
}
语句的使用场景(理解):
(1)什么时候使用变量?当需要一个不确定的数据的时候,就使用变量。
(2)判断:
if和switch
if语句可以用于:可以是简单的条件表达式,还可以是几个常量的判断,还可以是一个范围的判断。
switch:可以是几个常量的判断,可以是范围的判断,范围要小。
if和while:
if判断条件只执行一次。
while判断条件执行多次。
(3)循环的使用:
使用循环,最好选择for循环。有些情况下,可以使用while循环。可以让代码简洁一些。
如果初始化的变量在循环结束后,还要被使用,建议使用while。
int x = 1;
while(x<=100){}
for(;x<=100; x++)
{
}