方法(函数)与数组

方法

1.1 方法的概念及作用

  1. 概念:方法,也叫函数,但是一般在java中都叫方法,可以## 标题看成是一个可以完成独立功能的代码块,可以反复使用,每次使用都是独立的!存在于类的结构体

  2. 作用:反复使用。每次使用都是独立的
    1.2 认识方法
    public static void main(String[] args){
    add(1,2);//调用add方法
    }
    public static void add(int a,int b){//方法(函数):一个设计好的功能代码块,可以反复的使用
    int sum = a+b;//功能语句,求和
    System.out.println(sum);//输出计算结果
    }

    1. public static修饰符
      a) 修饰给与特殊意义
    2. void:此处位置返回值类型,void 表示没有返回值
    3. main:方法名字
    4. (String[] args) : 一个形式参数,String[] 数据类型 args形式参数名字
      a) 形式参数: 本质没有值的;可以看成是有值的,在方法的内部完成功能的设计
    5. {}:方法的结构体
      a) 完成功能的设计

*/
5) {}:方法的结构体
a) 完成功能的设计
6) 存在于类的结构体
1.3 方法的语法:
返回值类型 方法名字( 形式参数 ){
}

  1. 返回值: 必须有
  2. 方法名字:必须有
  3. 小括号: 必须有
  4. 形式参数:根据需要设定,也可以没有形式参数
    a. 方法可以看成完成功能的代码块
    b. 举例说明:代码块看成豆浆机
    a) 豆浆机会有入口[ 说明 :放绿豆 黄豆 豆豆 ]
  5. 大括号: 必须有: 但是功能语句可以任意写

1.5 方法的使用

  1. 使用方法的三种方式
  1. 方法有static修饰:类名.方法名+参数列表[个数,顺序,类型必须一致]
  2. 方法没有static修饰:对象名.方法名+参数列表[个数,顺序,类型必须一致]
  3. 方法在同一个类中:方法名+参数列表[个数,顺序,类型必须一致]
    a) +参数列表: 传入对应类型的数据
  1. 注意事项:
  1. 对于方法的使用者而言,无需关心方法内部的实现
  2. 同一个类中:静态方法不能调用非静态的方法
  3. 同一个类中:非静态方法可以调用静态方法[ 自己读 测试]
    1.7 方法签名:
  4. 需求:在同一个;类设计一个方法完成二个整数求和
  5. 思考:在一个类中是如何找到的一个方法
  6. 概念:方法名字+参数列表[类型,个数,顺序:必须一致]
    public static void main(String[] args){
    int a = 1;//声明一个变量
    int b = 2;//声明一个变量
    int sum=add(a,b);//声明一个变量来储存调用方法的值
    }
    static viod add(int a,int b){
    //static void add(int a,int b){//方法签名:方法名和形式参数不能同时相同
    //static void add(int a,int b,int c){方法重载:方法名相同,参数列表不同
    int sum=a+b;
    System.out.println(sum);
    }

1.8 方法重载:

  1. 思考:在同一个类中如果在设计一个方法求两个整数的和会怎么样?
  2. 概念:在同一个类中,方法名字相同,参数列表不同
    1.9 方法return
    ① 方式:将方法运算的结果返回给方法调用着,方法内部将运算结果使用语句:
    return 值/变量/表达式;
    ② 方法返回值的位置,必须写与方法内部返回值的数据一致的数据类型
    ③ 注意:返回的是数据,不是变量或者表达式
    ④ 方法返回值的结果,怎么使用?
    注意事项:有返回值方法,一定要有对应返回语句
    public static void main(String[] args){
    int a = 1;//声明一个变量
    int b = 2;//声明一个变量
    int sum=add(a,b);//声明一个变量来储存调用方法的值
    System.out.println(sum);
    }
    //方法return
    static int add(int a,int b){//必须返回与int一致的数据类型
    int sum=a+b;
    return sum;//使用完成之后,如果有结果值(返回的是值),返回给方法使用者
    }

