JAVA函数和数组

来源:互联网 发布:淘宝怎么绑定手机号 编辑:程序博客网 时间:2024/06/05 05:34

函数

语法

1.  修饰符  返回值类型  函数名(参数类型形式参数1,参数类型形式参数2,...)
2.  {
3.      执行语句;
4.      return返回值;
5.  }

·       返回值类型 : 函数运行后结果的数据类型.

·       参数类型 : 是形式参数的数据类型.

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

·       实际参数 : 传递给形式参数的具体数值.

·       return : 用于结束函数. 

o  注意: 如果函数返回值类型为void, 默认可以不写 return; 但,系统会默认在结束处自动添加 return 关键字.

·       返回值 : 该函数运算后的结果.该结果会返回给调用者.

 

函数的作用: 将一段需要被重用的代码封装在函数之中, 什么时候想要执行这段代码, 只需要调用这个函数就可以了.并且函数可以实现在调用时传入参数信息,并且在运算完成之后返回结果信息给调用者.

 

什么是函数 ?

·       函数就是定义在 `类中` 的 `具有特定功能` 的一段 `独立小程序`.与main方法同级别.

·       函数也称为方法.

函数的一般使用步骤 : 

1.     先定义一个函数.

2.     将需要重用的代码封装在函数之中.并将变化的数据定义为参数.

3.     什么时候要执行,就只需要调用函数就可以了.

 

函数的调用和注意点 :

语法 : 函数名 ();如果函数需要参数, `()` 内部传入参数就可.

1. 因为CPU在执行程序的时候, 只会执行main方法中的代码, 所以, 如果你只是定义了函数的话, 那么这个函数中的代码是绝对不可能被执行到的.

2. 如果我们想要去执行函数中的代码, 必须 main方法中调用 想执行函数代码.

3. 当执行到调用函数这句代码的时候, CPU会跳转到函数的内部去执行函数中的代码, 执行完毕之后回来继续往下执行.

 

什么时候需要定义函数 ?

1.      当一段代码需要被重用的时候,那么这个时候就可以定义函数,将代码封装在函数之中.

2.      如果你发现有一段代码是在完成一个独立的功能,那么这个时候我们也可以将这段代码封装在函数之中.

 

函数的好处

1.      减少代码的冗余,代码简洁, 一次定义,随处调用.

2.      修改和维护相当方便,只要修改函数内部的代码,所有调用函数的地方都会被跟随一起修改.

3.      屏蔽代码的实现.对于函数的调用者而言, 无需关心函数的内部是如何实现的,只需要知道函数实现了什么功能.调用函数有什么效果即可.

 

形参, 实参, 和返回值

1.      形式参数介绍和使用 :

·       定义函数的时候 函数名后面小括号中的参数,简称形参,用来接收实际运算数值.

·       1)如果多个形参,可以用逗号分隔

·       2)形式参数是什么样类型的数据,那么实际参数也必须是什么样的类型,否则会产生错误。

·       3)形式参数出现在函数定义中,作用域是函数体 ,离开该函数则不能使用。

·       4)函数内部不可以定义与函数形参同名的变量,因为形参与函数的代码是一个代码块.

·       5)形参定义后并不会立即分配存储空间,在函数调用的时候才会真正的分配存储空间.

 

2.    实际参数介绍和使用

·       实际参与操作的数据。调用函数的时候,函数名后面小括号中的参数,简称实参实参出现在主调函数中(main函数)

·       形参和实参的功能是作数据的传递。从主调函数把数据传过去,被调函数用对应的形参去接收。

·       注意事项:

·       1)实参可以是常量、变量、表达式等,无论实参是何种类型的值,在进行函数调用时,它们都必须具有确定的值,以便把这些值传送给形参。

·       2)实参和形参在数量,类型,顺序上应严格一致,否则会发生类型不匹配的错误。

·       3)形参的值在函数内部可以被修改,但是不会影响主调函数中实参的数据,在自定义函数中有一句隐藏的代码,就是实参的值赋值给形参

 

函数 : 主类中定义的功能,统称为函数.

方法 : 除了主类,其它自定义的类中的功能,统称为方法.

 

 

3.      函数的返回值

·       什么时候函数需要返回值当函数执行完毕之后,有一个结果(数据),函数的内部不确定如何处理这个数据,并且这个数据是调用者翘首以盼的.(表白)那么这个时候, 函数就应该将这个数据返回给调用者.由调用者自己去处理这个数据.

·       如何返回数据呢

1.     先确定要返回的数据类型.

2.     修改函数的返回值类型为返回的数据类型.

3.     在函数结束之前,使用return关键字将数据返回给调用者.

