黑马程序员——Java基础语法(一)---数据、数值类型、运算符、程序流程控制语句和循环结构

时间:2022-07-08 00:29:38

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

一、数据、数值类型和运算符

1:常量

       (1)在程序的运行过程中,其值是不可以发生改变的量。

       (2)常量的分类:

              1:字面值常量

                     1:整数常量

                            12,-23

                     2:实数常量

                            12.5,-65.43

                     3:字符常量

                            'a','A','0'

                     4:字符串常量

                            "hello"

                     5:布尔常量

                            true,false

                     6:空常量

                            null

              2:自定义常量

       (3)常量可以直接被输出。 

2:进制

       (1)是一种进位的方式。X进制,表示逢x进1。

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

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

              2:八进制 由0-7组成。以0开头。

              3:十进制 由0-9组成。默认就是十进制。

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

       (3)进制转换:

              1:其他进制到十进制

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

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

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

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

                     二进制:1011

                            十进制:

                     八进制:74

                            十进制:

                     十六进制:a3

                            十进制:

              2:十进制到其他进制

                     除基取余,直到商为0,余数由下向上取值。

                      十进制:60

                     结果:

                            二进制

                            八进制

                            十六进制 

              3:快速转换

                     1:8421码。

                     2:二进制--八进制(3位组合)

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

3:变量

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

       (2)格式:

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

 

              变形格式:

                     数据类型 变量名;

                     变量名 = 初始化值; 

              举例:

                     方式1: byte b = 10;

 

                     方式2: byte b;

                            b= 10; 

4:数据类型

       (1)分类

              基本类型:4类8种。

              引用类型:类(string),接口,数组。

       (2)基本类型(白茶尹少,浮字不精)

              整型:

                     byte 1

                     short2

                     int   4

                     long 8

              浮点型:

                     float 4

                     double     8

              字符型:

                     char 2

              布尔型:             

                     boolean不明确。可以认为是1个字节。

                           注意:

                     整数默认是int类型。long类型需要加L或者l后缀(注意)。

                     浮点数默认是double类型。float类型需要加F或者f后缀(注意)。

       (3)类型转换

              1:boolean类型不参与转换。

              2:隐式转换(从小到大)

                     byte,short,char-- int -- long -- float -- double

              3:强制转换(从大到小)

                     格式:

                            (数据类型) 数据;

       (4)经典题

              byteb1 = 3;

              byteb2 = 4;

              byteb3 = b1 + b2;

              byteb4 = 3 + 4; 

5:运算符

       (1)就是把常量和变量连接的符号,一般参与运算使用。

       (2)分类:(自我识记:三罗汉(逻算),关护卫(赋位))

              算术运算符

              赋值运算符

              关系运算符

              逻辑运算符

              位运算符

              三元运算符

       (3)算术运算符

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

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

                     System.out.println("5+5="+5+5);//5+5=55

                     System.out.println(5+5+"=5+5");//10=5+5

               %:取得余数

                     左边如果大于右边,结果是余数。

                     左边如果小于右边,结果是左边。

                     左边如果等于右边,结果是0。

                      正负号跟左边一致。 

              ++/--:

                     ++其实相当于把数据+1

                      单独使用:

                            在数据的前后,结果一致。             

                     参与操作使用:

                            如果在数据的后边,数据先操作,在++/--

                            如果在数据的前边,数据先++/--,在操作。

       (4)赋值运算符

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

               inta = 10;

                     把10赋值给int类型的变量a。

               a+= 20;

                     把左边和右边的和赋值给左边。 

              注意事项:

                     a= a + 20;

                     a+= 20;

                     结果是等价的,理解不是等价的。

                      因为+=这种运算符,内含了强制类型转换功能。

                     比如:

                            shorts = 2;

                            s+=3;

                            等价于

                            s= (short)s+3

       (5)关系运算符

              ==,!=,>,>=,<,<= 

              特点:关系运算符的结果都是boolean类型。

                    请千万注意:== 不要写成 =

       (6)逻辑运算符

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

                           &:有false则false—0

              |:有true则true—1

              !:true变false,false变true

              ^:相同false,不同true 

              &&:有false则false

              ||:有true则true 

              &&和&的区别是:如果左边有false了,右边将不再执行。

              ||和|的区别是:如果左边有true了,右边将不再执行。 

              开发中常用:

                     &&,||,!(s+3);

二、运算符&程序流程控制语句

1:运算符

       (1)位运算符(了解)

              ^: 一个数据对同一个数据^两次,结果还是数据本身。

              举例:a ^ b ^ b = a

       (2)条件运算符(三目运算)

              格式:

                     条件表达式?表达式1:表达式2 

                     执行流程:

                            根据条件表达式返回的是true还是false,决定结果是什么。

                            如果是true,就把表达式1作为结果。

                            如果是false,就把表达式2作为结果。

              举例:

                     inta = 100;

                     intb = a > 50 ? 200 : 100;

                     请问b的值?200 

