黑马程序员_java基础2

一、函数

1 函数的定义

函数就是一段有名字的代码,可以完成某一特定功能。

如果有一段代码要使用多次,我们可以给它起个名字,每次使用时通过名字调用,这样就不用每次都写一大段代码了。

如果某个函数在执行的时候需要调用者传入数据,那么可以定义参数列表,用于接收数据。

如果函数运行之后需要返回给调用者数据,那么需要指定返回值类型,并且用关键字return返回。

定义函数的3个必要条件:函数名、参数列表、返回值类型。如果不需要参数也要写小括号,如果没有返回值类型要写void

2、 名词解释

参数类型:函数的参数的类型,一旦定义传入时必须匹配。

返回值:函数运行结束后返回的值,使用return关键字返回。

返回值类型:函数运行结束后返回的值的类型,在类型非void情况下必须返回,而且必须类型匹配。

3函数的重载

多个函数的函数名相同,参数列表不同(个数、顺序、类型),这就是函数的重载。在调用函数的时候通过传入的实参找到匹配的函数调用。

函数的重载和返回值类型无关。

 

 

二、运算符

1算数运算符

加号:在操作数字、字符、字符串时是不同的,两个字符相加得到的是码表值,两个字符串相加是将字符串连接在一起。

除号:整数在使用除号操作时,得到的结果仍为整数(小数部分忽略)。

取模:模数的符号忽略不计,结果的正负取决于被模数。

自增:符号在前就是先运算后取值,符号在后则是先取值后运算。

2赋值运算符

等于:可以多个连用,例如:x = y = z = 5;

加等于:x += 5; 相当于 x = x + 5;

3比较运算符

比较运算符运行结束之后返回的都是boolean值。

(4)逻辑运算符

逻辑运算符运行结束之后返回的也是boolean

& 两边都为true结果才为true,只要有一边是false,结果就是false

| 两边都为false结果才为false,只要有一边是true,结果就是true

^ 判断两边是否不同,不同则为true,相同则为false

! 取反,!true结果是false!fasle结果是true

&& 和&结果相同,具有短路效果,如果前半是false,表达式结果一定为false,不运行后一半

|| 和||结果相同,具有短路效果,如果前半是true,表达式结果一定为true,不运行后一半

分析以下程序运行结果:

int x = 1;

int y = 2;

System.out.println(x++ == y & ++x > y++); 

System.out.println(x);

System.out.println(y);

int x = 1;

int y = 2;

System.out.println(x++ == y && ++x > y++);

System.out.println(x);

System.out.println(y);

int x = 1;

int y = 2;

System.out.println(x++ == y | ++x > y++);

System.out.println(x);

System.out.println(y);

int x = 1;

int y = 2;

System.out.println(x++ == y || ++x > y++);

System.out.println(x);

System.out.println(y);

&& 在前半是false的时候短路

|| 在前半是true的时候短路

4位运算符

任何信息在计算机中都是以二进制的形式保存的,&|^除了可以作为逻辑运算符,也可以做为位算符。

它们对两个操作数中的每一个二进制位都进行运算,0当做false1当做true

& 将两个二进制数每一位进行&运算,两边都为1结果才为1,只要有一边是0,结果就为0

| 将两个二进制数每一位进行|运算,两边都为0结果才为0,只要有一边是1,结果就为1

^ 将两个二进制数每一位进行^运算,只要两边不同结果就为1,相同则为0

我们可以对数据按二进制位进行移位操作,java的移位运算符有三种:

<< 左移 将二进制的每一位向左移,低位补0。左移几位就相当于乘以2的几次方。

>> 右移 将二进制的每一位向右移,原来高位是0就补0,原来高位是1就补1。右移几位就相当于除以2的几次方。

>>> 无无符号右移 将二进制的每一位向右移,高位补0。正数移动没区别,负数移动后变为正数。

 

 

 

三、语句

主要包括三种结构:顺序结构、选择结构、循环结构

1、顺序结构:

就是程序从上到下一行一行执行的结构,中间没有判断和跳转,直到程序结束。

2、选择结构:

程序具备多个分支,通过条件判断决定程序选择那一条分支执行

如下所示:

a. if语句:

通过if...else if...else决定程序流程。

如果if中的条件满足则执行其中语句,if未满足则继续判断else if,如果满足则执行,不满足继续判断下一个else if,如果所有都不满足,则执行else

b. switch语句:

通过switch...case...default语句控制程序流程。

根据switch后括号中的值判断运行哪一个case,这个值可以是byteshortch;arint

default语句是可选的,如果所有case都不满足,则会执行default

一旦匹配到一个case,程序就会从这个case向下执行,执行完一个case之后不会跳过其他的case,如需跳过请使用break

