黑马程序员——Java语言基础

时间:2022-05-28 12:32:47
------- android培训java培训、期待与您交流! ----------



1.关键字

定义:被Java语言赋予了特殊含义的单词

特点:关键字中所有字母都为小写(这是Java的书写规范之一)

2.标识符

标识符就是在程序中自定义的一些名称。由26个英文字母大小写,数字:0-9符号:_ $ 组成。

定义合法标识符规则:

(1)数字不可以开头

(2)不可以使用关键字

Java严格区分大小写,此外起名字的时候尽量有意义,提高阅读性

*注意:main也是一个标识符,但是JVM认识它和它的格式,它并不是关键字

3.注释

用于注解说明解释程序的文字就是注释。注释提高了代码的阅读性。对于初学者来说应该养成习惯先写注释,再编写代码。三种注释方式:

3.1 单行注释

//单行注释

//后到本行结束的所有字符会被编译器忽略;


 

3.2 多行注释

/*

多行注释

多行注释

多行注释

多行注释

……

这之间的所有字符都会被编译器忽略

*/


 

3.3 文档注释

/**

文档注释

……

这之间的所有字符都会被编译器忽略

*/


这种注释方式是Java特有的,对于文档注释,其中注释内容可以被JDK提供的工具 javadoc 所解析,生成一套以网页文件形式体现的该程序的说明文档。

*注意:多行注释和文档注释不可以嵌套

4.常量与变量

4.1 常量

在Java中,利用关键字final来指示常量,关键字final表示这个变量只能被赋值一次,一旦被赋值之后,就不能再更改,习惯上,常量名使用全大写。(需要注意,类常量的定义位于main方法的外部。以便于在同一个类的其他方法中也可以使用这个常量。)

(1)整数常量。所有整数

(2)小数常量。所有小数

(3)布尔(boolean)型常量。较为特有,只有两个数值。true与false。

(4)字符常量。将一个数字字母或者符号用单引号( ' ' )标识。

(5)字符串常量。将一个或者多个字符用双引号(“ ”)标识。

(6)null常量。只有一个数值就是:null.

4.2 变量

变量的概念:

l       内存中的一个存储区域

l       该区域有自己的名称(变量名)和类型(数据类型)

l       该区域的数据可以在同一类型范围内不断变化

为什么要定义变量?

用来不断的存放同一类型的常量,并可以重复使用

使用变量注意:

l       变量的作用范围(一对{}之间有效)    

l       初始化值

定义变量的格式:

数据类型    变量名  =  初始化值;

注:格式是固定的,记住格式,以不变应万变。

理解:变量就如同数学中的未知数。

什么时候定义变量?

一旦数据不确定,需要对数据进行存储的时候

声明一个变量之后必须用赋值语句对变量进行赋值进行显式初始化。千万不要使用未被初始化的变量。

*注意:对于字符串,要搞清楚空串与Null串的区别。空串””是指长度为0的字符串。可以调用if(str.length() == 0)或者if(str.equals(“”))来检查字符串是否为空。空串是一个对象,有着自己的串长度(0)和内容(空)。String变量还可以存放null,这表示,目前没有任何对象与该变量关联。要检查一个字符串是否为null,要使用以下的条件:if(str== null)

4.3 数据类型

byte占一个字节(八个bit位),short占2个字节,int占4个字节,long占8个字节。char占2个字节,一个中文字符是2个字节,因此一个中文字也能够用char来装。float占4个字节,double占8个字节。

4.4 数据类型的转换

l       自动类型转换(也叫隐式类型转换) 

l       强制类型转换(也叫显式类型转换)

自动类型转换的例子:一个byte占一个八位,一个int占4个八位,在byte与int相加的时候,byte被自动提升为int类型,用4个八位装,因此,运算结果也是int类型,但是要把运算的结果赋值给一个byte类型,就可能会造成精度的丢失。

byte b = 123;

b = b + 4;

什么时候要用强制类型转换?强制类型转换例子:

byte b = 3;

b = b + 4;//报错

b = (byte)(b+4);//强制类型转换,强制将b+4的结果转换为byte类型,再赋值给b。

 

表达式的数据类型自动提升

所有的byte型、short型和char的值将被提升到int型。

如果一个操作数是long型,计算结果就是long型;

如果一个操作数是float型,计算结果就是float型;

如果一个操作数是double型,计算结果就是double型。

总而言之:

小转大:自动(隐式)类型转换

大转小:显式(强制)类型转换

5.运算符

5.1算术运算符

如果对负数取模,可以把模数负号忽略不记,如:5%-2=1。但被模数是负数就另当别论。

对于除号“/”,它的整数除和小数除是有区别的:整数之间做除法时,只保留整数部分而舍弃小数部分。

5.2赋值运算符

= , +=, -=, *=, /=, %=

int a,b,c;

a=b=c =3;

int a = 3; 

a+=5;//等同运算a=a+5;

5.3比较运算符

*注意:=是赋值运算符,而不是比较运算符,==才是。比较运算符的结果都是boolean型,也就是要么是true,要么是false

 

5.4逻辑运算符

逻辑运算符用于连接布尔型表达式,在Java中不可以写成3<x<6,应该写成x>3 & x<6 。

