java之方法与数组

主要知识点:

  1. 什么是方法
  2. 方法的格式与属性
  3. 方法的特点
  4. 一维数组的简介,声明和初始化
  5. 数组分配内存空间
  6. 二维数组
  7. 操作数组的工具类-Arrays

  • 什么是方法

方法是一组为了实现特定功能代码块的集合。方法的主要功能有两个:

  1. 结构化代码:将代码按照功能进行组织,是代码结构比较清晰,容易阅读和修改,也就是程序的可维护性强。
  2. 减少代码的重复:一个固定的功能,可能在程序中多次使用,在使用的时候需要调用写好的方法,而不用重复书写对应的功能代码。

方法在书写的时候需要注意以下两点:

  1. 逻辑严谨方法实现的一个完整的功能,所以在书写的时候要考虑到各种的情况,并且对每一种情况给出相应的处理。
  2. 通用性强(可重复利用):方法实现的是一种功能,在实现的时候,可以根据需要,使方法具备一定的通用性,除非必要,否则不要写专用的方法。

总结:方法是一段可以重复使用的代码段,程序中完成独立功能的一段代码的集合。

 


 

  • 方法的格式与属性

定义格式

  修饰符 返回值类型  函数名(参数类型  形式参数 1 ,参数类型  形式参数 2  , …) {
      执行语句;
      return  返回值;
  }

 

方法里的属性

访问权限控制符:访问控制符限定方法的可见范围,或者说方法被调用的范围,方法的访问控制符有四种,public protected 默认的 private。后面详细介绍吧。

形式参数:在方法被调用的时候用于接收外界输入的数据。

实参:调用方法时实际传给方法的数据。

返回值:方法执行完毕后返回给调用它环境的数据。

返回值类型:事先约定的返回值的数据类型,如无返回值,必须给出返回类型 void。

如何函数的返回值类型是void时,return语句可以省略不写,系统会帮你自动加上。

return的作用:结束函数,结束功能。

参数列表(参数的类型 ,参数的个数,参数的顺序)只要有一个不一样,那么这个参数列表就不一样,对于方法而言,即使是同名也不是同一个方法。

方法签名:方法名和方法的参数列表(能区别方法)。

java语言中调用方法:对象名.方法名(实参列表)。

实参的数目、数据类型和次序必须和所调用方法声明的形参列表匹配。

 

主函数:

  1. 保证该类的独立运行。
  2. 因为它是程序的入口。
  3. 因为它在被jvm调用。

方法定义名称是为了什么呢?

  1. 为了对该功能进行标示,方便于调用。
  2. 为了通过名称就可以明确函数的功能,为了增加代码的阅读性。

重载:在一个类中,如果出现了两个或者两个以上的同名方法,只要他们的参数个数,或者参数的类型不同,即可称之为方法的重载。

如何区分重载:当方法同名时,只看参数列表,和返回值类型没有关系。

存在的原因:屏蔽了一个对象的同一类方法由于参数不同所造成的差异。

示例:

public void a(int a){}
public int a(){}
public void a(int a,String s){}

 


 

  •  方法的特点

特点:它可以实现独立的功能,必须定义在类的里面,它只有被调用才会执行,它可以被重复使用,方法结束后方法里的对象失去引用。

如何定义一个函数?

函数其实就是一个功能,定义函数就是实现功能,通过两个明确来完成。

  1. 明确该功能的运算结果,其实就是在明确这个函数的返回值类型。
  2. 在实现该功能的过程中是否有未知的内容参与了运算,其实就是在明确这个函数的参数列表(参数类型&参数个数)

注意:函数中只能调用函数,不能定义函数。

 

可变参数:

从java1.5开始出现了可变参数,这是对java方法和数组的拓展。

方法中可以接受的参数不再是固定的个数,而是随着具体的需求传递多少来决定的。

定义格式: 返回值类型  方法名(参数类型 ... 形式参数){    }

可变参数的特点:只能出现在参数列表的最后。

... 位于变量类型和变量名之间,有无空格都可以。

调用可变参数的方法时,编译器为该可变参数隐含创建一个数组,在方法体中以数组的形式访问可变参数。

 


 

  • 一维数组的声明和初始化

数组的简介:

数组(Array)是java语言中一种基本的数据存储结构,用于存储同一类型的一个容器。

好处:可以对该容器中的数据进行编号,从0开始,数组用于封装数据,就死一个具体的实体。

java数组:必须先声明数组,再给该数组分配内存。数组对应在内存中一段连续空间。

