黑马程序员——Java基础语法二

-----------android培训java培训、java学习型技术博客、期待与您交流!------------

一、流程控制语句

        流程控制语句主要分为三类,分别为:顺序结构、选择结构和循环结构。

顺序结构

是程序中最简单最基本的流程控制,没有特定的语法结构,按照代码的先后顺序,依次执行,程序中大多数的代码都是这样执行的。

总的来说:写在前面的先执行,写在后面的后执行。流程图如下:

 

 黑马程序员——Java基础语法二_第1张图片

class OrderDemo{

 

public static void main(String[] args){

System.out.println("程序不温不火运行中...");

System.out.println("程序准备");

System.out.println("程序开始运行...");

System.out.println("程序没有bug ^_^ ");

System.out.println("崩溃了......");

}

}

 黑马程序员——Java基础语法二_第2张图片

选择结构

也被称为分支结构。

选择结构有特定的语法规则,代码要执行具体的逻辑运算进行判断,逻辑运算的结果有两个,所以产生选择,按照不同的选择执行不同的代码。

Java语言提供了两种选择结构语句

if语句

 

格式1 :

if (关系表达式){

语句体

}

首先判断关系表达式看其结果是true还是false

如果是true就执行语句体

如果是false就不执行语句体

 黑马程序员——Java基础语法二_第3张图片

注意事项:

关系表达式无论简单还是复杂,结果必须是boolean类型

if语句控制的语句体如果是一条语句,大括号可以省略;如果是多条语句,就不能省略。建议永远不要省略。

一般来说:有左大括号就没有分号,有分号就没有左大括号

 

if语句格式二:

 

if( 关系表达式){

 

语句体1 ;

}else{

语句体2 ;

}

获取两个数据中较大的值,使用if的第二种格式 实现 

执行流程:

首先判断关系表达式看其结果是true还是false

如果是true就执行语句体1

如果是false就执行语句体2

 

 

 黑马程序员——Java基础语法二_第4张图片

演示事例:

import java.util.Scanner;

class IfTest{

public static void main(String[] args){

Scanner sc = new Scanner(System.in);

System.out.println("请输入要比较的数据:");

int x = sc.nextInt();

int y = sc.nextInt();

if(x>y){

System.out.println("较大的数据为:"+x);

}

else{

System.out.println("较大的数据为:"+y);

}

 

}

f语句第二种格式和三元运算符

三元运算符的操作都可以使用if语句改进,反之不成立

什么时候不成立呢?

if语句控制的语句体是一条输出语句的时候,就不成立。因为三元运算符是一个运算符,必须要求有一个结果返回。而输出语句却不能作为一个返回结果。

 

if语句和三元运算符的区别

三元运算符可以称之为if语句的简写形式,但是只要是简写就会有一定的弊端.

弊端:三元运算符是一种运算符号,也就是说,每次运算后,必须有结果.if...else语句是流程控制语句,执行后不一定有结果,可以是输出语句.而三元运算符不可以输出语句.

 

if语句第三种格式

 

if(关系表达式1){

语句体1;

}else if (关系表达式2){

语句体2;

}else if (关系表达式3){

语句体3;

}.....

else if (关系表达式n){

语句体 n;

}else{

语句体 n + 1; 

}

执行流程:

首先判断关系表达式1看其结果是true还是false

如果是true就执行语句体1

如果是false就继续判断关系表达式2看其结果是true还是false

如果是true就执行语句体2

如果是false就继续判断关系表达式…看其结果是true还是false

如果没有任何关系表达式为true,就执行语句体n+1

 