2:经典题

       (1)请用最有效率的代码写出2乘以8(位运算是最快的方法,计算机底层支持)

              2<<3

       (2)请交换两个变量。

              inta = 10;

              intb = 20; 

              开发:临时变量

                     inttemp = a;

                     a= b;

                     b= temp;

               考试:位^运算符

                     a= a ^ b;

                     b= a ^ a;

                     a= a ^ b; 

3:if语句

       (1)用于做判断使用的。

          常见于对某个范围进行判断,或者几个变量进行判断,还有就是boolean表达式的判断。

(2)格式:

       A:第一种格式

              if(条件表达式)

              {

                     语句体;

              } 

              执行流程:

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

                     否则,什么都不执行。 

B:第二种格式

       if(条件表达式)

       {

              语句体1;

       }

       else

       {

              语句体2;

       } 

       执行流程:

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

              否则,就执行语句体2;

 

       特殊:

              可以和条件表达式在某些情况下进行替换。

              一般是在赋值的情况下可以。

 

       举例:

              获取两个数中的最大值。 

C:第三种格式

       if(条件表达式1)

       {

              语句体1;

       }

       elseif(条件表达式2)

       {

              语句体2;

       }

       ...

       else

       {

              语句体n;

       }    

        执行流程:

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

              如果条件表达式2为true,就执行语句体2;

              ...

              否则,就执行语句体n;             

D:注意事项

       a:什么时候时候哪一种if语句。

              第一种格式在判断条件为一种情况下使用。

              第二种格式在判断条件为两种情况下使用。

              第三种格式在判断条件为多种情况下使用。

       b:每一种if语句其实都是一个整体,如果有地方执行了,

         其他的就不执行了。

       c:如果if或者else里面控制的语句体是一条语句,是可以省略大括号的,

         但是,如果是控制多条语句,就必须写上大括号。

         建议:永远写上大括号。

       d:大括号和分号一般不同时出现。 

E:作用域

       所有变量的定义只在它所属的大括号内有效。

       (3)案例:

              A:根据键盘录入的成绩,判断等级。

              B:根据键盘录入的月份,输出该月份所对应的季节。 

4:switch语句(掌握)

(1)用于做选择使用的。一般用于几个常量的判断。

       switch会把几个常量值直接加载到内存,在判断的时候,效率要比if高。

       所以,针对几个常量的判断,一般选择switch语句。

(2)switch语句的格式:

       switch(表达式)

       {

              case值1:

                     语句体1;

                     break;

              case值2:

                     语句体2;

                     break;

              case值3:

                     语句体3;

                     break;

              ...

              default:

                     语句体n;

                     break;    

       }

注:swhich(表达式)在JDK1.5中表达式可为枚举,在JDK1.7中表达式可为字符串(String)

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

5:Scanner的使用

       (1)Scanner是JDK5以后设计的用来接收键盘录入数据使用的。

       (2)目前我们要通过键盘录入int类型数据,必须按照如下步骤:

              A:导包

                     importjava.util.Scanner;

              B:创建对象,封装键盘录入

                     Scannersc = new Scanner(System.in);

              C:调用方法,获取数据

                     intnumber = sc.nextInt();

三、循环结构

1:循环

       (1)如果我们发现有很多重复的内容的时候,就该考虑使用循环改进代码。

          让我们代码看起来简洁了。

       (2)循环的组成

              A:循环体,就是要做的事情。

              B:初始化条件。一般定义的是一个初始变量

              C:判断条件。用于控制循环的结束。

              D:控制条件。用于控制变量的变化。一般都是一个++/--操作。

       (3)循环的分类:

              A:for

                     for(初始化条件;判断条件;控制条件)

                     {

                            循环体;

                     }

 

                     执行流程:

                            a:先执行初始化条件;

                            b:执行判断条件

                            c:根据判断条件的返回值:

                                   true:执行循环体。

                                   false:就结束循环。

                            d:最后执行控制条件。返回到b继续。 

              B:while

                     初始化条件;

                     while(判断条件)

                     {

                            循环体;

                            控制条件;

                     }                    

                     执行流程:

                            a:先执行初始化条件;

                            b:执行判断条件

                            c:根据判断条件的返回值:

                                   true:执行循环体。

                                   false:就结束循环。

                            d:最后执行控制条件。返回到b继续。

              C:do...while

                     初始化条件;

                     do{

                            循环体;

                            控制条件;

                     }while(判断条件); 

                     执行流程:

                            a:先执行初始化条件;

                            b:执行循环体和控制条件;

                            c:执行判断条件

                            d:根据返回值

                                   true:返回b。

                                   false:就结束循环。 

              注意:

                     a:一般使用for循环或者while循环。而且这两种循环是可以等价转换的。

                     b:do...while循环至少执行一次循环体。

       (4)案例:

              A:请在控制台输出5次"我爱Java"