数据元素必须是相同数据类型,也可以是引用数据类型,但是同一个数组中的元素必须是同一类数据类型。

 

一维数组:可以理解为一列多行,类型相同的数据,其中每个数据被称为数组元素。数组的长度一旦确定,就不能改变,也就是说,数组是定长的。

java语言声明数组的时候不能指定其长度(元素的个数)。

 int a[5]        //非法    

 

初始化:java中的数组必须先初始化才可以使用,所谓初始化就是为数组的数组元素分配内存,并且为每个数组元素赋值。

数组初始化的两种方式:

  静态初始化:初始化时由我们自己指定每个数组元素的初始值,有系统决定需要的数组长度,

        格式:数组名 = new 数组类型[]{元素1,元素2,元素3...元素n};

        简化语法:数组名 = {元素1,元素2,元素3...元素n};

  动态初始化:初始化时由我们指定数组的长度,由系统为数组元素分配初始值。

        格式:数组名 = new 数组类型[数组长度];

  注意:不能静态和动态初始化同时使用,也就是说不能同时指定数组的长度和元素。

 


 

  • 数组分配内存空间

Java内存的划分

  1. 寄存器:cpu涉及的区域。
  2. 存储函数的地方。
  3. 本地方法区:是和系统相关的代码储存区域。
  4. 栈内存:存储的都是局部变量,变量运算区域一结束,就释放,(局部变量:方法上的参数,方法内的变量,语句中的变量)
  5. 堆内存:存储的是数组和对象,简单说,堆内存存储的都是实体,实体就是可以储存多个数据的地方,记住:只要是用new建立都是存储在堆内存中。

      特点:任何实体都有内存地址值。堆内存中的变量都有默认初始值,垃圾回收机制。

数组的内存分配:

定义一个数组 int scores将在栈内存中为scores分配内存空间,其值是一个不确定的值。当执行语句scores = int[5]时,将在堆内存中连续分配5个空间,每个空间4个字节,用于存放整型数据,其初始值为0,然后将该段空间首地址,也就是第一个元素地址,比如0×3000,赋给scores变量。该地址相当于一个指针,指向堆内存中分配的空间,此时堆内存中分配的5个空间可以用scores[0]-scores[4]来表示,当执行四个赋值语句的时候,分别用指定值填充到对应的元素位置,如果此时将Null赋给scores,scores将不会再指向任何的位置,此时堆内存中分配的空间就变成了垃圾,由垃圾回收器在某一时刻回收。

在方法中定义变量,包括基本数据类型变量和引用数据类型变量,都将在栈内存中分配空间,当超过变量作用范围后,自动回收。

总结:初始化 = 定义数组 + 分配空间 + 赋值。

 


 

  • 二维数组

二维数组:其实是一个一维数组,它的每一个元素又是一维数组。

静态初始化

int[ ][ ]  arr = new int[][]{{1,2},{3,4},{5,6}};
int[ ][ ]  arr = {{1,2},{3,4},{5,6}};

动态初始化

int[ ][ ]  arr = new int[3][2];

 


 

  • 操作数组的工具类-Arrays

static boolean[] copyOf(type[] original, int newLength) 复制指定的数组见下面备注

static byte[] copyOfRange(type[] original, int from, int to) 将数组的指定范围复制到一个新数组。                          

static boolean equals(type[] a, type[] a2) 如果两个数组长度相等和元素一一相等,则返回 true

static void fill(type[] a, type val) 将a数组所有元素都赋为val。

static void fill(type[] a, int fromIndex, int toIndex, type val) 将a数组从formIndex 到tiondex索引之间的元素都赋为val。 

static void sort(type[] a) //sort(int[] arr)对指定的数组按数字升序进行排序。

static void sort(type[] a, int fromIndex, int toIndex) 对指定数组的从formIndex 到tiondex索引之间的元素按数字升序进行排序。

static String toString(type[] a) 返回指定数组内容的字符串表示形式。多个数组元素之间用英文逗号或空格隔开。

static int binarySearch(type[] a, type key) 使用二分搜索法来搜索key元素在数组中的索引;若a数组不包括key,返回负数。(该方法必须已按升序排列后调用)。

static int binarySearch(type[] a, int fromIndex, int toIndex, type key) 使用二分搜索法来搜索key元素在数组中从fromIndex到toIndex的索引;

若a数组不包括key,返回负数。(该方法必须已按升序排列后调用)。

 

 总结:使用数组工具类可以节省时间,提高效率,注意长查阅api。

 

  

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。