方法

什么是方法?

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

方法的定义

方法定义格式:

[修饰符]  返回值的类型  方法名称 ( [形式参数,....] ) {
方法体
[ return 值 ];
}

注意点

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

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

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

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

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

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

(7)方法必须要先定义,再执行。

方法术语

修饰符

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

返回值类型

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

如果不需要给调用者返回结果,此时使用关键字void来声明,无返回的意思。

方法名称

遵循标识符的规范,使用动词表示,首字母小写,若是多个单词组成,使用驼峰表示法,以后的每一个单词首字母都大写,myName

形式参数

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

参数列表

参数列表 == 参数的类型 + 参数的个数 + 参数的顺序。

方法签名

方法签名 = 方法名称 + 方法参数列表;

在同一个类中,方法签名是唯一的,否则编译报错。

方法体

方法的 { } 中的代码,表示具体完成该功能的代码。

返回值:

在方法内部,使用return关键字;

功能1:给调用者返回一个结果值,此时该方法不能使用void修饰.

功能2:结束当前方法.

实际参数

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

方法重载

什么是方法重载?

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

方法重载作用

解决了 同一功能的方法,由于参数不同所造成方法名称不同。

判断的原则

方法重载判断原则: “两同一不同”

  • 两同:同类中,方法名相同;
  • 一不同:方法参数列表不同(参数类型、参数个数、参数顺序);

只要参数类型,参数个数,参数顺序有一个不同,参数列表就不同.

注意:方法重载和方法的返回值类型无关,只是一般要求返回值类型一致。

参数列表和参数的名称没关系,方法的重载和形参没关系。

数组

什么是数组?

所谓数组,是在程序设计中,为了处理方便,把具有相同类型的若干变量按有序的形式组织起来的一种数据形式。

这些按一定顺序排列的同类型数据的集合称为数组。

而数组中的每一个数据称之为数组元素,数组中的元素以索引来表示其存放的位置,索引从0开始,步长是1,有点像Excel表格的行号,逐行递增。

数组的定义

变量的定义: 数据类型 变量名; 如: int age;

数组的定义:

方式1:: 数组元素的类型[] 数组名; 如: int[] ages;

方式2: 数组元素的类型 数组名[]; 如: int ages[];

推荐方式1: 可以吧 int[] 看成是一种数据类型,int类型的数组类型。

数组必须先初始化,才能使用。因为初始化表示在内存中分配空间。

数组的初始化

Java中数组必先初始化后才能使用,所谓初始化就是给数组元素分配内存,并为每个元素赋初始值。

初始化数组的两种方式:

  • 静态初始化;
  • 动态初始化;

无论以哪种方式初始化数组,一旦初始化完成,数组的长度就固定了,不能改变,除非重新初始化。也就是说数组是定长的

静态初始化

数组的静态初始化操作:

特点:由我们自己来为每一个数组元素设置初始化值,而数组的长度由系统(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};

动态初始化

数组的动态初始化操作:

特点:由我们来设置数组的元素个数(数组长度),而每一个数组元素的初始值有系统决定。

语法:

数组元素类型[]  数组名 = new  数组元素类型[ length ];

举例:

int[] ages = new int[100];

说明:

不能同时使用静态初始化和动态初始化:以下写法是错误

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

数组的基本操作

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

多维数组

什么是多维数组

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

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

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

举例:

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

feach 循环

普通循环

定义数组,给数组元素赋值。当取出数组中的元素值的时候,咱们会使用循环(while,do while,for)来操作,该操作,称之为循环遍历,但是循环变量是数组的索引。

增加for循环

从Java5开始,提供了增强for循环(for-each),就可以直接地取出数组中的每一个元素。

for(元素类型 变量 : 数组名)
{
变量就表示每一个元素值
}

举例:

public static void main(String[] args) {
String[] strs = { "爸爸", "妈妈", "爷爷", "奶奶", "外公", "外婆" };
for (String str : strs) {
System.out.println(str);
}
}

增加for循环本质

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

代码反编译后:

public static void main(String args[])
{
String strs[] = {
"爸爸", "妈妈", "爷爷", "奶奶", "外公", "外婆"
};
String args1[];
int j = (args1 = strs).length;
for (int i = 0; i < j; i++)
{
String str = args1[i];
System.out.println(str);
}
}

那到底,咱们是使用for循环还是使用增强for循环?

  • 若需要取出数组元素,则使用for-each更简单。
  • 但是若需要操作数组索引,就只能使用普通的循环。

方法的可变参数

得出结论:可变参数就是,方法的数组参数。

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

static void sum(int[] args) {	// 把数组当作参数进行传递
int res = 0;
for (int i = 0; i < args.length; i++) {
res += args[i];
}
System.out.println(res);
} public static void main(String[] args) {
int[] params = { 1, 2, 3 };
sum(params);
}

可变参数:

// 可变参数(他是数组参数的一种简写,会自动把...转成数组)
static void sum(int... args) {
int res = 0;
for (int i = 0; i < args.length; i++) {
res += args[i];
}
System.out.println(res);
} public static void main(String[] args) {
int[] params = { 1, 2, 3, 4 };
sum(params);
sum(1, 2, 3, 4);
}

可变参数的本质:

可变参数是语法糖的一种,代码反编译后:

static transient void sum(int args[])
{
int res = 0;
for (int i = 0; i < args.length; i++)
res += args[i]; System.out.println(res);
} public static void main(String args[])
{
int params[] = {
1, 2, 3, 4
};
sum(params);
sum(new int[] {
1, 2, 3, 4
});
}

