博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java 方法(方法重载)与数组
阅读量:3928 次
发布时间:2019-05-23

本文共 4317 字,大约阅读时间需要 14 分钟。

一、方法(Method)

1、方法的定义

    1)方法定义与格式:

         方法(Method),有人称之为函数(function),其实就指一个特定的功能操作,程序中能完成独立功能,可重复使用的一段代码的集合。

[修饰符] 返回值的类型  方法名字([类型 变量1,类型 变量2 ,...]){    方法体    [return 值];}

注意点:

(1)方法必须声明在类(class)当中。

(2)创建的方法要定义在其它方法之外(跟其他的方法是兄弟关系)

(3)定义方法不分先后顺序。

(4)如果有一个方法前面有static,那么在该方法中调用其它的方法前面也应该有static。

(5)void 返回值为空,什么都不返回;如果有返回值,必须要有return。

(6)两个方法的名称不能相同。

(7)方法必须要先定义,再执行。方法只有被调用才会执行,可以被重复调用。

2)方法术语:

    修饰符:

           方法的访问权限如,public,static等,static修饰的方法属于类,直接使用类名调用即可。

   返回值类型:

           该功能操作完毕之后,是否需要给调用者返回一个结果。

           如果方法定义了返回类型,则方法体必须使用return返回该类型的一个值.

           如果方法使用void来表示返回值类型,此时在方法体中不需要使用return.

   方法名字: 

           遵循标识符的规范,使用动词表示,首字母小写,若是多个单词组成,使用驼峰表示法,以后的每一个单词首字母都大写,如:sendMsg(发生信息)。

   形式参数:

           方法圆括号中的变量,仅仅只是占位而已,参数的名称其实无所谓没有实质的意义,形式参数可以有多个。

   方法签名: 

           方法签名 = 方法名称 + 方法参数列表;   在同一个类中,方法签名是唯一的,否则编译报错。

   实际参数:  

           调用者在调用某一个具体方法的时候,实际传递的参数值。

2、方法重载(overload)

1)方法重载定义与作用:

     重载方法的定义是在同一个类中,某方法允许存在一个以上的同名方法,只要它们的参数列表不同即可。

     方法重载作用是解决了同一功能的多个方法,由于参数列表不同所造成的方法名称不同的问题.

2)方法重载的判断原则:“两同一不同

     两同:方法必须在同一个类中,且方法的名称相同;

     一不同:方法参数列表不同(参数类型、参数个数、参数顺序);

注意:

(1)只要参数类型,参数个数,参数顺序有一个不同,参数列表就不同。

(2)方法重载与方法的返回值类型无关,只是一般要求返回值类型一致。

(3)方法重载与参数列表的参数名称没关系。

public class HelloWorld {    public static void main(String[] args) {        //方法重载        int res1 = add(2, 2);        double res2 = add(2.0, 2);        System.out.println("res1=" + res1 + "  res2=" + res2); //res1=4  res2=4.0    }    public static int add(int a, int b) {        return a + b;    }    public static double add(double a, int b) {        return a + b;    }}

3、方法参数的传递机制

     若是基本数据类型,就直接传递实参值的副本,即值传递,实际参数本身不受影响。

     若是引用数据类型,就传递实际参数的16进制地址值(引用地址),即引用传递,实际参数本身受影响。

 

二、数组

1、数组的定义与格式

     所谓数组,是在程序设计中,为了处理方便,把具有相同类型的若干变量按有序的形式组织起来的一种数据形式,这些按一定顺序排列的同类型数据的集合称为数组。而数组中的每一个数据称之为数组元素,数组中的元素以索引来表示其存放的位置,索引从0开始,步长是1,逐行递增。

数组的定义格式方式1: 数组元素的类型[] 数组名; 如: int[] ages; 推荐使用方式2: 数组元素的类型 数组名[]; 如: int ages[];

2、数组的初始化

      Java中数组必须先初始化后才能使用。所谓初始化就是给数组元素分配内存,并为每个元素赋初始值;一旦数组初始化完成,数组的长度就固定了,不能更改,除非重新初始化。也就是说数组是定长的

1)静态初始化:

     特点:由程序员自己为每一个数组元素设置初始化值,而数组的长度由系统(JVM)决定。

语法:    元素类型[] 数组名称 = new 元素类型[]{元素1,元素2,元素3,...};

     如:int[] nums = new int[]{1,3,5,7,9};

     更简单的语法:int[] nums = {1,3,5,7,9};

     简单写法,必须声明之后,立刻初始化,不能先声明后初始化,以下写法是错误的

     int[] nums;

     nums = {1,3,5,7,9};

2)动态初始化:

     特点:由程序员来设置指定数组的长度(数组的元素个数),而每一个数组元素的初始值(默认值)有系统(JVM)决定。

语法:    元素类型[] 数组名称 = new 元素类型[length];

    

