参考链接: Java中的方法重载和空错误

一、方法(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~

[转载] Java 方法(方法重载)与数组相关推荐

  1. JAVA不同类型数组重载_方法的重载;数组 (Java Day05)

    一,方法的重载 概念:在一个类中,拥有多个方法名相同,参数列表不同的方法的现象叫做方法的重载 特征: ​            1.在同一个类中 ​            2.方法名相同 ​     ...

  2. [转载] java clone方法_Java Calendar clone()方法与示例

    参考链接: Java中的Clone()方法 java clone方法 日历类clone()方法 (Calendar Class clone() method) clone() method is av ...

  3. [转载] Java——toArray,集合转换为数组

    参考链接: 从ArrayList到Java的Array数组转换:toArray()方法 package day04; import java.util.ArrayList; import java.u ...

  4. [转载] Java构造方法、重载和重写

    参考链接: Java中的构造方法重载 构造方法: 见名知意,构造方法就是用来构造类的对象的方法,每个类中至少有一个构造方法.构造方法的名字必须和类名相同,不能有返回值和返回值类型,除了访问修饰符,不能 ...

  5. java数组循环动态赋值_04、Java基础语法(循环嵌套、break、continue、方法、方法的重载、数组动态初始化)...

    复习: 流程控制语句 - 顺序结构 - 分支结构 - if-else - switch - 循环结构 - for - while - do...while ctrl + alt + L 格式化代码 & ...

  6. 转载------------java equals 方法

    作者:海子 出处:http://www.cnblogs.com/dolphin0520/ 浅谈Java中的equals和== 在初学Java时,可能会经常碰到下面的代码: 1 String str1 ...

  7. [转载] Java中方法不可以有默认参数

    参考链接: Java中的方法 Java中的方法不可以有默认参数,只能通过重载来实现: public class ParameterDefault { /** * @param args */ publ ...

  8. [转载] JAVA 构造函数及其重载

    参考链接: Java重载Overload public class Student{ public int stuId; public String stuName; public int stuAg ...

  9. [转载] Java中使用new构造数组时会不会自动调用类的默认构造函数

    参考链接: Java中的默认构造函数 今天做集合练习时,发现生成类的数组时并 不会自动调用类的默认构造函数 // 开辟10个内存空间,并指定了数组的类型为Gerbil // 这个时候并不会调用构造函数 ...

  10. [转载] Java Challengers#1:JVM中的方法重载

    参考链接: Java中自动装箱和扩展的方法重载 欢迎来到新的Java Challengers博客!本博客致力于挑战Java编程中的概念.掌握它们,你将成为一名技术娴熟的Java程序员. 本博客中的技术 ...

最新文章

  1. 小学生正确使用计算机,小学生做数学作业用计算器的做法正确吗?为什么?
  2. 技术盘点:2022年云原生架构趋势解读
  3. python 操作mysql数据库
  4. 华为配备鸿蒙系统的手机,华为P50/新平板双双来袭!全球首发鸿蒙系统:配置都非常强悍...
  5. 【Kafka】nable to write to standard out, closing consumer Console consumer process hangs on SIGINT
  6. 警惕!这个 PowerPoint“弱点”可用于发动鼠标悬停攻击
  7. 这就是我不建议去外包公司开发的原因?
  8. Linux openwrt 树莓派 香蕉派 嵌入式 usb 声卡 PCM2704 2705 2706 CM108 PCM2704/2705/2706 linux专用声卡 专用usb声卡
  9. 华为服务器显示110,ar110s路由器设置内部服务器
  10. SCADS简介及应用
  11. 关于常用(?)字符串处理函数的合集
  12. 正向代理与反向代理的区别,为什么要有正向代理和反向代理
  13. 无人机发烧友们,航拍素材也能做三维模型啦!
  14. jackson学习之五:JsonInclude注解
  15. Python快速查找每个站的最近的10个站
  16. 精彩推荐:云计算的未来,超市还是电厂?
  17. 无人驾驶 | 自动驾驶技术和机器人技术的对比
  18. 矩阵的初等变换和等价
  19. Vue学习之路(8)------快餐店收银系统
  20. 《数学之美》PPT配套讲稿

热门文章

  1. 如何进行文件管理、备份
  2. 【初赛】「程序填空」题答v1.0
  3. 5怎么用修改器_经常用电脑辐射大怎么办?这5个习惯防辐射,很多人都知道
  4. 根据需求进行批量新增
  5. excel两个表格数据对比_教你如何使用excel快速对比多项数据
  6. 2017哈尔滨ACM CCPC-final 总结
  7. 安卓Toast显示提示消息(自定义view,根据子线程消息显示提示)
  8. jQuery Mobile中弹窗popup的data-*选项
  9. python批量更改图片尺寸(保持长度和高度的长短关系)
  10. 获取连接无线路由客户机信息命令