语法糖

什么是语法糖

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

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

解语法糖

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

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

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

Java 方法与数组的更多相关文章

  1. Java方法调用数组,是否改变原数组元素的总结

    Java方法调用数组,是否改变原数组元素的总结 //个人理解, 欢迎吐槽 注意String是引用型变量, 我的理解也就是指向型, 指向一个数据或变量, 画图理解最容易, string 指向的 数据的值 ...

  2. 067 01 Android 零基础入门 01 Java基础语法 08 Java方法 05 数组作为方法参数

    067 01 Android 零基础入门 01 Java基础语法 08 Java方法 05 数组作为方法参数 本文知识点:数组作为方法参数 说明:因为时间紧张,本人写博客过程中只是对知识点的关键步骤进 ...

  3. Java方法和数组

    方法 什么是方法 Java方法是语句的集合,它们在一起执行一个功能. 方法是解决一类问题的步骤的有序组合 方法包含于类或对象中 方法在程序中被创建,在其他地方被引用 设计方法的原则:方法的本意是功能块 ...

  4. Java方法_数组

    /* 方法:完成特定功能的代码块.   注意:在很多语言里面有函数的定义,而在Java中函数被称为方法.   方法格式: 修饰符 返回值类型 方法名(参数类型 参数名1,参数类型 参数名2...) { ...

  5. [原创]java WEB学习笔记59:Struts2学习之路---OGNL,值栈,读取对象栈中的对象的属性,读取 Context Map 里的对象的属性,调用字段和方法,数组,list,map

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  6. wrong number of arguments,java方法反射时数组参数的坑

    java方法中只有一个参数是数组,反射的时候我们不能想当然的传歌数组进去,传数组进去的时候表示多个参数. 两个数组不是一个意思啊. 我们应该把数组转为objet,这样才表示一个参数. import j ...

  7. Java方法-数组

    [Java数组] 1. 用sort()方法对Java数组进行排序,及如何使用 binarySearch() 方法来查找数组中的元素 binarySearch() 返回值: 如果它包含在数组中,则返回搜 ...

  8. Java基础知识强化85:System类之arraycopy()方法(数组拷贝)

    1. arraycopy方法(数组拷贝) public static void arraycopy(object src,int srcPos,Object dest,int destPos, int ...

  9. JAVA进阶之旅(二)——认识Class类,反射的概念,Constructor,Field,Method,反射Main方法,数组的反射和实践

    JAVA进阶之旅(二)--认识Class类,反射的概念,Constructor,Field,Method,反射Main方法,数组的反射和实践 我们继续聊JAVA,这次比较有意思,那就是反射了 一.认识 ...

随机推荐

  1. 苹果APP内购客户付款成功,没收到相应虚拟产品的解决办法

    一.引导用户走申请苹果的退款 1.告知用户新版本可以使用支付宝.微信支付,更划算 2.苹果可申请90天以内的退款,一般情况申请后48小时内就有反馈. 参考链接 https://jingyan.baid ...

  2. 【robotframework】robotframework环境搭建

    一.基于python3.6环境 在dos命令输入 pip install robotframework 在线安装robotframework在dos命令输入 pip install Pypubsub= ...

  3. 浅谈sqoop

    1.sqoop的概述a.sqoop 是一款工具,是appche 旗下的一款工具,主要是负责 hadoop与RDBMS之间的数据迁移,即从hadoop 文件系统 导出数据到RDBMS,从RDBMS导入数 ...

  4. 解析CentOS 7中系统文件与目录管理

    Linux目录结构 Linux目录结构是树形的目录结构 根目录 所有分区.目录.文件等的位置起点 整个树形目录结构中,使用独立的一个"/"表示 常见的子目录 目录 目录名称 目录 ...

  5. 【OF框架】定义框架标准WebApi,按照规范返回状态信息及数据信息

    准备 了解框架基本应用,已经完成Controller创建. 一.定义框架标准WebApi 一个标准的WebApi,包含预定义的入参和回参类型 入参为CallParams,需要增加FromBody声明, ...

  6. django工作原理简介

    django工作原理简介 先简单的介绍一下django的工作原理,其中还会涉及到Middleware(中间件,包括request, view, exception, response),URLConf ...

  7. Windows server 2012 利用ntdsutil工具实现AD角色转移及删除域控方法

    场景1:主域控制器与辅助域控制器运行正常,相互间可以实现AD复制功能.需要把辅助域控制器提升为主域控制器 ,把主域控制器降级为普通成员服务器:这种场景一般应用到原主域控制器进行系统升级(先转移域角色, ...

  8. 持续集成实践---基于ant+jmeter+jenkins接口CI

    背景: 大纲: jmeter入门教程 jenkins入门教程 ant介绍 jmeter+ant脚本自动执行实践 接口测试CI实践

  9. 如果解释Python,什么是.pyc文件?

    我已经了解Python是一种解释型语言......但是,当我查看我的Python源代码时,我看到.pyc文件,Windows将其识别为“编译的Python文件”. 这些来自哪里? #1楼 Python ...

  10. CF277B Set of Points——构造题

    题意 构造 $n$ 个点使其凸度(顶点数最多的凸多边形的顶点数)恰好为 $m$,且任意三点不能共线. (题意有点绕,建议看英文原文 分析 首先,题目并不是求凸包上的顶点数,而是求能形成的凸多边形的最大 ...