黑马程序员--Java基础语法(一)

时间:2021-02-27 00:30:14

------- android培训java培训、期待与您交流! ----------


1 关键字

        (1)Java语言赋予特殊意义的单词。

        (2)特点:

                  Java语言中的所有关键字全部是小写。

        (3)注意事项:

                  gotoconst作为保留字(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进制,表示逢x1

        (2)Java中整数常量的表示

        inta = 15

        inta = 0b1111

        inta = 017;

        inta = 0xF;

                  A二进制0,1组成。以0b开头。JDK7以后的新特性。

                  B八进制0-7组成。以0开头。

                  C十进制0-9组成。默认就是十进制。

                  D十六进制0-9A-F(不区分大小写)组成,以0x开头。

        (3)进制转换:

                 A其他进制到十进制

                           系数:就是每一位上的数据。

                           基数:X进制,基数就是X

                           权:在右边,从0开始编号,对应位上的编号即为该位的权。

                           结果:把系数基数的权次幂相加即可

                  B十进制到其他进制

                           除基取余,直到商为0,余数反转

                  C快速转换

                           a8421码。

                           b二进制--八进制(3位组合)

                           c二进制--十六进制(4位组合)

5.     变量

  1. 定义:程序的运行过程中,在指定范围内发生改变的量。

理解:

    1. 内存中的一个存储区域

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

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

    4. 变量就如同数学中的未知数

  1. 为什么要定义变量

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

  2. 格式

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

                  变量的定义格式:

                           数据类型变量名;

                           变量名 =初始化值;

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

                           数据类型变量1,变量2,变量3=10;

                  举例:

                           方式1byte b = 10;

                           方式2byte b;

                                           b = 10;

6.     数据类型

        (1)分类

        (2)基本类型数据长度

                                     

数据类型

关键字

内存中占字节

取值范围

默认值

布尔型

boolean

没有明确指定

truefalse

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


       注意

  1. 整数默认是int类型。long类型需要加L或者l后缀。

    如:

    int i1 = 600; //正确    

    long l1 = 88888888888L; //必须加l否则会出错

    long l2=600;//不会报错600int范围内

  2. 浮点数默认是double类型。float类型需要加F或者f后缀

          double d = 12345.6; //正确  

          float f = 12.3f; //必须加f否则会出错

   c.Java字符采用Unicode编码,每个字符占两个字节,因而可用十六进制编码形式表示。注:Unicode是全球语言统一编码

       d.  boolean 类型适于逻辑运算,一般用于程序流程控制

    e.boolean类型数据只允许取值truefalse,不可以0或非0的整数替代truefalse,这点和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)   分类:

                  算术运算符

                  赋值运算符

                  关系运算符

                  逻辑运算符

                  位运算符

                  三元运算符

 算术运算符

    1. +:正号,加法,字符串连接符。

                           “+”除字符串相加功能外,还能把非字符串转换成字符串

                           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

 

        逻辑运算符

                &,|,!,^,&&,||

                  &:falsefalse

                  |:truetrue

                  !:truefalse,falsetrue

                  ^:相同false,不同true

                  &&:falsefalse

                  ||:truetrue

                  &&&的区别是:如果左边有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;

                           }       

                           执行流程:

                                    如果条件表达式1true,就执行语句体1

                                    如果条件表达式2true,就执行语句体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类型)

                  {

                           case1:

                                    语句体1;

                                   break;

                           case2:

                                    语句体2;

                                    break;

                           case3:

                                    语句体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或者执行到程序的末尾。

        switchif的区别

  1. 如果对几个具体的值进行判断,可以使用switch,也可以使用if

  2. 如果是对区间进行判断或者boolean结果的判断,只能用if。因为switch里面不接收boolean的值

循环结构

代表语句:while do while for

  1. while语句格式:

    while(条件表达式){

    执行语句;

    }

  2. do while语句格式:

    do{

    执行语句;

    }while(条件表达式);

do while特点:

是条件无论是否满足,

循环体至少执行一次。

        定义循环的前提条件:

1,明确循环条件

2,控制循环次数

  1. for(变量初始化;循环判断条件;循环变量变化){

                  执行循环体

                }

      注:

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

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

  3. 最简单无限循环格式: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语句:应用于循环结构。

注:

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

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

  3. continue语句是结束本次循环继续下次循环。

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


例:

 //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>

语句总结:

什么情况下,使用哪个语句

  1. 当对某几个值进行判断的时候,可以使用if语句,或者switch语句,建议switch,但是,使用switch要注意,它只能操作五种类型的值,byte shortintcharString如果是五种类型以外的值,需要使用if

  2. 如果对数据区间进行判断,或者对运算结果是boolean类型的进行判断。使用if语句。

  3. 当需要某些语句执行很多次的时候,使用循环结构。如果定义变量只为循环增量存在时,可以使用for语句。(如果对一个条件进行判断使用if//如果对该条件进行多次判断,使用while)

  4. 如果要结束循环,可以控制循环条件,或者通过break语句完成。如果要控制循环的流程,是否该继续执行,可以通过continue或者break来完成。