 黑马程序员——Java基础语法二_第5张图片

boolean b = true;

 

if(b==false) 

System.out.println("a");

else if(b)

System.out.println("b");

else if(!b)

System.out.println("c");

else

System.out.println("d");

结果为:c

 

If语句的嵌套:

演示用例:

获取三个数据中的最大值。

import java.util.Scanner;

class Homewoerk{

public static void main(String[] args){

Scanner sc = new Scanner(System.in);

System.out.println("请输入数据:");

 

int num1 = sc.nextInt();

int num2 = sc.nextInt();

int num3 = sc.nextInt();

int max;

/*if (num1>num2){

if (num1>num3){

max = num1;

}else {

max = num3;

}

}else{

if (num2>num3){

max = num2;

}

else

max = num3;

}*/

max = (num1>((num2>num3)?num2:num3))?num3:((num2>num3)?num2:num3);

System.out.println("最大的数为:"+max);

}

}

 

switch语句

        switch语句格式:

                switch(表达式)

                {

                       case取值1:

                             执行语句;

                              break;

                       case取值2:

                             执行语句;

                              break;

                       …...

                      default:

                             执行语句;

                             break;

                }

格式解释说明:

switch:说明这是switch语句。

表达式:可以是byte,short,int,char

JDK5以后可以是枚举

JDK7以后可以是字符串

case:后面的值就是要和表达式进行比较的值

break:表示程序到这里中断,跳出switch语句

default:如果所有的情况都不匹配,就执行这里,相当于if语句中的else

 

执行流程:

首先计算出表达式的值

其次,和case依次比较,一旦有对应的值,就会执行相应的语句,在执行的过程中,遇到break就会结束。

最后,如果所有的case都和表达式的值不匹配,就会执行default语句体部分,然后程序结束掉。

 

 黑马程序员——Java基础语法二_第6张图片

switch语句特点:

        a,switch语句选择的类型只有四种:byte,short,int, char。

        b,case之间与default没有顺序。先执行第一个case,没有匹配的case执行default。

        c,结束switch语句的两种情况:1、遇到break结束;2、执行到switch结尾结束。

        d,如果匹配的case或者default没有对应的break,那么程序会继续向下执行,运行可以执行的语句,直到遇到break或者switch结尾结束。 

注:JDK1.5以后可以接收枚举类型,JDK1.7以后可以接收字符串。键盘录入一个字符串的问题String s = sc.nextLine();

        ifswitch语句很像。具体什么场景下,应用哪个语句呢?如果判断的具体数值不多,而且符合byte  short  int  char这四种类型。虽然两个语句都可以使用,建议使用switch语句,因为效率稍高。其他情况:对区间判断,对结果为boolean类型判断,使用ifif的使用范围更广。 

注意事项:

    a:case 后面只能是常量,不能是变量,

而且,多个 case 后面的值不能出现相同的

    b:default 可以省略吗?

        可以省略,

但是不建议,可能产生一个不是我们想要的效果

因为它的作用是对不正确的情况给出提示。

        特殊情况:

            case 就可以把值固定。

            A,B,C,D

    c:break 可以省略吗?

        可以省略,但是结果可能不是我们想要的。

        会出现一个现象:case 穿透。

        最终我们建议不要省略

    d:default 一定要在最后吗?

        不是,可以在任意位置。但是建议在最后。

    e:switch 语句的结束条件

        a:遇到 break 就结束了

        b:执行到末尾就结束了

演示事例:

switch语句实现键盘录入月份,输出对应的季节(12,1,2是冬季)

import java.util.Scanner;

class Homework1{

public static void main(String[] args){

Scanner sc = new Scanner(System.in);

System.out.println("请输入月份!");

int num = sc.nextInt();

switch(num){

case 12:

case 1:

case 2:

System.out.println("这是冬季!");

break;

case 3:

case 4: 

case 5: 

System.out.println("这是春季!");

break;

case 6:

case 7:

case 8:

System.out.println("这是夏季!");

break;

case 9:

case 10:

case 11:

System.out.println("这是秋季!");

break;

 

}

}

}

if语句和switch语句各自的场景:

if语句使用场景:

针对结果是Boolean 类型的判断

针对一个范围的判断

针对几个常量值的判断

switch语句使用场景:

针对几个常量值的判断

 

 循环结构——whiledo whilefor

 

for循环语句

格式:

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

循环体语句;

}

执行流程:

a:执行初始化语句

