方法:
方法的定义与使用:
java中方法就是函数,将实现某些功能的代码封装到方法中。
/*
概念:就是完成某个功能的代码,函数就是方法
格式:
修饰符 返回值类型 方法名(参数类型 参数名1,参数类型 参数名2....){
方法体语句:
return 返回值:
}
详细解释:
修饰符:目前就用 public static
返回值类型:就是功能结果的数据类型。
方法名:符合命名规则即可,方便我们的调用
参数:
实际参数:就是实际参与运算的
形式参数:就是方法定义上的,用于接收实际参数的
参数类型:就是参数的数据类型
参数名:就是变量名
方法体语句:就是完成功能的代码
返回值:就是功能的结果。由return带给调用者
要想写好一个方法,必须明确两个东西:
A:返回值的类型:结果的数据类型
B:参数列表:你要传递几个参数,以及每个参数的数据类型
需求:求两个数据之和的案例
方法的执行特点:不调用,不执行
如何调用方法?
A:单独调用,一般没有意义,不推荐
B:输出调用,但是不够好
C:赋值调用,推荐使用
*/
class FunctionDemo{
public static void main(String[] args){
int x = 10;
int y = 20;
// 方式1:单独调用
sum(x, y);
// 方式2:输出调用
System.out.println(sum(x, y));
// 方式3:赋值调用
int result = sum(x,y);
System.out.println(result);
}
/*
需求:求两个数据之和的案例
两个明确:
返回值类型:int
参数列表:2个,都是int类型
*/
public static int sum(int a,int b){
int c = a + b;
return c;
}
}
注意:无返回值时,返回值类型为void,只能使用单独调用
练习:
/*
键盘录入两个值,返回两个数中的较大值
*/
import java.util.Scanner;
class MaxDemo{
// 求最大值
public static int max(int a,int b){
if(a > b){
return a;
}else{
return b;
}
}
// 主方法
public static void main(String[] args){
// 创建键盘录入对象
Scanner sc = new Scanner(System.in);
System.out.println("请输入第一个数据");
int a = sc.nextInt();
System.out.println("请输入第二个数据");
int b = sc.nextInt();
int result = max(a,b);
System.out.println("最大值为:"+result);
}
}
方法重载:
对于有相同功能的函数,但是参数的个数发生了改变,一种情况是用不同的名字命名,但是我们的方法要求见名知意,针对这种情况:方法的功能相同,参数列表不同的情况,为了见名知意,Java允许他们起一样的名字。
/*
方法重载:
概述:在同一个类中,允许存在一个以上的同名方法,只要他们的参数个数
或者参数类型不同即可。
特点:
A:与返回值类型无关,只看方法名和参数列表
B:在调用时,虚拟机通过参数列表的不同来区分同名方法
*/
class FunctionDemo1{
// 求两个数的和
public static int sum(int a, int b){
return a + b;
}
// 求三个数的和
public static int sum(int a, int b, int c){
return a + b + c;
}
// 求四个数的和
public static int sum(int a, int b, int c, int d){
return a + b + c + d;
}
public static void main(String[] args){
System.out.println(sum(10,20));
System.out.println(sum(10,20,30));
System.out.println(sum(10,20,30,40));
}
}
总结:方法名相同时,调用方法的使用会根据参数的个数和类型进行选择,这是JVM自己进行的。
注意事项:
- 方法不调用不执行
- 方法与方法平级关系,不能嵌套使用
- 方法定义的时候,参数用逗号隔开
- 方法调用的时候,不需要在传递数据类型
- 如果方法有明确的返回值,一定要有return带回一个值
数组:
数组的定义:
/*
数组:
概念:
A:数组是存储同一种数据类型多个元素的集合,也可以看成是一个容器
B:数组既可以存储基本数据类型,也可以存储引用数据类型
格式定义:
格式1:数据类型[] 数组名;
格式2:数据类型 数组名[];
注意:这两种定义做完了,数组中是没有元素值得。并且推荐使用格式1.
*/
class ArrayDemo{
public static void main(String[] args){
// 定义一个数组
int[] a;
int a[];
}
}
数组的初始化和索引:
/*
数组的初始化:
概述:
A:Java中的数组必须先初始化,然后才能使用。
B:所谓初始化,就是为数组中的数组元素分配内存空间,并未每个数组元素赋值
初始化方式:
A:动态初始化,初始化只指定数组长度,由系统为数组分配初始值,数组长度必须是
数组中元素个数
格式:数据类型[] 数组名 = new 数据类型[数组长度];
B:静态初始化,初始化时指定每个数组元素的初始值,由系统决定数组长度
格式:数据类型[] 数组名 = new 数据类型[]{元素1,元素2...}
*/
class ArrayDemo1{
public static void main(String[] args){
// 动态初始化
// 定义一个int类型的数组,可以存放3个int类型的值
int[] arr = new int[3];
System.out.println(arr); // 输出的是地址值 [I@15db9742
// 静态初始化
int[] arr = new int[]{1,2,3};
// 简化格式
int[] arr = {1, 2, 3};
// 因次,我们需要或许地址中的元素。
// 在java中,数组中的每一个元素都是有编号的,从0开始,最大编号是数组的长度-1
// 用数组名和编号配合就可以获取指定编号的元素,这就是常说的索引
// 通过数组名访问数据的格式是:数组名[索引];
System.out.println(arr[0]);
System.out.println(arr[1]);
System.out.println(arr[2]);
}
}
java中的内存分配:
java程序在运行时,需在内存中分配空间,为了提高运算效率,就对空间进行了不同区域的划分,因为每一篇区域都有特定的处理数据和内存管理方式。
- 栈 存储局部变量
- 堆 存储new出来的东西
- 方法区
- 本地方法区(和系统有关)
- 寄存器(给cpu使用)
局部变量:在方法定义中或者方法声明上的变量都称为局部变量。
数组的赋值和内存空间的变化:
/*
给数组赋值
*/
class ArrayDemo2{
public static void main(String[] args){
int[] arr = new int[3];
System.out.println(arr[0]);
// 给数组赋值
arr[0] = 10;
arr[1] = 20;
arr[2] = 30;
System.out.println(arr[0]);
}
}
一个数组的内存空间:
两个数组的内存空间变化
注意:
- 不要动态和静态初始化同时使用。
- 注意数组索引越界异常
- arr = null; 导致数组不指向堆内存了
小技巧:
- 求数组的长度,数组有length属性:arr.length