注意:不能同时使用静态和动态初始化。如:int[] nums = new int[5]{1,3,5,7,9}; 错误的    

3、数组的基本操作

基本操作 操作说明
获取元素 元素类型 变量 = 数组名[index];
设置元素 数组名[index] = 值;
遍历数组元素 建议使用for循环,事先知道循环的次数。
数组长度 int len = 数组名.length; length是属性,不是方法。
索引范围 从0开始,逐一递增. [0,数组名.length-1]

  4、操作数组常见异常:

      ArrayIndexOutOfBoundsException:数组的索引越界,不在索引范围之内.
      NullPointerException:空引用异常,操作了一个为null的数组变量.

5、多维数组

     一维数组:就是数组,数组中的每一个元素都是一个值。

     二维数组:数组中的数组,数组中的每一个元素都是一个数组。(可以表示二维空间(行/竖))

     三维数组:数组中的每一个元素都是一个二维数组。

     例如:二维数组

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

三、Java5对数组的支持

1、增强for循环(for-each)

     从 JAVA5 开始出现了增强for循环,可用来方便的迭代数组中的元素,而不涉及其下标,也可以遍历集合等。

for(元素类型 元素变量 :遍历对象){    遍历元素变量}
String[] strs = { "aa", "bb", "cc"};        for (String str : strs) {            System.out.println(str);        }

   代码反编译后:

final String[] array2 = { "aa", "bb", "cc" };        for (int length = array2.length, i = 0; i < length; ++i) {            System.out.println(array2[i]);        }

增加for循环本质

     增强for循环,其实是一个语法糖(编译器级别的新特性),但是在字节码中/底层依然是for循环.

使用for循环还是使用增强for循环?

     若需要取出数组元素,则使用for-each更简单。

     但是若需要操作数组索引,就只能使用普通的循环。

 

2、方法的可变参数

     方法的可变参数,说的是参数的个数可变,也是一个语法糖,其底层就是一个数组类型

     注意:为了避免歧义,语法规定,可变参数必须作为方法的最后一个参数。

public static void main(String[] args) {        int sum = add(2, 5, 10, 10);        System.out.println(sum);    }    public static int add(int x, int ... arr) {        int sum = 0;        for (int i : arr) {            sum += i;        }        return sum * x;    }

   代码反编译后:

public static void main(String args[])	{		int i = add(2, new int[] {			5, 10, 10		});		System.out.println(i);	}	public static transient int add(int i, int ai[])	{		int j = 0;		int ai1[] = ai;		int k = ai1.length;		for (int l = 0; l < k; l++)		{			int i1 = ai1[l];			j += i1;		}		return j * i;	}

四、语法糖

1、什么是语法糖

       语法糖(Syntactic Sugar),也称糖衣语法,是由英国计算机学家 Peter.J.Landin 发明的一个术语,指在计算机语言中添加的某种语法。

       这种语法对语言的功能并没有影响,但是更方便程序员使用。简而言之,语法糖让程序更加简洁,有更高的可读性。

2、解语法糖

       语法糖的存在主要是方便开发人员使用。但其实,Java 虚拟机并不支持这些语法糖,这些语法糖在编译阶段就会被还原成简单的基础语法结构,这个过程就是解语法糖。

       说到编译,大家肯定都知道,Java 语言中,javac命令可以将后缀名为.java的源文件编译为后缀名为.class的可以运行于 Java 虚拟机的字节码。

       如果你去看com.sun.tools.javac.main.JavaCompiler的源码,你会发现在compile()中有一个步骤就是调用desugar(),这个方法就是负责解语法糖的实现的。

 

ends~

 

 

转载地址:http://rjcgn.baihongyu.com/

你可能感兴趣的文章
sql练习-获取所有员工当前的manager,如果当前的manager是自己的话结果不显示,当前表示to_date='9999-01-01'。
查看>>
sql练习--查找所有员工的last_name和first_name以及对应的dept_name,也包括暂时没有分配部门的员工
查看>>
Transformer-based Object Re-Identification论文解读
查看>>
Android BLE开发
查看>>
Java内部类详解
查看>>
Android开发常见面试题类型
查看>>
2017美团校招安卓岗
查看>>
YUV基础知识《转载》
查看>>
C语言动态申请内存
查看>>
cmake万能模板
查看>>
让你不再害怕指针——C指针详解
查看>>
十张图解释机器学习的基本概念
查看>>
端口复用及其实现分析[Google Patch]
查看>>
红黑树:自平衡的二叉查找树
查看>>
回收站功能在 Linux 中的实现
查看>>
数据包头分析---网络字节序与主机字节序
查看>>
linux sh/bash 编程常用
查看>>
《Debug Hacks》和调试技巧
查看>>
x86寄存器和栈帧
查看>>
计算机科学经典论文(zz)
查看>>