结论:
①如果一个方法的返回类型不是void,那么要求[不管方法里面做了什么事情]
都必须返回一个和返回值类型匹配的值
②对于结构体语句中写返回值:编译检查语法,只看结构不看值:
结构体中写了返回值不一定执行的到,编译语法会不通过!
1.10方法使用的常见问题

  1. 忽略方法每次使用都是一次独立的使用
  2. 对于执行执行顺序变得模糊
  3. 方法调用错误,只使用了方法名字!缺少参数列表
  4. 有返回值的方法使用
    a) 使用了方法但是没有使用方法的结果值【 打印不出来结果 】
    b) 主方法中已经使用方法,打印语句括号中再次调用方法使用结果【方法功能重复使用】
  5. 没返回值的方法使用
    a) 将没有返回值的方法【void】方法调用放入打印语句小括号

数组

概念:数组可以理解成在计算机中的多个连续的存储空间,里面可以按顺序存放多个类型相同的数据。
//数组语法:数据类型[] 数组名 = new 数据类型[长度];
public static void main(String[] args){
int[] arr = new int[9];//声明了一个int类型的数组,数组名arr长度为9
arr[0] = 1;
arr[1] = 2;
arr[0] = 11;//一个存储空间只会存一个值
System.out.println(arr[0]+"-----"+arr[1]);
System.out.println(arr.length);//数组长度属性*****数组名.length

  1. 数组名 : 数组的名字
  2. 数组元素 :就是存放在数组里面的数据
  3. 数组索引 :就是数组里面连续存储空间的编号,从0开始
  4. length :数组的属性长度 数组名.length拿到数组的长度

创建数组的方式

  1. 动态创建之声明的同时赋值
    数据类型 [] 数组变量名 = new 数据类型[数组长度];
    int[] arr = new int[10];
    2.3 如何使用
    对于计算机内存存储空间的使用最重要的就是存值取值
  2. 存值
    (1) 数组名[索引位置] = 值;
  3. 取值
    (1) 数组名[索引位置]
    (2) 数组遍历
    int[] arr = new int[5];//int[]数据类型,arr看成一个变量名,持有地址值,new是关键字
    arr[0]=12;//存入12
    System.out.println(arr[0]);//输出数组中的值
    System.out.println(arr);//[I@1db9742地址值

2.4 JVM存储数据分析
JVM的内存分析-》帮助我们理解代码中引用类型数据

  1. 堆:可以理解为凡是new 出来的东西都放在这里面,堆内存可以被虚拟机动态的分配内存大小,无需事先告诉编译器的数据的大小、生命周期等相关信息
  2. 栈:主要存放一些变量容器名 (例如局部变量名,还可以存放局部变量 基本类型 数据值),栈内存被要求存放在其中的数据的大小、生命周期必须是已经确定的
  3. 图例

2.5 数组特点

  1. 数据类型限定了数组可以存放的数据类型

  2. 一个数组可以存储多个元素

  3. 一旦数组对象被创建好,那么其长度就固定不变了

  4. 动态创建好数组之后,会自动分配默认值,和数组中的元素类型有关(类似之前成员变量的默认值)
    2.6 常见问题

  5. 数组索引越界【索引有哪些,索引的范围?(所有数组都有一个length属性)】

  6. 空指针错误

  7. 如果有返回值,不知道return写在哪里
    int[] arr = {1,1,3,4,6,7};//0~5
    System.out.println(arr.length);//数组的长度
    System.out.println(arr);

    //1.数组越界【索引,多了或者少了,不在一个数组的索引范围】
    //System.out.println(arr[arr.length]);//Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 6
    //遍历
    for(int i = 0;i<=arr.length;i++){//没有arr.length-1就会出现索引越界
    	System.out.println("索引位置:"+i);
    	System.out.println(arr[i]);
    }
    
    //空指针异常
    int[] ar = null;//arr根本就没有指向一个数组【数组不存在】
    //编译不报错:只看类型不看值,不会看到底有没有数组,但是运行一定会看数组在不在【看是否有值】
    System.out.println(ar.length);
    
    String str = null;
    

    }
    //如果有返回值,不知道return写在哪里】
    static int[] getArr(){
    return new int[10];
    }

