1. 初识方法
- 方法的定义完整格式:
修饰符 返回值类型 方法名称 (参数类型 参数名称, ...){
方法体;
return 返回值;
}
- 修饰符:现阶段固定写法 public static
- 返回值类型:最终产生的数据结果的类型
- 方法名称:方法的名字 小驼峰式
- 参数类型:进入方法的数据的类型
- 参数名称:进入方法的数据对应的变量名称
- 参数如果有多个 用逗号进行分隔
- 方法体:方法需要做的事情 若干行代码
- return:两个作用 第一停止当前方法 第二将后面的返回值还给调用处
- 返回值:方法执行后最终产生的数据结果
- return 后面的返回值必须和方法名称前面的返回值类型保持一致
- 有参数:小括号中有内容 一个方法需要一些数据条件才能完成任务
- 无参数:小括号留空 一个方法不需要任何数据条件就能完成任务
举例
//定义一个两数相加的方法:
public static int add(int a,int b){
int result=a+b;
return result;
}
2. 方法的调用
- 方法的调用:
- 1.单独调用:方法名称(参数);
- 2.打印调用:System.out.println(方法名称(参数));
- 3.赋值调用:数据类型 变量名称 = 方法名称(参数);
- 注意:返回值类型固定写为void 这种方法只能单独调用 不能打印调用或赋值调用,有返回值时 可以单独调用 打印调用 和 赋值调用
System.out.println("==========");
//单独调用
add(10,20);
System.out.println("==========");
//打印调用
System.out.println(add(10,20));// 30
System.out.println("==========");
//赋值调用
int number=add(15,25);
number+=100;
System.out.println("变量的值"+number);
举例
//定义一个方法 判断两个数是否相同
public static boolean isSame(int a,int b){
//语句一:boolean same = a==b ? true : false; return same;
//语句二:boolean same = a==b; return same;
//语句三:boolean same; if(a==b){same=true}else{same=false} return same;
//语句四:(执行)
return a==b;
}
System.out.println(isSame(10,20));
System.out.println(isSame(20,20));
//定义一个方法 打印指定次数的HELLO WORLD
public static void print(int a){
for (int i=0;i<a;i++){
System.out.println("HELLO WORLD "+i);
}
}
print(10);
//定义一个方法求出1-100的和
public static int sum(){
int sum=0;
for (int i = 1; i <= 100; i++) {
sum+=i;
}
return sum;
}
System.out.println("1-100的和为:"+sum());
- 使用方法的注意事项:
- 1.方法应该定义在类中 但是不能在方法中再定义方法 不能嵌套
- 2.方法定义的前后顺序无所谓
- 3.方法定义之后不会执行 如果希望执行 一定要调用 单独调用 打印调用 赋值调用
- 4.如果方法有返回值 那么必须写上 return 返回值; 不能没有
- 5.return 后面的返回值必须和方法名称前面的返回值类型保持一致
- 6.对于一个void没有返回值的方法 不能写return后面的返回值 只能写return自己
- 7.对于void方法当中最后一行的return可以省略不写
- 8.一个方法当中可以有多个return语句 但是必须保证同时只有一个会被执行到 两个return不能连写
3. 方法的重载
-
方法的重载:
多个方法的名称一样 但是参数列表不一样 -
好处:
只需要记住一个方法名称 就可以实现类似的多个功能举例
//方法的重载:
public static int sum(int a,int b){
System.out.println("有两个参数的方法执行");
return a+b;
}
public static int sum(int a,int b,int c){
System.out.println("有三个参数的方法执行");
return a+b+c;
}
public static int sum(int a,int b,int c,int d){
System.out.println("有四个参数的方法执行");
return a+b+c+d;
}
//方法重载
System.out.println(sum(10,20));// 30
System.out.println(sum(10,20,30));// 60
System.out.println(sum(10,20,30,40));// 100
- 方法重载与下列因素相关:
- 1.参数个数不同
- 2.参数类型不同
- 3.参数的多类型顺序不同
- 方法重载与下列因素无关:
- 1.与参数的名称无关
- 2.与方法的返回值类型无关
举例
//方法重载
public static int sum(int a,int b){
return a+b;
}
public static int sum(double a,double b){
return a+b;
}
public static int sum(int a,int b,int c){
return a+b+c;
}
public static int sum(double a,int b){
return a+b;
}
public static int sum(int a,double b){
return a+b;
}
//报错
public static int sum(int x,int y){
return x+y;
}
public static double sum(int a,int b){
return (double)(a+b);
}
4. 数组及初始化
-
数组:同时存放多个数据值
-
特点:
- 1.数组是一种引用数据类型
- 2.数组当中的多个数据类型必须统一
- 3.数组的长度在程序运行期间不可改变
-
两种常见的数组初始化:
- 1.动态初始化(指定长度)
- 2.静态初始化(指定长度)
-
动态初始化数组格式:
- 数据类型[] 数组名称 = new 数据类型 [数组长度]
- 含义解析:
- 左侧的数据类型:也就是数组中保存的数据 全都是统一的什么类型
- 左侧的中括号:代表一个数组
- 左侧数组名称:代表数组的名字
- 右侧的new:代表创建数组的动作
- 右侧的数据类型:必须和左边数据类型保持一致
- 右侧中括号的长度:也就是数组中到底可以保存多少个数据 是一个int类型数据
举例
//创建一个数组 里面可以存放300个int数据
//格式:数据类型[] 数组名称 = new 数据类型 [数组长度]
int[] arrayA = new int[300];
//创建一个数组 能存放10个double类型的数据
double[] arrayB = new double[10];
//创建一个数组 能存放5个字符串
String[] ayyayC = new String[5];
- 静态初始化数组格式:
- 数据类型[] 数组名称 = new 数据类型[] {元素1,元素2,…};
- 注意事项:虽然静态初始化没有直接告诉长度 但可根据大括号里面的元素具体内容推算数组的长度
//直接创建一个数组 里面装的是int数字 具体为 5 15 25
int[] arrayD = new int[] {5,15,25};
//创建一个数组 存储字符串 "hello" "world" "java"
String[] arrayE =new String[] {"hello","world","java"};
-
静态初始化数组省略格式:
- 数据类型[] 数组名称 = {元素1,元素2,…};
-
注意事项:
- 1.静态初始化没有指定长度 仍会自动推算得到长度
- 2.动态初始化 静态初始化都可以拆分为两个步骤
- 3.静态初始化一旦使用省略格式 则不能拆分为两个步骤
举例
//省略格式的静态初始化
int[] arrayF = {10,20,30};
//静态初始化 动态初始化 拆分为两个步骤
int[] arrayG;
arrayG = new int[] {10,20,30};
int[] arrayH;
arrayH = new int[5];
//静态初始化的省略格式不能拆分为两个步骤
int[] arrayI;
arrayI = {10,20,30};//错误写法!
5.访问数组元素
- 访问数组元素:
- 直接打印数组名称 得到的是数组对应内存地址的哈希值
- 访问数组元素的格式:数组名称[索引值];
- 索引值从0开始 一直到数组的长度-1为止
//静态初始化的省略格式
int[] array ={10,20,30};
System.out.println(array);//打印数组对应内存地址哈希值
System.out.println(array[0]);// 10
System.out.println(array[1]);// 20
System.out.println(array[2]);// 30
int num=array[1];
System.out.println(num);// 20
- 使用动态初始化数组 其中的元素将会自动拥有一个默认值
- 整数类型:默认为0 浮点数类型:默认为0.0 字符类型:默认为’\u0000’
- 布尔类型:默认为false 引用类型:默认为null
- 注意事项:静态初始化也有默认值的过程 系统自动马上将默认值换成了大括号中的数值*
//动态初始化一个数组
int[] array=new int[3];
System.out.println(array);//内存地址哈希值
System.out.println(array[0]);// 0
System.out.println(array[1]);// 0
System.out.println(array[2]);// 0
array[1]=123;
System.out.println(array[0]);// 0
System.out.println(array[1]);// 123
System.out.println(array[2]);// 0
- Java的内存划分为5个部分:
1.栈(Stack):存放的都是方法中的局部变量 方法的运行一定要在栈中运行
局部变量:方法的参数 或者说方法{}内部的变量
作用域:一旦超出作用域 立刻从栈内存当中消失
2.堆(Heap):凡是new出的东西都在堆中
堆内存里面的东西都有一个地址值:16进制
堆内存里面的数据 都有默认值
整数类型:默认为0 浮点数类型:默认为0.0 字符类型:默认为'\u0000'
布尔类型:默认为false 引用类型:默认为null
3.方法区(Method Area):存储.class相关信息 包含方法的信息
4.本地方法栈(Native Method Stack):与操作系统相关
5.寄存器(pc Register):与CPU相关
- 数组索引编号从0开始到数组长度-1为止
- 如果访问数组元素索引编号并不存在 则将发生数组索引越界异常
ArrayIndexOutOfBoundsException
- 所有的引用类型变量 都可以赋值为一个null 但是代表其中什么都没有
- 数组必须进行new初始化才能使用其中的元素
- 如果只是赋值了一个null没有进行new创建 则将发生空指针异常
NullPointerException
int[] array = null;
array = new int[3];
System.out.println(array[0]
- 获取数组长度:数组名称.length 得到一个int数字
- 数组一旦创建 程序运行期间 长度不可改变
int[] arrayA={1,2,3,5,6,88,9,48,4,4,7,9,2,7,10,88,54,1};
int len= arrayA.length;
System.out.println("arrayA的长度是"+len);
int[] arrayB=new int[3];
System.out.println(arrayB.length);// 3
System.out.println(arrayB);
System.out.println("==============");
arrayB=new int[5];
System.out.println(arrayB.length);// 5
System.out.println(arrayB);
System.out.println("==============");
- 数组遍历
int[] arrayA={1,2,3,5,6,88,9,48,4,4,7,9,2,7,10,88,54,1};
int len= arrayA.length;
for循环 次数就是数组的长度
for (int i = 0; i < arrayA.length; i++) {
System.out.print(" "+arrayA[i]);
}
- 数组最值问题
int min=arrayA[0],max=arrayA[0];
for (int i = 1; i < arrayA.length; i++) {
System.out.print(" "+arrayA[i]);
if(min>arrayA[i]){
min=arrayA[i];
}
if(max<arrayA[i]){
max=arrayA[i];
}
}
System.out.println();
System.out.println("arrayA的最小值为"+min);
System.out.println("arrayA的最大值为"+max);
- 数组元素反转
初始化语句:int min=0,int max =array.length-1
条件判断:min<max
步进表达式:min++,max--
循环体:int temp 交换array[min] array[max]
for (int i = 0; i < arrayA.length; i++) {
System.out.print(" "+arrayA[i]);
}
System.out.println();
for (int min = 0,max=arrayA.length-1; min <max; min++,max--) {
int temp;
temp=arrayA[min];
arrayA[min]=arrayA[max];
arrayA[max]=temp;
}
for (int i = 0; i < arrayA.length; i++) {
System.out.print(" "+arrayA[i]);
}
- 数组作为方法参数_传址
- 数组作为方法返回值_返回地址
- 数组作为方法参数 向小括号里进行传参 传递的是数组的地址
public static void printarrayA(int[] array) {
System.out.println("传递的参数是:"+array);
for (int i = 0; i < array.length; i++) {
System.out.print(" " + array[i]);
}
}
printarrayA(arrayA);// 调用
//如果希望一个方法中可以返回多个相同类型的返回值 可以使用一个数组作为返回值类型即可
public static int[] calculate(int a,int b,int c){
int sum=a+b+c;
int avg=sum/3;
//int[] array=new int[2];
//array[0]=sum;
//array[1]=avg;
//return array;
int[] array={sum,avg};
System.out.println("array of address is:"+array);
return array;
int[] result=calculate(10,20,30);
System.out.println("result of address is:"+result);
System.out.println("sum="+result[0]);
System.out.println("avg="+result[1]);
- ——————END-2022-04-04——————
- 个人学习笔记,如有纰漏,敬请指正。
- 感谢您的阅读。