Java 方法与数组
方法
什么是方法?
方法定义:方法(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 方法与数组的更多相关文章
- Java方法调用数组,是否改变原数组元素的总结
Java方法调用数组,是否改变原数组元素的总结 //个人理解, 欢迎吐槽 注意String是引用型变量, 我的理解也就是指向型, 指向一个数据或变量, 画图理解最容易, string 指向的 数据的值 ...
- 067 01 Android 零基础入门 01 Java基础语法 08 Java方法 05 数组作为方法参数
067 01 Android 零基础入门 01 Java基础语法 08 Java方法 05 数组作为方法参数 本文知识点:数组作为方法参数 说明:因为时间紧张,本人写博客过程中只是对知识点的关键步骤进 ...
- Java方法和数组
方法 什么是方法 Java方法是语句的集合,它们在一起执行一个功能. 方法是解决一类问题的步骤的有序组合 方法包含于类或对象中 方法在程序中被创建,在其他地方被引用 设计方法的原则:方法的本意是功能块 ...
- Java方法_数组
/* 方法:完成特定功能的代码块. 注意:在很多语言里面有函数的定义,而在Java中函数被称为方法. 方法格式: 修饰符 返回值类型 方法名(参数类型 参数名1,参数类型 参数名2...) { ...
- [原创]java WEB学习笔记59:Struts2学习之路---OGNL,值栈,读取对象栈中的对象的属性,读取 Context Map 里的对象的属性,调用字段和方法,数组,list,map
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- wrong number of arguments,java方法反射时数组参数的坑
java方法中只有一个参数是数组,反射的时候我们不能想当然的传歌数组进去,传数组进去的时候表示多个参数. 两个数组不是一个意思啊. 我们应该把数组转为objet,这样才表示一个参数. import j ...
- Java方法-数组
[Java数组] 1. 用sort()方法对Java数组进行排序,及如何使用 binarySearch() 方法来查找数组中的元素 binarySearch() 返回值: 如果它包含在数组中,则返回搜 ...
- Java基础知识强化85:System类之arraycopy()方法(数组拷贝)
1. arraycopy方法(数组拷贝) public static void arraycopy(object src,int srcPos,Object dest,int destPos, int ...
- JAVA进阶之旅(二)——认识Class类,反射的概念,Constructor,Field,Method,反射Main方法,数组的反射和实践
JAVA进阶之旅(二)--认识Class类,反射的概念,Constructor,Field,Method,反射Main方法,数组的反射和实践 我们继续聊JAVA,这次比较有意思,那就是反射了 一.认识 ...
随机推荐
- 苹果APP内购客户付款成功,没收到相应虚拟产品的解决办法
一.引导用户走申请苹果的退款 1.告知用户新版本可以使用支付宝.微信支付,更划算 2.苹果可申请90天以内的退款,一般情况申请后48小时内就有反馈. 参考链接 https://jingyan.baid ...
- 【robotframework】robotframework环境搭建
一.基于python3.6环境 在dos命令输入 pip install robotframework 在线安装robotframework在dos命令输入 pip install Pypubsub= ...
- 浅谈sqoop
1.sqoop的概述a.sqoop 是一款工具,是appche 旗下的一款工具,主要是负责 hadoop与RDBMS之间的数据迁移,即从hadoop 文件系统 导出数据到RDBMS,从RDBMS导入数 ...
- 解析CentOS 7中系统文件与目录管理
Linux目录结构 Linux目录结构是树形的目录结构 根目录 所有分区.目录.文件等的位置起点 整个树形目录结构中,使用独立的一个"/"表示 常见的子目录 目录 目录名称 目录 ...
- 【OF框架】定义框架标准WebApi,按照规范返回状态信息及数据信息
准备 了解框架基本应用,已经完成Controller创建. 一.定义框架标准WebApi 一个标准的WebApi,包含预定义的入参和回参类型 入参为CallParams,需要增加FromBody声明, ...
- django工作原理简介
django工作原理简介 先简单的介绍一下django的工作原理,其中还会涉及到Middleware(中间件,包括request, view, exception, response),URLConf ...
- Windows server 2012 利用ntdsutil工具实现AD角色转移及删除域控方法
场景1:主域控制器与辅助域控制器运行正常,相互间可以实现AD复制功能.需要把辅助域控制器提升为主域控制器 ,把主域控制器降级为普通成员服务器:这种场景一般应用到原主域控制器进行系统升级(先转移域角色, ...
- 持续集成实践---基于ant+jmeter+jenkins接口CI
背景: 大纲: jmeter入门教程 jenkins入门教程 ant介绍 jmeter+ant脚本自动执行实践 接口测试CI实践
- 如果解释Python,什么是.pyc文件?
我已经了解Python是一种解释型语言......但是,当我查看我的Python源代码时,我看到.pyc文件,Windows将其识别为“编译的Python文件”. 这些来自哪里? #1楼 Python ...
- CF277B Set of Points——构造题
题意 构造 $n$ 个点使其凸度(顶点数最多的凸多边形的顶点数)恰好为 $m$,且任意三点不能共线. (题意有点绕,建议看英文原文 分析 首先,题目并不是求凸包上的顶点数,而是求能形成的凸多边形的最大 ...