2.7 获得数组的其他语法补充

  1. 动态创建之先声明后赋值
    数据类型 [] 数组变量名;
    int[] arr;
    数组变量名 = new 数据类型[数组长度];
    arr = new int[10];
  2. 动态创建之声明的同时赋值
    数据类型[] 数组名 = new 数据类型[数组长度];
  3. 静态创建之复杂写法
  1. 推荐写法:
    a. 声明的同时赋值
    数据类型 [] 数组变量名 = new 数据类型[] {多个以英文逗号分隔的数据};
    int[] arr = new int[]{1,2,3,4,5,6,7}
    b. 先声明后赋值
    数据类型 [] 数组变量名;
    数组变量名 = new 数据类型[] {多个以英文逗号分隔的数据};
  2. 不推荐写法
    a. 声明的同时赋值
    数据类型 数组变量名 [] = new 数据类型[] {多个以英文逗号分隔的数据};
    b. 先声明后赋值
    数据类型 数组变量名 [];
    数组变量名 [] = new 数据类型[] {多个以英文逗号分隔的数据};
  1. 静态创建简写方式
  1. 声明的同时赋值
    数据类型[] 数组变量名 = {多个以英文逗号分隔的数据};//接下来学习中最常用

  2. 先声明后赋值[编译器不允许,错误写法]
    数据类型[] 数组变量名;
    数组变量名 = {多个以英文逗号分隔的数据};
    打印数组
     设计一个方法,打印传入int数组中的所有元素,打印的格式:[11,22,44,55]

  3. 定义一个方法print,方法参数修改为int 数组(变量名为arr)

  4. 方法里 使用 for循环 遍历数组,使用System.out.println打印

  5. main方法里创建一个数组,然后调用方法print方法

  6. 打印结果换行了,但是我们要求打印一行,所以使用System.out.print

  7. 但是我们要求打印用 逗号 分割,所以System.out.print(arr[i]+”,”)

  8. 前后要求还有个 中括号,所以我们加上打印 [ 和 ]
    int[] arr = {4,4,23,423,42,34};//声明了一个int类型的数组,数组名arr长度为6

    printArr(arr);
    

    }
    //设计一个方法【打印数组】[1,2,3,4,5,6,7,8]
    static void printArr(int[] arr){
    System.out.print("[");
    for(int i = 0;i<=arr.length-1;i++){//判断语句
    if(i==arr.length-1){//判断如果为最后一个直接打印
    System.out.print(arr[i]);
    }else{
    System.out.print(arr[i]+",");//如果不为最后一个则打印逗号
    }
    }
    System.out.print("]");//结束打印[

    }

  1. 方法参数传递[掌握]
    4.1 什么是方法参数传递
  1. 概念:在使用方法的时候,传入值或者变量,传递的到底是什么?

  2. 值传递:方法传递的是值
    a) 形式参数类型是基本数据类型
    b) 基本类型数据传递的是值

  3. 值引用:方法传递的是值得引用
    a) 形式参数类型是引用数据类型
    b) 引用传递其实传的是地址,形式参数类型是引用数据类型或数组。
    c) 实际参数(数据)是对象(或数组),这时实际参数与形式参数指向同一个地址
    d) 在方法执行中,对形式参数的操作实际上就是对实际参数的操作,这个结果在方法结束后被 保留了下来,所以方法执行中形式参数的改变将会影响实际参数。

  4. 值传递示例: 定义一个change 方法 和 int 形参

  5. 值引用再看一个示例,定义一个change 方法 和 int 数组 的形参,交换数组中前面2个元素

  6. 注意:方法调用时,实际参数把它的值传递给对应的形式参数,相当于拷贝了一份值给形式参数, 所以方法执行中形式参数值的改变不影响实际参数的值。
    a) 基本数据不影响原来的值
    b) 引用数据不影响原来的地址值:
    引用地址,引用的值,如果被改变,原来引用的的值所引用的值也会被改变,
    因为都是同一个引用
    public static void main(String[] args){
    int a = 10;//基本数据类型
    int[] arr = {66};//引用数据类型
    System.out.println(a);//10
    System.out.println(arr[0]);//66
    //-------------------------------------
    changeData(a);
    changeData(arr);

    System.out.println(a);//10
    System.out.println(arr[0]);//99
    

    }
    static void changeData(int a){
    //System.out.println(“int-”+a);//10
    a = 55;
    }
    static void changeData(int[] a){
    //System.out.println(“int[]-”+a);//[I@15db9742-----传递地址值
    a[0] = 99;
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值