第五章 函数

1.函数的概念

定义:就是指一段具有独立功能的代码,减少代码冗余,提高程序的利用率和效率。

函数的语法格式:

修饰符 函数类型 返回值类型 函数名(数据类型 数据1,数据类型 数据2,…)
{
独立功能的代码片段; return 函数的计算结果;
}

修饰符:指的是函数的访问权限,public private 默认 protected
函数类型:函数的分类,本地函数native,静态函数static,同步函数 synchronized
返回值类型:指的就是函数计算结果的数据类型 如果函数没有返回值 则为void 函数名:就是函数的名称
参数列表:指的是外界向函数传入的数据(实际参数),由这些参数变量进行接收(形式参 数) 函数体:具有独立功能的代码片段;
return:仅仅表示函数结束!如果函数有返回值,则return后跟返回值;如果没有返回值,则 return可以不写,但是是存在的(隐藏的
在最后一行)

函数有如下几个分类(根据形参的返回值来看):
(1)有参数有返回值
(2)有参数没返回值
(3)没参数有返回值
(4)没参数没返回值

2.函数运行原理

函数的运行是基于栈运行的

栈:是一种先进后出的容器,我们这里面所说的栈是指JVM中的栈内存空间
每一个函数,叫做栈帧,栈帧中所包含的内容有函数的定义,参数列表,函数的执行内容代码 每一个函数要运行,就相当于这个栈帧进入到栈内存中-入栈
如果一个函数即将结束,将这个栈帧从栈顶移出-出栈
如果栈内存中有多个栈帧,运行的是最上面的栈帧,底下的栈帧暂停运行,直到该栈帧为栈顶元素
比如:主函数先进栈,开始逐行运行,如果执行到第n行,调用另外一个函数A,则主函数在第n行
暂停运行,将另一个函数A的栈帧入栈,再继续逐行运行,直到函数A的内容执行完毕,函数A出栈,主
函数接着从第n行继续向下执行。以此类推。

javaexp函数 java函数表_java


3.函数重载

同一个类中可以出现多个同名函数,这个现象就叫做函数的重载(overload)
如何来区分同名函数是否是重载关系呢?前提必须是同名,和返回值类型无关(返回值类型只和函
数的计算功能相关),和权限也没有关系,和形式参数的名称也无关!只和形式参数的数据类型有关
(数量,排列组合)

public static void show(int a ,float b ,char c){}

寻找重载函数的流程:

  1. 看是否有确切的参数定义匹配,int int 找 int int
  2. 看是否有可兼容的参数定义匹配,int int找double double或int double或double int
  3. 如果可兼容的参数定义匹配较多,会报引用确定报错 引用不明确

4.函数的递归

函数的递归就是指函数自身调用自身

第六章 数组

1.数组的概念和定义:
数组是Java提供的一种最简单的数据结构,可以用来存储一个元素 个数固定 且 类型相同 的有序
集。

数组在内存中的情况
栈:主要用于运行函数的内存
堆:主要用于存储数据对象的内存 每一个数组而言,都是存在堆内存当中,
每一个数组都是一个对象

数组在内存中的情况
栈:主要用于运行函数的内存
堆:主要用于存储数据对象的内存
每一个数组而言,都是存在堆内存当中,每一个数组都是一个对象

数组本质上就是在堆内存中一系列地址连续且空间大小相等的存储空间(变量),每一个存 储空间用来存储数据(基本,引用)
数组是在堆内存中存储,称之为是一个对数对象,并且在堆内存中存储的数据都有 默认初始 化的流程。所以数组创建之初,每一个存储空间里面都会被JVM初始化该数据类型对应的零值。
数组的地址是连续的,所以通过公式:An=A1+(n-1)*d可以快速访问到其他的元素,所以对于
数组而言查找元素比较快的。将元素的真实物理地址转换成对应的角标获取元素。
如何来调用数组呢?通过一个变量存储该数组在堆内存当中的首元素的地址。 当数组一旦定义出来,其长度不可变,存储空间的内容是可变的
所以我们在定义数组的时候,要么把长度固定,要么直接输入相关的元素

数组的定义方式
//创建一个指定长度且指定数据类型的一维数组,名称为数组名,虽然没有指定元素,但是会有默认值
数据类型[] 数组名 = new 数据类型[长度];
//创建一个指定元素且指定数据类型的一维数组,名称为数组名,虽然有指定元素,还是有默认初始化这个步骤的!
数据类型[] 数组名 = new 数据类型[]{数据1,数据2,…,数据n};
数据类型[] 数组名 = {数据1,数据2,…,数据n};

例如:

public class Sample {
public static void main(String[] args) {
int[] arr = new int[5];
System.out.println(arr[0]);
//System.out.println(arr[5]);
//ArrayIndexOutOfBoundsException
arr[2] = 10;
int[] arr2 = arr;
System.out.println(arr2[2]);
arr2 = null;
//System.out.println(arr2[2]);
//NullPointerException
/*
String s = null;
s.length();
*/
arr = null;
}
}

2.二维数组

二维数组,在表现形式上就是一个表格,在操作表格的时候以行列来操作

javaexp函数 java函数表_数据类型_02

所谓的二维数组,本质上就是一个一维数组,只不过该一维数组里面的元素是另一个一维数组而已

javaexp函数 java函数表_数据_03