“&”和“&&”的区别:

单&时,左边无论真假,右边都进行运算;

双&时,如果左边为真,右边参与运算,如果左边为假,那么右边不参与运算。

“|”和“||”的区别同理,双或时,左边为真,右边不参与运算。

异或( ^ )与或( | )的不同之处是:当左右都为true时,结果为false。

5.5位运算符

位运算符

运算符

运算

范例

<< 

左移

3 << 2 = 12 --> 3*2*2=12

>> 

右移

3 >> 1 = 1  --> 3/2=1

>>> 

无符号右移

3 >>> 1 = 1 --> 3/2=1

&

与运算

6 & 3 = 2

|

或运算

6 | 3 = 7

^

异或运算

6 ^ 3 = 5

~

反码

~6 = -7

位运算是直接对二进制进行运算。是最高效的运算。一个数左移越移越大,右移越移越小。且都按2的倍数变化。

3<<2 = 3 * 2² = 12

3<<3 = 3 * 2³ = 24

左移:其实就是乘以2的移动的位数次幂。

右移:其实就是除以2的移动的位数次幂

>>>运算符用0填充高位,>>运算符用符号位填充高位,没有<<<运算符。

&参与位运算,0视为假,1视为真。

~反码就是取反,0变为1,1变为0。如果要求6的负数,只要6取反+1即可,~6+1

5.6 三元运算符

(条件表达式)?表达式1:表达式2;

如果条件为true,运算后的结果是表达式1;

如果条件为false,运算后的结果是表达式2;

z = (x > y) ? x : y ;//获取两个数中较大的那个值

 

6.程序流程控制

6.1 判断结构

if语句的三种格式:

第一种:

if(条件表达式)

{

执行语句;

}


第二种:

if(条件表达式)

{

执行语句;

}

else

{

执行语句;

}


第三种:

if(条件表达式)

{

执行语句;

}

else if (条件表达式)

{

执行语句;

}

……

else

{

执行语句;

}


if语句的特点:

a,每一种格式都是单条语句。

b,第二种格式与三元运算符的区别:三元运算符运算完要有值出现。好处是:可以写在其他表达式中。

c,条件表达式无论写成什么样子,只看最终的结构是否是true 或者 false;

6.2 选择结构

switch语句格式:

//表达式只接受byte,short,int,char类型,Java SE7后也接受字符串

switch(表达式) {

case 取值1:

执行语句;

break;

case 取值2:

执行语句;

break;

…...

default:

执行语句;

break;

}


*要注意:这些case没有顺序,但是无论这些case怎么排列,default都是最后一个执行的。如果在一个case内部没有写break语句,会造成case穿透。如果匹配的case或者default没有对应的break,那么程序会继续向下执行,运行可以执行的语句,直到遇到break或者switch结尾结束。

什么时候选择if什么时候选择switch呢?

数值不多且满足四种类型的时候,建议用switch,效率稍高。

对区间进行判断,对结果为Boolean类型的判断,使用if(if的使用范围更广)

 

6.3 循环结构

6.3.1 while循环

while语句格式:

while(条件表达式)

{

执行语句;

}


6.3.2 do while循环

do while语句格式:

do

{

执行语句;

}while(条件表达式);


*dowhile的特点就是无论条件是否满足,循环体至少执行一次。

while必须先判断条件,只有满足条件才能执行循环体。

6.3.3 for循环

for(初始化表达式;循环条件表达式;循环后的操作表达式)

{

执行语句;(循环体)

}


操作表达式和初始化表达式如果有多个则需要用逗号分隔开。

循环条件表达式结果要么为真,要么为假。以下代码无法通过编译的。

<pre name="code" class="java">for(System.out.println("a");System.out.println("b") ; System.out.println("c")) {System.out.println("d"); }


 


*注:

a,for里面的连个表达式运行的顺序,初始化表达式只读一次,判断循环条件,为真就执行循环体,然后再执行循环后的操作表达式,接着继续判断循环条件,重复找个过程,直到条件不满足为止。

b,whilefor可以互换区别在于for为了循环而定义的变量在for循环结束就是在内存中释放。而while循环使用的变量在循环结束后还可以继续使用。

c,最简单无限循环格式:while(true) , for(;;),无限循环存在的原因是并不知道循环多少次,而是根据某些条件,来控制循环。

 

累加思想:原理是通过变量记录循环操作结果

技术其思想:原理是通过一个变量记录数据的状态变化,也通过循环完成

 

6.3.4 其他流程控制

break语句:应用于选择结构(switch)和循环结构

continue语句:应用于循环结构

*注:

a,这两个语句离开应用范围,存在是没有意义的。

b,这个两个语句单独存在下面都不可以有语句,因为执行不到。

c,continue语句是结束本次循环继续下次循环。

d,标号的出现,可以让这两个语句作用于指定的范围。

标号的应用举例:

              w:for(inti = 0 ; i < 10 ; i ++) {

for(int j = 0 ; j < 10 ; j ++){

if(i*j== 16) {

System.out.println("i= " + i);

System.out.println("j= " + j);

breakw;//打印第一组乘积为16的数,跳出w循环

}

}

}