b:执行判断条件语句

如果这里是true,就继续

如果这里是false,循环就结束

c:执行循环体语句

d:执行控制条件语句

e:回到b

 

 

 黑马程序员——Java基础语法二_第7张图片

 

 

 注意事项:

a:判断条件语句无论简单还是复杂,结果是boolean类型

b:循环体语句如果是一条,可以省略大括号,但是不建议

c:有分号就没有左大括号,有左大括号就没有分号

演示事例:

100-1000在控制台输出所有的”水仙花数”,所谓的水仙花数是指一个三位数,其各位数字的立方和等于该数本身。

    举例:153就是一个水仙花数。

    153 = 1*1*1 + 5*5*5 + 3*3*3 = 1 + 125 + 27 = 153

并统计”水仙花数”共有多少个

// 定义变量

int count  = 0;

//1获取水仙花

for ( int x=100; x<=1000; x++){

//2 判断

//定义三个变量,保存各个位的值

int g = x%10;

int s = x/10%10;

int b = x/100%10;

//使用if判断

if (g*g*g + s*s*s + b*b*b == x){

//x为水仙花数

System.out.println("水仙花数为: "+x);

//如果是水仙花数,给变量+1

count++;

//System.out.println(count);

 

}

}

//输出个数的变量

System.out.print("水仙花数的个数为"+ count + "");

 

System.out.print("over");

}

for循环的嵌套:

 

打印九九乘法表

public static void main(String[] args){

for(int i = 1; i < 10;i++){

for(int j = 1; j<=i;j++){

System.out.print(i+"*"+j+"="+j*i+"\t");

}

System.out.println();

}

}

 

 

        while语句格式:

基本格式:

             while(条件表达式)

             {

                 执行语句;

             }

 

扩展格式:

初始化语句;

while(判断条件语句){

循环体语句;

控制条件语句;

}

执行流程:

 黑马程序员——Java基础语法二_第8张图片

 

通过查看这个格式,我们就知道while循环可以和for循环等价转换。

演示用例:

统计”水仙花数”共有多少个

int count = 0;

int num = 100;

while(num<1000){

int a = num/100;

int b = num%100/10;

int c = num%10;

if (a*a*a+b*b*b+c*c*c==num){

count+=1;

}

num++;

}

System.out.println(count);

}

 

1-100之间奇数和

 

int x = 1;

int sum = 0;

while(x<100){

sum+=x;

x+=2;

}

System.out.println(sum);

}

 

 

forwhile的区别:

(1)使用上的区别

for语句的那个控制条件变量,在循环结束后不能在使用了。而while的可以继续使用。原因在于在于for为了循环而定义的变量在for循环结束就是在内存中释放。

(2)理解上的区别

for适合于一个范围的判断

while适合次数不明确的

 

 

        do while语句格式:

             do

             {

                 执行语句;

             }while(条件表达式);

 

扩展格式:

初始化语句;

do {

循环体语句;

控制条件语句;

}while(判断条件语句);

执行流程:

 黑马程序员——Java基础语法二_第9张图片

whiledo while的区别:

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

        do while:先执行循环体,再判断条件,条件满足,再继续执行循环体。

简单一句话:do while:无论条件是否满足,循环体至少执行一次。

 

 

通过查看格式,我们就可以看出其实三种循环的格式可以是统一的。

三种循环的区别

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

b:forwhile必须先判断条件是否是true,然后后才能决定是否执行循环体

c:for循环使用,有明确的次数while循环使用,没有明确次数

注意事项:

写程序优先考虑for循环,再考虑while循环,最后考虑dowhile循环。

 

 

循环使用的注意事项(死循环)

A:一定要注意修改控制条件,否则容易出现死循环。

B:最简单的死循环格式

a:while(true){...}

b:for(;;){}

 

跳转控制语句:

        break(跳出)语句:应用范围:选择结构和循环结构(switch   loop)。

作用:中断当前的循环

        continue(继续)语句:应用于循环结构。

