从零开始学Java--第六章(方法和数组)

72 阅读7分钟

一。方法概述

什么是方法?方法也叫函数,是完成特定功能的代码块,简单来说,一个方法就是一个功能,一个动作,或一种行为
为什么需要方法?当一些代码被重复使用时,可以把它们提取出来,放到一个方法里,以方法的形式使用这些代码
方法的好处?大大提高代码的复用性,方便维护

二。方法格式

格式:
    修饰符 返回值类型 方法名(参数类型 参数名1,参数类型 参数名2,......){
        //方法体语句;
        return 返回值;
    }
例如:
    public static void main(String[] args) {
        System.out.println("HelloWorld");
        return;
    }
格式说明:
    修饰符:public(访问修饰符) static(修饰符)
    返回值类型:方法执行结果的数据类型
    方法名:方法的名称,符合标识符命名规则即可
    参数列表:方法执行的条件
        参数类型:可以是基本类型,可以是引用类型
        参数名:即变量名
    方法体语句:完成特定功能的代码块
    return:意思是返回,用于结束方法
    返回值:方法执行的结果,返回给方法的调用者。若方法没有返回值,则它的返回值类型为void,如main方法

三。方法定义和调用

  方法的定义:
      如何定义一个方法?
          确定方法名
          确定返回值类型
          确定参数列表
      定义方法的注意事项:
          方法必须定义在类中,方法之间是平级关系,不能嵌套定义
          方法没有返回值,返回值类型必须写成:void
          方法返回值类型为void时,可以省略return语句(系统会帮你加上)
          return语句后的数据类型必须和返回值类型匹配
          return之后不能再放置语句
          方法调用时,若不关心方法的返回结果,可以直接调用,省略接收返回值的动作(如:person.setAge(); 创建一个Person对象person,设置年龄,并不关心setAge方法的返回值,所以不用定义变量接收返回值)
  方法的调用:
      概念:使用方法的过程称为方法的调用
      调用方式:通过方法名调用方法,根据形式参数列表把实际参数传递给方法
          形式参数:定义方法时参数的列表称为形式参数(形容方法的参数)
          实际参数:调用方法时传递给方法的参数,必须符合形参的个数和对应位置的数据类型
      调用方法的步骤:
          1.直接写方法名,调用方法
          2.方法要什么类型的参数,调用的时候传入什么类型的参数
          3.方法返回什么类型的值,就用什么类型的值接收
      方法调用过程图解:
          1.通过方法名调用方法  
          2.传递实际参数  
          3.方法执行时,实际参数赋值给形式参数  
          4.在方法中进行运算,并将结果赋值给变量c  
          5.方法的返回值c赋值给接收者x(如果方法没有返回值,则不需要接收)  
          案例:见MethodDemo1 ,MethodDemo2  

四。方法重载

什么是方法重载:在同一个类中的多个方法,他们方法名相同,参数列表不同,这样的情况称为方法重载。方法重载和返回值类型无关
    参数列表不同:参数个数不同;对应位置参数类型不同
    方法签名:方法名+参数列表(可以确定是哪一个方法)
为什么需要方法重载:当实现功能相同,但实现方式不同时,我们可以通过定义名称相同,参数(条件)不同的方法,来更好的识别和管理类中的方法
    如:想定义一个求和的方法,但是需要求不同类型数据之和。这样的情况就是实现功能相同,但是实现方式不同。
    案例:OverloadDemo

五。数组概述

 为什么需要数组?为了存储多个数据
 什么是数组?数组是用于存储同一种数据类型多个元素的容器
     数据类型:可以是基本类型,可以是引用类型
     容器:如:教室,衣柜,纸箱等,可以存放多个事物

六。数组定义和访问

数组的定义:
    定义格式一:数据类型[] 数组名 = new  数据类型[长度];
               如:int[] array = new int[3]; 
    格式详解:
        数据类型:数组中存储元素的数据类型,可以是基本类型,可以是引用类型
        []:表示数组
        数组名:数组的变量名,遵循标识符的命名规范
        new:创建数组的关键字,通过new开辟内存空间
        长度:数组长度,数组最多能存放元素的个数
            数组长度在定义时指定,不可更改
             
    定义格式二:数据类型[] 数组名 = new 数据类型[]{元素1,元素2,元素3....}
               好处:定义时元素是确定的,避免内存空间的浪费
    定义格式三:数据类型[] 数据名 = {元素1,元素2,元素3....}
            格式三是格式二的简写
数组的访问:
    概念:通过数组的索引访问数组的元素
    索引:也叫下标,脚标。是数组元素距离数组起始位置的偏移量。第一个元素的偏移量是0,所以数组的索引从0开始(通俗讲,数组元素的下标从0开始,索引是下标/脚标)
    格式:数组名[索引]
        取值:数组名[索引]
        赋值:数组名[索引] = 值;
        

七。数组常见操作

数组遍历:
    需求:给定一个int型数组,输出数组的每一个元素
    分析:
        A:使用格式一定义一个长度为5int型数据
        B: 为数组的前三个元素赋值为123
        C:使用循环遍历数组:
    结论:
        1.数组长度:数组名.length
        2.数组最大索引 = 数组长度 - 1
        3.数组中未手动赋值的元素,有默认值0
        4.直接输出数组变量名,得到数组的内存地址值。
            如:[I@1e643faf.  [代表数组; I代表int型数组; @代表连接符; 1e643faf代表内存地址值。
数组初始化:
    概念:在内存中为数组开辟连续空间并为每个元素赋值的过程
        内存:计算机的重要组件,用于程序运行中临时存储数据的
        连续空间:数组元素在内存空间中存放位置是连续的
    数组动态初始化:只指定长度,由系统给默认值。如格式一:int[] arr1 = new int[3];
        默认值:
            整数型:0
            浮点型:0.0
            字符型:'\u0000'
            布尔型:false
            引用类型:null
    数组静态初始化:给出初始值,由系统决定数组长度。如格式二/格式三:int[] arr2 = new int[] {1,2,3,4}  int[] arr2 = {1,2,3,4,5}
    Java程序的内存分配:
        方法区:存储可运行的class文件(字节码文件),包含方法,静态成员,常量(自定义常量)等。
        栈(Stack):方法运行时使用的内存,特点:后进先出,先进后出。即最先进栈区的方法最后出栈
        堆(Heap):存储new出来的数组或对象(面向对象部分详解)
        本地方法栈:JVM调用操作系统时使用,与开发无关,了解即可
        寄存器:CPU使用,与开发无关
        数组类型:数组存储的是数组元素在堆内存中的地址值,并不是数组元素的值。在使用数组时,是通过地址值,引用堆中的数组元素,所以数组是引用类型
        
数组使用中两个常见问题
    数组索引越界异常:ArrayIndexOutOfBoundsException
        当访问不存在的索引时,会出现此异常
        异常:即非正常情况,可以简单理解为程序运行过程中出现的错误
    空指针异常:NullPointerException
        数组引用存储的值为null而不是地址值时,会出现异常
数组案例
    结论:引用类型作为参数传递时,传的是地址值。基本类型作为参数传递时,传的是值