调用者如何拿到函数返回的数据呢定义一个和函数的返回值类型相同的变量进行接收就可以了.带多个参数的函数

调用原则 :

1.     实参的个数必须要与形参的个数一致.

2.     实参的类型必须要与形参的类型一致.

3.     实参的顺序必须要与形参的顺序一致.

·       实参名称与形参名称两者之间没有直接关系,存在与不同的作用范围内.

·       理解 :调用带参数的函数时, 为形参传值的本质是将实参的值赋值给形参.

return 关键字

·       return关键字使用在函数之中,代表立即结束整个函数, 如果函数体后面还有代码也不会被执行到的. 立刻,立即,现在, 马上结束函数.

·       对比return    break    continue之间的区别 :

 

    1> break

·       可以用在switch-casecase块中,代表立即结束某条case的语句.

·       还可以用在循环体之中,代表立即结束当前循环结构.

·       只能结束当前循环结构,如果循环后面还有代码, 是会继续执行后面的代码.

2> continue

·       只能使用在循环体之中,代表立即结束本次循环, 并马上回去判断条件.

  3> return

·       1. return用在main方法之中,表示结束整个程序.

·        return用在自定义函数之中,表示结束自定义函数.返回主函数中继续后续代码.

return在函数中的使用注意细节 :

1.     函数的返回值类型代表函数执行完毕之后,有一个这个类型的数据返回给调用者.调用者准备对应类型的变量接收,注意, 如果函数有返回值,调用者可以接收, 也可以不接收.

2.     void代表函数执行完毕之后,没有任何的数据返回给调用者,那么这个时候调用者就不需要用变量去接收返回值了.

3.     return关键字是用来结束函数的. 如果函数没有返回值, 那么就只能使用return来结束函数,后面不要跟数据.

4.     如果函数有返回值,那么在函数结束之前, 必须要使用return.而且还要在return后面写上要返回的数据. return数据;   作用 : a.结束函数的执行    b. 将后面的数据返回给调用者.

5.     建议返回的数据类型和函数的返回值类型保持一致.如果不一致, 那么就会将返回的数据类型转换为函数的返回值类型,再返回. 也可能报错.

6.     如果一个函数带了返回值,要求函数中的所有分支结束之前都要有返回值.只要有一个分支没有返回值, 就会报错.

函数的重载(overload)

假设要在程序中实现一个对数字求和的方法,由于参与求和数字的个数和类型都不确定,因此要对不同的情况去设计不同的方法.

程序需要针对每一种求和的情况都定义一个方法,如果每个方法的名称都不相同,在调用时就很难分清哪种情况该调用哪个方法.为了解决这个问题,Java允许在一个类中定义多个名称相同的函数,但是参数的类型或个数必须不同,这就是函数的重载.

 

重载:函数的重载,要求必须在同一个类(程序)中,有多个同名的函数,它们的参数列表不同,这时我们称为函数的重载。

 

注意:

1、要求必须在同一个类中(程序)。

2、要求函数的名称必须相同

3、要求函数的参数列表必须不同。

参数列表不同,主要针对的参数的个数,类型,顺序不同。

 

由于函数可以在同一个类出现重载的现象,因此在调用的时候,具体应该执行哪个函数,需要根据调用者传递的实际参数决定。

结论:重载就是在一个类中具有相同名称的函数,但是这些相同函数的参数列表不能相同。

 

重载的特点 :

与返回值类型无关, 只看参数列表.

 

重载的好处  :

方便与阅读, 优化了程序设计.

 

  数组

概念 : 把具有相同类型的若干变量按有序的形式组织起来,这些按序排列的同类数据元素的集合称为数组.

数组就是一个 `容器`.

数组的好处 :

·       可以自动给数组中的元素从 0开始编号,方便操作这些元素.

 

现在遇到的问题 : 有多个数据要存储, 并且这些数据非常难以管理.

假设 : 假如有一个变量, 可以存储多个数据,并且多个数据之间和谐的共处, 你不干掉我, 我不干掉你, 我们手拉手在一起.

数组 : 顾名思义, 数据的组合, 表示一组数据.

 

概念 : 把具有相同类型若干变量有序的形式组织起来.这些按序排列的同类数据元素的集合称为数组.

作用 : 是用来存储多个数据的, 多个数据之间和谐的共处.

 

数组在内存中是如何创建的 int[ ] arr= new int[ 5 ];
先在内存之中开辟一块空间, 这个空间就是数组名 arr.然后将这个空间划分成5等份,划分成了5个小空间.5块小空间的类型都是int类型的.数组之中真正用来存储数据的就是这些小空间.
数组的长度 :将数组划分为多少个小空间是根据定义数组的时候中括弧之中的数字来决定的.指的是这个数组之中元素的个数,也就是数组可以存储多少个数据.
数组的类型 :每一个小空间的类型是根据定义数组的时候,指定的类型来决定的.

