方法

什么是方法?

方法定义:方法(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. 使用angularJS设置复选框的回显状态

    思路分析: 在angularJS中,我们可以使用ng-checked="expression()"来设置复选框的状态:当expression()返回true时,该复选框为选择中状态 ...

  2. Python基础Day6

    一.代码块 一个模块(模块就是py文件),一个函数,一个类,一个文件都是一个代码块,一个整体是一个代码块. 交互模式的每一行都是一个代码块(交互模式:命令提示符),相当于每行都在不同的文件 二.id ...

  3. jquery中的ajax方法(备忘)

    参考:https://www.cnblogs.com/tylerdonet/p/3520862.html w3school:http://www.w3school.com.cn/jquery/ajax ...

  4. 2. 软件有很多种,也有各种分类办法: ShrinkWrap (在包装盒子里面的软件,软件在CD/DVD上); Web APP (基于网页的软件); Internal Software (企业或学校或某组织内部的软件); Games (游戏); Mobile Apps (手机应用); Operating Systems (操作系统); Tools

     选取对你最相关的一类软件,  请回答:(web app)  1) 此类软件是什么时候开始出现的, 这些软件是怎么说服你(陌生人)成为他们的用户的?  他们的目标都是盈利么?  他们的目标都是赚取用户 ...

  5. java kafka

    https://blog.csdn.net/panchang199266/article/details/82113453 安装部署 scala语言开发 + java

  6. 容器上使用Docker还是Rocket?为什么不一起用呢?

    在2014年接近尾声时,CoreOS在Docker发布了Rocket,声称Docker的流程模型有着“根本性的缺陷”.虽然CoreOS的创始人Alex Polvi尽量缓和语气,但是他坚持自己的基本观点 ...

  7. JS获取当前年份月

    //获取完整的日期 var date=new Date; var year=date.getFullYear();  var month=date.getMonth()+1; month =(mont ...

  8. Django REST framework+Vue 打造生鲜电商项目(笔记三)

    (PS:转载自http://www.cnblogs.com/derek1184405959/p/8810591.html  有修改) 一.drf的过滤 (1)添加到app里面 INSTALLED_AP ...

  9. 杭电2019多校第八场 Acesrc and Good Numbers——思维打表&&oeis

    题意 给定 $d,x$,$f(d,k)$ 表示 $1 \sim k$ 中 $d$ 出现的次数, $k$ 满足 $f(d,k) = k$,求小于 $x$ 的最大的 $k$. 分析 正解不会...,学习了 ...

  10. The 2019 China Collegiate Programming Contest Harbin Site I. Interesting Permutation

    链接: https://codeforces.com/gym/102394/problem/I 题意: DreamGrid has an interesting permutation of 1,2, ...