函数的概述
函数就是定义在类中的具有特定功能的一段独立小程序。函数也称为方法。
函数的格式
修饰符 返回值类型 函数名(参数类型 形式参数1,参数类型 形式参数2,…) { 执行语句; return 返回值;}public static int add(int a,int b){}
A:修饰符 public static
B:返回值类型 这个特定的功能完成后,需要返回一个结果。这个地方就是返回结果的类型。
C:函数名 为了方便使用这个函数,给它起个名字。这个名字要符合标识符命名规则。
D:参数类型 形式参数的数据类型 形式参数 自定义的接收方 实际参数 发出方add(3,5)
E:执行语句 那么这个语句是由多条语句组成。
F:return 这个功能执行完以后,需要有一个返回值,那么这个值有关键字return带回。
函数的使用及注意事项
一般函数只有被调用后,才执行。
void 表示没有返回。
在这个函数的结尾可以不写return。其实jvm会自动的结尾处加上return;
函数中不能定义函数
如果定义自己的函数 两个明确
明确该功能的结果 说白了就是返回类型。
明确该功能的参数 其实就是明确该功能中是否需要未知内容(形式参数)参与运算。明确未知内容的类型和个数。就是参数列表。
6:函数的重载
函数名相同,参数列表不同。
参数类型不同。int add(int i)void add(double d)
参数个数不同。add(int a,int b);add(int a,int b,int c)
参数顺序不同 print(String name, int age) //参数顺序不同的重载是可以存在的,但是没有什么实际意义
特点:与返回值类型无关,只看参数列表。
好处:便于阅读,优化程序设计。
数组的概念
数组数组是存储同以数据类型多个元素的集合。是一个数据结构也可看成是一个容器,既可以存储基本数据类型,也可以存储引用数据类型。通过数组名和角标可以引用数组中的元素
每个数组都有自己的成员变量length,用来表示数组所包含的元素个数,length只能是正整数和零,数组创建后length就不能被改变。
数组的定义格式
A:当不明确数组中的元素时,动态初始化 举例 : int[] arr = new int[3]; arr[0] = 3;
B:当明确数组中的元素时,静态初始化 举例 : int[] arr = new int[]{1,2,3,4,5}; int[] arr = {1,2,3,4,5};
什么时候使用数组?
当要操作的同种数据类型的数据是多个的时候,你就得想着先把这些数据用数组进行存储。
数组的内存位置
A:栈
存储的是局部变量(在函数中定义的变量)。
变量被使用完后,立即自动释放。
B:堆
存储的是实体(数组和对象)。
实体:new出来的东西,可以存放很多数据的东西。
堆内存数据的特点:是每个实体都有内存地址,堆内存中的变量都有默认初始化值
int 类型的初始化值是 0
double 类型的初始化值是 0.0
boolean 类型的初始化值是false
char 类型的初始化值是'\u0000' 空字符,unicode编码。
当实体不在被使用的时候,会在jvm空闲的时候,通过java垃圾回收机制使其自动释放。
class Demo2Method {
public static void main(String[] args) {
//int sum = getSum(4,5); //赋值调用
//System.out.println(sum);
//有具体返回值
//getSum(4,5); //单独调用不推荐
System.out.println(getSum(4,5)); //输出调用
//return; //如果方法的返回值类型是void,有return语句是这样写的return;
<span style="white-space:pre"> </span>//这个return可以省略,省略之后jvm会帮我加上
/*求两个整数的和
1,明确返回值类型
2,明确参数列表
*/
public static int getSum(int x,int y) {//int x = 4,int y = 5
int sum = x + y; // sum = 9
return sum;
}
class Demo6Method {
//方法重载,方法名相同,只看参数列表,不看返回值类型
/*
1,参数个数不同
2,参数类型不同
3,参数顺序不同(开发时不建议,因为没什么意义)
*/
public static void main(String[] args) {
double sum = getSum(3,4.0);
System.out.println(sum);
}
//求两个数的和
/*
1,返回值类型int
2,参数列表 int a,int b
*/
public static double getSum(int a,double b) {
return a + b;
}
//求三个数的和
/*
1,返回值类型 int
2,参数列表 int a,int b,int c
*/
public static double getSum(double a,int b) {
return a + b;
}
class Demo1Array {
public static void main(String[] args) {
//声明数组
//int[] arr1; //数据类型[] 数组名;
//int arr2[]; //数据类型 数组名[];
//动态初始化,没有给数组赋具体的值
int[] arr = new int[5]; //new是一个关键字,用来创建实体对象
//5代表数组的长度
arr[0] = 5;
arr[4] = 10;
//静态初始化
int[] arr2 = new int[]{1,2,3}; //静态初始化,不用知道数组长度,长度根据元素个数
//int[] arr1 = new int[]{1,2,3,4,5}; //静态初始化,一初始化就赋值,不允许声明后赋值,根据值的个数决定长度
//int[] arr2 = {1,2,3,4,5}; //静态初始化的简写形式,只能在一行定义
}
}
class Demo4Array {
public static void main(String[] args) {
int[] arr1 = {1,2,3,4,5};
//System.out.println(arr1[-1]); //ArrayIndexOutOfBoundsException:数组索引越界异常
System.out.println(arr1); //[I@1afb7ac7
arr1 = null; //将数组赋值为null
System.out.println(arr1[0]); //NullPointerException:空指针异常
}
}
class Demo7Array {
public static void main(String[] args) {
int[] arr = {11,22,33,44,55};
/*for (int x = 0;x < arr.length ;x++ ) { //正序遍历
System.out.println(arr[x]);
}
for (int x = arr.length - 1;x >= 0 ;x-- ) { //倒序遍历
System.out.println(arr[x]);
}*/
revArray(arr); //对数组反转操作
print(arr); //遍历打印数组
}
/*
将数组反转
1,返回值类型void
2,参数列表,int[] arr
*/
public static void revArray(int[] arr) {
for (int x = 0;x < arr.length / 2 ; x++) {
int temp = arr[x];
arr[x] = arr[arr.length-1-x];
arr[arr.length-1-x] = temp;
}
}
/*
将数组打印
1,返回值类型void
2,参数列表,int[] arr
*/
public static void print(int[] arr) {
for (int x = 0;x < arr.length ;x++ ) {
System.out.print(arr[x] + " ");
}
}
}