元素 :数组之中划分的一个一个小空间,就叫做数组的元素.
下标/索引 :为了区分数组之中的每一个元素, Java就为每一个元素编了一个号码, 这个号码从0开始,依次递增, 这个号码就叫做元素的下标/索引.数组的元素下标 : 0开始,到总个数 -1.

如何往数组中存储数据 ?
必须要明白的一点 :存储数据的不是数组, 而是数组的元素. 所以,存储数据的时候, 应该要将数据存储给数组的元素, 而不是数组.

数组的定义格式一

格式一 :

1.  元素类型[]数组名=new元素类型[元素个数或数组长度];

2.   

3.  示例:int[] arr=newint[5];

§  : new int[5]表示在内存之中创建了一个数组,名字叫做arr. 这个arr数组可以存储的数据类型是int类型的,最多可以存储5int类型的数据.

·       1.如何存储数据到数组之中?

我们确定了存储数据应该存储给数组的元素,而数组有那么多的元素, 到底是要存储给哪一个元素呢 ? 通过下标来确定.
语法 :数组名[元素的下标] =数据;

 

·       2.如何去取存储在数组之中的数据?

§ 因为数据是存储在数组元素之中的,所以我们去的是元素的数据.

§ 数组的元素有那么多,到底要取哪一个元素的数据呢 ?通过下标来确定. 你可以将其赋值给一个变量, 也可以将其直接输出

§ 语法 :数组名[元素的下标]; 

·        如何遍历数组的元素 ? 将数组之中的所有元素值全部打印出来.

说明在操作数组时,经常需要依次访问数组中的每个元素,这种操作称作数组的遍历.

 

·       遍历原理 :将每一个元素的下标遍历出来,元素的下标是有规律的. 0 ~长度-1.     0 ~长度-1 之间的每一个整数遍历出来,用来当做数组的下标就可以去取每一个元素的值了.

说明 : Java,为了方便我们获取数组的长度,系统提供了一个length属性,在程序中可以通过 "数组名.length" 的方式来获得数组的长度.即元素的个数.

·       注意两点 :

1.  为数组元素赋值的时候, 赋值的数据类型一定要和元素的类型保持一致.

2.  访问数组元素的时候, 记住千万不要越界.

数组的定义格式二

1.  2. 元素类型[]数组名=new元素类型[]{元素,元素,......};
2.   
3.  示例:
4.  int[] arr =new int[]{1,3, 5, 7, 9};
5.  int[] arr ={1,3, 5, 7, 9};

数组是用来干嘛的? 数组是用来存储多个相同类型的数据.

什么时候使用数组当有一组数据,并且这组数据的意义是相同的, 意义相同, 肯定类型就是一样的

如何创建数组?  两种创建数组的格式.

几个术语 :数组名, 数组元素,数组下标, 数组长度.

如何往数组中存储数据?通过元素的下标进行数据的存储.

如果取出数组中的数据?通过元素的下标进行数据的获取.

如果遍历数组中的数据?通过 数组名.length 获取数组的长度,再使用for循环遍历即可.



Java 对内存空间的划分 :五部分

1> 栈区

2> 堆区

3> 方法区

4> 本地方法区

5> 寄存器

 

1.栈内存:栈内存主要是用来运行函数的,在函数中定义的所有变量,都会在这个栈内存开辟空间。

在栈内存中定义的变量,不初始化,是不能直接使用的。

注意:所有的函数都必须在栈内存中运行。

函数被加载到栈内存的动作,称为函数的压栈(入栈)。

函数执行完之后就会从栈中消失(函数的弹栈,或者叫做出栈)

 

2.堆内存:在程序中使用new 关键字创建出来的所有东西,都会保存在堆内存中。

堆内存中开辟的空间,不赋值,都会有默认的初始化数据。

整数:默认是0

小数 默认0.0.

boolean 默认是false

char 默认是 ‘\u0000’   在内存中表示空字符

当实体不再使用时,就会被垃圾回收机制处理.

 

3.方法区:JVM(Java虚拟机)在加载class文件的时候,所有的class文件就要加载在这个内存中。(先了解,后面会详细讲解)

 

4.本地方法区:主要是保存native关键字标注的方法

5.寄存器:是给CPU使用的。

 

打印说明 : 数组名存储的是数组在堆区中开辟空间的首地址.

 

关于值传递与引用传递的区别 :

1.     数值传递称为值传递,仅仅是将数值拷贝了一份,(副本) 在函数内部修改数值对源数据不会有任何影响.

2.     引用传递,表示访问这个地址指向空间的值,直接对源数据进行操作.