方法

什么是方法?

方法定义:方法(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. Java 之 InputStreamReader 类

    InputStream 类 1.概述 转换流 java.io.InputStreamReader ,是Reader的子类,是从字节流到字符流的桥梁.  该类读取字节,并使用指定的字符集将其解码为字符. ...

  2. coco creator编辑动画坑之拖图片

    如图所示,批量选中多张图片之后,拖到右下角的框中,发现有时候可以有时候不行.这个我觉得是个软件的bug 后来经过测试发现只有在粉红色圈的高度才可以正确放入图片,否则都放不了.

  3. 大学毕业时成都SAP和深圳腾讯的Offer,我是怎么选择的

    2006年校园招聘,我拿到了SAP成都研究院和深圳腾讯的offer,而我最后选择了前者. 当时我主要是基于以下四点考虑. SAP成都有最优秀的人才 2006年SAP成都研究院刚刚成立,对人才的挑选非常 ...

  4. springboot学习入门简易版一---springboot2.0介绍

    1.1为什么用springboot(2) 传统项目,整合ssm或ssh,配置文件,jar冲突,整合麻烦.Tomcat容器加载web.xml配置内容 springboot完全采用注解化(使用注解方式启动 ...

  5. centos6.x下让redis以服务方式运行

    1.从官网下载redis-2.8.9.tar.gz之后,将redis解压在/usr/local下,目录是redis-2.8.9,然后按照官网给出的办法安装redis即可. 2.安装完在redis-2. ...

  6. Spring Cloud 之 全局配置

    在微服务架构中,全局配置的重要性不言而喻.SpringCloud的全局配置存储主要基于 Git 来实现,即配置信息存储在Git服务器,以统一的方式对外提供访问.在使用上分为 ConfigServer和 ...

  7. linux网络编程之socket编程(七)

    今天继续学习socket编程,北京在持续几天的雾霾天之后久违的太阳终于出来了,心情也特别特别的好,于是乎,在这美好的夜晚,该干点啥事吧,那当然就是继续坚持我的程序学习喽,闲话不多说,进入正题: 通过这 ...

  8. Error: EACCES: permission denied when trying to install ESLint using npm

    https://stackoverflow.com/questions/35954725/error-eacces-permission-denied-when-trying-to-install-e ...

  9. DTcmsV4.0分析学习——(1)数据库结构分析

    数据库名:DTcmsdb4 DTcmsV4.0共35张表(33张表+2张插件表) dt_article 内容管理 dt_article_albums 图片相册 dt_article_attach 附件 ...

  10. 数位DP【模板】

    经典题型 数位 DP 问题往往都是这样的题型,给定一个闭区间 $[l, r]$,让你求这个区间中满足 某种条件 的数的总数. 强烈推荐 OI Wiki——数位DP 例题 BZOJ 1026 题目:wi ...