二:java语法基础
1、关键字:其实就是某种语言赋予了特殊含义的单词,全部都是小写。
2、标示符:其实就是在程序中自定义的名称,比如类名,变量名,包含 0-9、a-z、$、_ ;
标识符的规矩:
1),数字不可以开头。
2),不可以使用关键字。
3、命名规范
包名:多单词组成时所有字母都小写。
例如:aaabbbccc
变量名和函数名:多单词组成时,第一个单词首字母小写,第二个单词开始每个单词首字母大写。
例如:aaaBbbCcc
4、注释
1、 单行注释 格式: //……
2、 多行注释 格式: /* …… */
3、 文档注释 格式:/** …… */
5、常量:
1、 整数常量:所有整数。
2、 小数常量:所有小数。
3、 布尔(boolean)型常量:只有两个数值:true、false。
4、 字符常量:将一个数字字母或者符号用单引号( ' ' )标识,如:'a'。
5、 字符串常量:将一个或者多个字符用双引号("")标识,如:"hello world"、"a"、""(空字符串)。
6、 null常量:只有一个数值就是:null。
7、进制
二进制:0-1,满2进1。
八进制:0-7,满8进1,用0开头表示,如:012。
十进制:0-9,满10进1。
十六进制:0-9,A-F,满16进1,用0x开头表示。如:0x4a2c。
6、进制转换
1. 十进制转二进制。
原理:对十进制数进行除2运算。
2. 二进制转十进制。
原理:二进制乘以2的过程。
3. 十进制转八进制。
原理:八进制,其实就是二进制位,3个二进制位,1个八进制位。
4. 十进制转十六进制。
原理:十六进制,其实就是二进制位,4个二进制位,1个十六进制位。
7、变量:就是内存中的一个存储空间,用于存储常量数据。
变量定义一次以后,不能再重新定义一次;//int i=3;int i=8
特点:方便于运算。因为有些数据不确定。所以确定该数据的名词和存储空间。
格式:数据类型 变量名 = 初始化值;
例如:int b = 3;(格式是固定的,记住格式,以不变应万变)
什么时候定义变量?
当数据不确定的时候,就定义变量。
变量的作用域和生存期:
变量的作用域:{之间}
生命周期:变量从定义的位置开始就在内存中活了,变量到达它所在的作用域的时候就在内存中消失了;
9、数据类型:
当数据定义了明确的数据类型后,它将在内存空间中分配不同大小的内存空间,
整数类型默认为:int
小数类型默认为:double
所有的byte、short、char数据类型将被提升为int类型
10、强制类型转换
类型转换有两种:自动类型转换(隐式类型转换):不需要我们手动进行类型转换
强制类型转换(显示类型转换):需要我们手动进行强转,否则不能运行
表达式的数据类型自动提升:
所有的byte型、short型和char的值将被提升到int型。
如果一个操作数是long型,计算结果就是long型;
如果一个操作数是float型,计算结果就是float型;
如果一个操作数是double型,计算结果就是double型。
11、转义字符:通过\ 来转变后面字母或者符号的含义。
\n:换行。
\b:退格。相当于backspace。
\r:按下回车键。window系统,回车符是由两个字符来表示\r\n。
\t:制表符。相当于tab键。
System.out.println("hello \t world");
//System.out.println("/”hello java/”");//输出是:”hello java”
System.out.println("\\hello\\");//输出是:\hello\
char ch = '\'';//OK,因为有转义字符,有意义,
12、运算符:
1)、算术运算符。
+ - * / % ++ --
/ :除数与整除数都是整数就是整除。小数点会被忽略
%:取模就是取余数,结果正负要看左边,//-5%3 //-2
+:连接符。
++:参照当前表达式,前+就是先+,后+就是运算后+
- - :参照当前表达式,前-就是先-,后+就是运算后-
2)、赋值运算符。
= += -= *= /= %=
+=:s+=4//s=s+4
注意:a+=4、a=a+4
a+=4:在运行中间进行了自动类型转换
a=a+4:这里要进行一次强转才不会报错,因为4为int类型,而a不是int类型,相加后可能会造成精度损失
3)、比较运算符。
== != < > <= >=
比较运算符的结果都是boolean型,所以运算完的结果,要么是true,要么是false。
注:比较运算符“==”不能误写成“=” 。
特点:
4)、逻辑运算符。
& | ^ ! && ||
逻辑运算符除了 ! 外都是用于连接两个boolean类型表达式。
& 与:只要有一边为false结果就会false,反之true
| 或:只要又一边为true结果就会true,反之false
^ 异或:和或有点不一样。
两边结果一样,就为false。
两边结果不一样,就为true.
& 和 &&区别:
& 与:无论左边结果是什么,右边都参与运算。
&& 短路与,如果左边为false,那么右边不参数与运算。左边为true才参加运算。
| 和|| 区别:
| 或:两边都运算。
||:短路或,如果左边为true,那么右边不参与运算。左边为false才进行运算。
5)、位运算符:用于操作二进制位的运算符。
& | ^ << >> >>>(无符号右移)
&: 6 & 3 = 2
110
& 011
-------
010 ==2
|: 6 | 3 = 7
110
| 011
--------
111 = 7
^: 6 ^ 3 = 5
110
^ 011
-------
101
<<: 左移几位其实就是该数据乘以2的几次方。
3 << 2 = 12 相当于 3 * 2(2) = 12
000011
001100
3 << 3 = 24 相当于 3 * 2(3) = 24
00011
11000
>>: 右移几位其实就是该数据除以2的几次幂。
6 >> 1 = 3 相当于 6/2(1)=3
110
011
6 >> 2 = 1 相当于 6/2(2) = 1
110
001
注: >>:对于高位出现的空位,原来高位是什么,就用什么补这个空位。
>>>:无符号右移,数据进行右移时,高位出现的空位,无论原高位是什么,空位都用0补。
6)、三元运算符
格式(条件表达式)?表达式1:表达式2
如果表达式为true,结果是表达式1
如果表达式为false,结果是表达式22;
Int i = 3,y;
y = (i>4)?100:200;//100
13、语句
If switch do while while for
1、格式一: 格式二:
if ( 条件表达式 ) if ( 条件表达式 )
{ {
执行语句; 执行语句;
} }else{
执行语句;
}
注:三元运算符也可实现if语句功能。
2、switch(表达式)格式:
{
case 取值1:
执行语句;
break;
case 取值2:
执行语句;
break;
…...
default:
执行语句;
break;
}
switch语句特点:
1、switch语句选择的类型只有四种:byte,short,int,char。
2、case与default没有顺序。先执行第一个case,没有匹配的case执行default。
3、结束switch语句的两种情况:①遇到break,②执行到switch语句结束。
4、如果匹配的case或者default没有对应的break,那么程序会继续向下执行,运行可以执行的语句,直到遇到break或者switch结尾结束。
5、进入switch语句后,执行顺序是先执行case,然后从上到下,最后再执行default。即使default放在case上面,执行顺序也不变。
3、while语句格式:
while( 条件表达式 ) do
{ {
执行语句; 执行语句;
} }while(表达式)
do while循环,无论表达式是否成立,循环体都至少执行一次。
While循环如果表达式不成立,那这个循环体将不会执行。
4、for语句格式
for(初始化表达式;循环条件表达式;循环后的操作表达式)
{
执行语句;循环体
}
执行顺序:1、先对初始化表达式赋初值,
2、判断循环条件表达式是否满足给定的条件,若满足循环条件
3、则执行循环体语句,
4、最后执行循环后的操作表达式,然后进入第二次循环
初始化表达式和循环后的操作表达式,可以是多个表达式,通过逗号隔开就可以for(int a = 1,b =2; a < 2 & b < 3; a++,b++)
这些语句什么时候用?
当判断固定个数的值的时候,可以使用if,也可以使用switch。
但是建议使用switch,效率相对较高。
while和for可以进行互换。
区别在于:如果需要定义变量控制循环次数。建议使用for。因为for循环完毕,变量在内存中释放。
break:跳出循环
break语句单独存在时,下面不要定义其他语句,因为执行不到,编译会失败。当循环嵌套时,break只跳出当前所在循环。要跳出嵌套中的外部循环,只要给循环起名字即可,这个名字称之为标号。
continue:跳出当次循环
作用:结束本次循环,继续下次循环。该语句单独存在时,下面不可以定义语句,执行不到。
14,、函 数:为了提高代码的复用性,可以将其定义成一个单独的功能,该功能的体现就是java中的函数。函数就是体现之一。
java中的函数的定义格式:
修饰符 返回值类型 函数名(参数类型 形式参数1,参数类型 形式参数1,…){
执行语句;
return 返回值;
}
当函数没有具体的返回值时,返回的返回值类型用void关键字表示。
如果函数的返回值类型是void时,return语句可以省略不写的,系统会帮你自动加上。
return的作用:结束函数。结束功能。
如何定义一个函数?
函数其实就是一个功能,定义函数就是实现功能,通过两个明确来完成:
1)、明确该功能的运算完的结果,其实是在明确这个函数的返回值类型。
2)、在实现该功能的过程中是否有未知内容参与了运算,其实就是在明确这个函数的参数列表(参数类型&参数个数)。
函数的作用:
1)、用于定义功能。
2)、用于封装代码提高代码的复用性。
注意:函数中只能调用函数,不能定义函数。
主函数:
1)、保证该类的独立运行。
2)、因为它是程序的入口。
3)、因为它在被jvm调用。
函数定义名称是为什么呢?
答:1)、为了对该功能进行标示,方便于调用。
2)、为了通过名称就可以明确函数的功能,为了增加代码的阅读性。
重载的定义是:在一个类中,如果出现了两个或者两个以上的同名函数,只要它们的参数的个数,或者参数的类型不同,即可称之为该函数重载了。
如何区分重载:当函数同名时,只看参数列表。和返回值类型没关系。
7,数 组:用于存储同一类型数据的一个容器。好处:可以对该容器中的数据进行编号,从0开始。数组用于封装数据,就是一个具体的实体。
如何在java中表现一个数组呢?两种表现形式。
1)、元素类型[] 变量名 = new 元素类型[元素的个数];
2)、元素类型[] 变量名 = {元素1,元素2...};
元素类型[] 变量名 = new 元素类型[]{元素1,元素2...};
注:java分了5片内存。
1:寄存器。2:本地方法区。3:方法区。4:栈。5:堆。
栈:存储的都是局部变量 ( 函数中定义的变量,函数上的参数,语句中的变量 );
只要数据运算完成所在的区域结束,该数据就会被释放。
堆:用于存储数组和对象,也就是实体。啥是实体啊?就是用于封装多个数据的。
1:每一个实体都有内存首地址值。
2:堆内存中的变量都有默认初始化值。因为数据类型不同,值也不一样。
3:垃圾回收机制。