c. 三元运算符

语法:表达式 结果1 : 结果

如果表达式结尾为true取结果1,为false则取结果2

注意三元运算符也是有短路的效果,根据表达式的结果,只运行冒号一边的,另外一边的不参与运行。

3、循环结构:

通过循环语句让同一段代码反复执行多次,执行完毕程序才会继续往后运行

如下所示:

While语句

先判断while中的表达式结果是否为truetrue则执行循环体,执行结束之后再次判断,如果表达式结果为false则跳出循环。

练习:

打印出0-9

打印出a-z

Do...while语句

先执行一次循环体,然后判断while中的表达式,如果是true继续执行,如果是false则跳出循环。

练习:

编写一个程序,这个程序不断地读取键盘上输入的字符,直到读到字符’q’时,程序结束。

For语句:

for循环的括号中有三条语句,都是可选项。

语句1:这条语句会在整个循环开始之前执行,且仅运行一次,不参与循环。

语句2:必须是一个返回boolean值的表达式,如果写了这个语句那么每次循环开始之前会判断,true则执行循环,false则不执行。没写则直接执行。

语句3:这条语句在每次循环体运行结束之后执行。

4for循环和while循环的特点:

(1)forwhile可以互换;

(2)格式上的不同,在使用上有点小区别,即当需要通过变量来对循环进行控制,该变量只作为循环增量存在时,区别就体现出来了,在for循环中该变量随着循环结束而从内存消亡,但在while循环中却可以继续存在并使用,也就是还在内存中并未消亡。

5什么时候使用循环结构

当对某些代码执行很多次时,使用循环结构完成,当对一个条件进行一次判断时,可以使用if语句,当对一个条件进行多次判断时,可以使用while语句,注意:在使用循环时,一定要明确哪些语句需要参与循环,哪些不需要,循环通常情况下,需要定义条件,需要控制次数。

6、If语句的三种格式:

第1种:

   if(条.表.式)        

   {                                                                                                                                       

           执.语.;                                                          

    }

 

第2种:

   if(条.表.式)

   {

           执.语.;

   }

  else//否.

  {

          执.语.;

  }

 

 第3种

  if(条.表.式)

  {

         执.语.;

  }

  else if (条.表.式)

  {

         执.语.;

  }

  else

  {

         执.语.;

  }

 

 

 

四、数组

1什么是数组

数组是一个类型一致,长度不可变的容器。可以通过索引操作容器中的每一个元素。

如果有多个类型相同的数据需要存储,我们就可以将其定义为一个数组,这样做省去了创建多个变量的麻烦。

2如何定义数组

int[] arr = {1,2,3};

定义int数组arr,长度为3,其中3个元素分别为123。这种方式只能在定义数组的时候使用。

int[] arr = new int[]{1,2,3};

定义int数组arr,长度为3,其中3个元素分别为123。可以再任何情况使用。

int[] arr = new int[3];

定义int数组arr,长度为3。其中所有元素都为默认值0

3访问数组元素、遍历数组

存在数组中的数据是有索引的,从0开始递增,我们通过数组名和索引就可以操作其中每一个元素。例如:

System.out.println(arr[0]); // 打印数组中索引为0的元素

arr[1] = 100; // 给数组中索引为1的元素赋值为100

数组的长度

数组可以使用length属性获取其长度。

遍历数组

由于数组可以通过索引获取每一个元素,又可以通过length获取长度,那么我们就可以定义循环来遍历数组中的每一个元素了。

4使用数组时的异常

如果访问数组时索引越界(小于0或者大于length-1),会抛出异常:ArrayIndexOutOfBoundsExcepion

如果访问数组的引用为空(null),会抛出空指针异常:NullPointerException

将一个数组中的某些元素拷贝到另一个数组的指定位置

5多维数组

数组中的每一个元素都是数组,这样的数组就是多维数组。

int[][] arr = { { 1, 2, 3 }, { 4, 5 }, { 6, 7, 8, 9 } };

定义二维数组arr, 其中有三个元素都是数组, 第一个数组3个元素, 第二个2个元素, 第三个4个元素.

int[][] arr = new int[][] { { 1, 2, 3 }, { 4, 5 }, { 6, 7, 8, 9 } };

定义二维数组arr, 其中有三个元素都是数组, 第一个数组3个元素, 第二个2个元素, 第三个4个元素.

int[][] arr = new int[3][3];

定义二维数组arr, 其中有三个元素都是数组, 每个小数组都是3个元素.

int[][] arr = new int[3][];

定义二维数组arr, 其中有三个元素都是数组, 每个小数组元素个数不确定.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值