作用:结束当次循环,开始下一次循环

 

 return (返回 )结束一个方法关键字不是为了跳转出循环体,更常用的功能是结束一个方法,也就是退出一个方法。跳转到上层调用的方法。

 

 

 

二、方法

   定义:简单的说:方法就是完成特定功能的代码块。 

    格式:

        修饰符 返回值类型 函数名(参数类型 参数名1,参数类型 参数名2

        {

                     执行语句;

                      Return 返回值;

            }

其中:

  修饰符 类型比较多,较为常用的为public  static

         返回值类型:用于限定返回值的数据类型,函数运行后的结果的数据类型。

 方法名 一个名称,为了方便我们调用方法

         参数类型:限定调用方法时传入参数的数据类型。

         形式参数:是一个变量,用于存储调用函数时传递给函数的参数。

          return:结束方法以及返回方法指定类型的值 。

         返回值:程序被return带回的结果,返回给调用者

    特点:

定义函数可以将功能代码进行封装,便于对该功能进行复用。

方法只有被调用才会被执行。

方法与方法是平级关系,不能嵌套定义

方法定义的时候参数之间用逗号隔开

方法调用的时候不用在传递数据类型

如果方法有明确的返回值,一定要有return带回一个值

方法的出现提高了代码的复用性。

没有明确返回值的方法调用:

其实就是void类型方法的调用

只能单独调用。

注意:

        a) 方法中只能调用函数,不可以在方法内部定义方法。

        b) 定义方法时,方法的结果应该返回给调用者,交由调用者处理。

如何定义一个方法?

两个明确,第一个明确是要定义的功能最后的结果是什么。

明确在定义该功能的过程中,是否需要未知内容参与运算。

演示用例:

打印nn乘法表

import java.util.Scanner;

class Mul{

public static void main(String[] args){

int num = 0;

num = getName();

String s = list(num);

System.out.println(s);

}

public static String list(int n){

String str = "";

for (int i = 1;i<=n ;i++ ){

for (int j = 1;j<=i ;j++ ){

 str += i+"*"+j+"="+i*j+"\t";

}

str+="\n";

}

return str;

}

public static int getName(){

Scanner sc = new Scanner(System.in);

int num = sc.nextInt();

return num;

}

}

 

打印mn列的星形矩形

 

import java.util.Scanner;

class FunctionDemo4{

public static void main(String[] args){

Scanner sc = new Scanner(System.in);

int n = sc.nextInt();

int m = sc.nextInt();

printStar(n,m);

}

public static void printStar(int h,int l){

for (int x=0; x

for ( int y=0; y

System.out.print("*");

}

System.out.println();

}

}

}

 

 

方法的一个重要特性——重载(override)

      概念:在同一个类中,允许存在一个以上的同名函数,只要它们的参数列表的个数或者参数类型不同即可。

      特点:与返回值类型无关,只看参数列表。

   在调用时,虚拟机通过参数列表的不同来区分同名方法

 

      好处:方便于阅读,优化了程序设计。

      示例:

              //返回两个整数的和

              int add(int x,int y){return x+y;}

              //返回三个整数的和

              int add(int x,int y,int z){returnx+y+z;}

              //返回两个小数的和

              double add(double x,double y){return x+y;}

什么时候用到重载?

      当定义的功能相同,但参与运算的未知内容不同。那么,这时就定义一个函数名称以表示起功能,方便阅读,而通过参数列表的不同来区分多个同名函数。

 演示用例:

public static void main(String[] args){

byte b1 = 2;

byte b2 = 2;

boolean bo = compare (b1,b2);

System.out.println(bo);

short s1 = 2;

short s2 = 2;

boolean bo1 = compare (s1,s2);

System.out.println(short);

}

public static boolean comparebyte  num1, byte num2){

return num1 == num2;

}

public static boolean compareshort  num1, short num2){

return num1 == num2;

}

 

       

   

 

-----------android培训java培训、java学习型技术博客、期待与您交流!------------

 

你可能感兴趣的:(Java学习笔记)