class WhileDemo
{
publicstatic void main(String[] args)
{
//需求:把一句话打印5次:我爱Java
for(intx=0; x<5; x++)
{
System.out.println("我爱Java");
}
//System.out.println(x);
System.out.println("************");

//用while改进
inty = 0;
while(y<5)
{
System.out.println("我爱Java");
y++;
}
System.out.println(y);
}
}

 B:求1-10的和,改进位求1-100的和。

/*
请用while求1-100之和。
*/
class WhileTest
{
publicstatic void main(String[] args)
{
//先用for
intsum = 0;
for(intx=1; x<=100; x++)
{
//sum= sum + x;
sum+= x;
}
System.out.println("1-100之和:"+sum);
System.out.println("***************");

//用while
intresult = 0;
inty = 1;
while(y<=100)
{
result+=y;
y++;
}
System.out.println("1-100之和是:"+result);
}
}

              C:统计叠多少次,能叠成珠穆朗玛峰的高度。

/*
需求:我国最高山峰是珠穆朗玛峰,8848米。现在我有一张足够大的纸,它的厚度是0.01米。
请问,我折叠多少次,可以折成珠穆朗玛峰的高度。(思考题)

思路:
A:知道初始化条件是厚度0.01米,也就是1cm。
最终条件是8848m,也就是884800cm。
循环体的内容是厚度每次变为以前的2倍。
判断条件是厚度有没有超过最大值。
B:定义一个统计变量,用于记录次数。
每当判断条件成立,我就++。
统计变量的初始化值是0。
C:因为我不知道多少次,所以用while循环。
*/
class WhileTest2
{
publicstatic void main(String[] args)
{
//定义统计变量
intcount = 0;

//定义初始化条件
intstart = 1;
//定义最终条件
intend = 884800;

while(start<=end)
{
//统计一次
count++;

//厚度变化
start*=2;
}

System.out.println("我需要折叠次数是:"+count);
}
}

       (5)循环嵌套:

              A:也就是循环语句的循环体是一个循环语句。

              B:通过输出

                     ****

                     ****

                     ****

for(int x=0; x<6; x++)
{
for(inty=0; y<5; y++)
{
System.out.print("-");
}
System.out.println();
}

                我们不断的改进。发现了一个问题:

                     外循环控制行数,内循环控制列数。

       (6)案例:

              A:正三角形

                     内循环的判断条件:y<=x 

    for(intx=0; x<5; x++)
{
for(inty=0; y<=x; y++)
{
System.out.print("*");
}
System.out.println();
}<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);"> </span>

              B:倒三角形

                     内循环的初始化条件:y=x

     for(intx=0; x<5; x++)
{
for(inty=x; y<5; y++)
{
System.out.print("*");
}
System.out.println();
}


2:break和continue(重点)

       (1)有些时候,我们需要对循环进行一些控制终止,这个时候,就出现了两个关键字:

              break和continue

       (2)特点:

              A:它们都必须在循环中(break还可以在switch中。)。

                一般在循环的判断中。

              B:如果单独使用break和continue,后面是不能有语句的。

       (3)区别:

              A:break结束当前循环。

              B:continue结束本次循环,进入下一次循环。

       (4)如何退出嵌套循环:

              用带标签的循环。

              格式:

                     标签名:for(){

                                   for(){

                                          if()

                                          {

                                                 break标签名;

                                          }

                                   }

                            }

3:应用场景

       (1)变量:发现有一个数据是变化的时候,就要用变量。

       (2)if语句:如果是一个范围的判断,boolean类型的表达式的判断,几个数据的判断。

       (3)switch语句:几个数据的判断。一般这种情况,有限选择switch。

       (4)for语句:如果次数或者范围特别明确。(水仙花)

       (5)while语句:如果次数或者范围不明确。(珠穆朗玛峰)

/*
需求:
九九乘法表:

1*1=1
1*2=22*2=4
1*3=32*3=6 3*3=9
1*4=42*4=8 3*4=12 4*4=16
...
1*9=92*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81

转义字符:
\n 换行
\r 回车
\t tab键位置
*/
class ForForTest
{
publicstatic void main(String[] args)
{
for(intx=1; x<=9; x++)
{
for(inty=1; y<=x; y++)
{
System.out.print(y+"*"+x+"="+y*x+"\t");
}
System.out.println();
}
}
}

/*
打印出所有的"水仙花数"。
所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。例如:
153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。


思路:
A:"水仙花数"是指一个三位数,告诉我们范围了。100-999
B:153=1的三次方+5的三次方+3的三次方通过这个例子
一个数据的个位立方+十位立方+百位立方=该数据
C:如何获取个位,十位,百位的数据?
对于任意的数据x。获取个位怎么办呢?

153:

个:153%10 = 3
十:153/10%10 = 5
百:153/10/10%10 = 1
千:x/10/10/10%10 -- .........
*/
class FlowerDemo
{
publicstatic void main(String[] args)
{
for(intx=100; x<1000; x++)
{
//x就是任意数据

intge = x%10;
intshi = x/10%10;
intbai = x/10/10%10;

if((ge*ge*ge+shi*shi*shi+bai*bai*bai)==x)
{
System.out.println(x);
}
}
}
}