方法

什么是方法?

方法定义:方法(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. 【小知识点】js无需刷新在url地址添加参数

    今天后端同事找我,问我一个关于js无需刷新在url地址添加参数的方法. 然后我百度啊,终于在一篇文章找到了办法,非常简单的一句代码. window.history.pushState({}, 0, w ...

  2. phpcms企业站的一些知识

    头header.html 尾footer.html 主页用index.html 列表页用list.html 单网页用page.html 内容页用show.html {template "co ...

  3. ABAP-JCO服务端连接问题

    公司网络服务加域,若SAP服务器后端未配置端口号映射,则外部服务器注册JCO服务监听需要调整 # server jco.server.connection_count=5 jco.server.gwh ...

  4. IO模型之BIO代码详解及其优化演进

    一.BIO简介 BIO是java1.4之前唯一的IO逻辑,在客户端通过socket向服务端传输数据,服务端监听端口.由于传统IO读数据的时候如果数据没有传达,IO会一直等待输入传入,所以当有请求过来的 ...

  5. 分布式session的几种实现方式

    在搭建完集群环境后,不得不考虑的一个问题就是用户访问产生的session如何处理.如果不做任何处理的话,用户将出现频繁登录的现象,比如集群中存在A.B两台服务器,用户在第一次访问网站时,Nginx通过 ...

  6. linux防火墙扩展模块实战(二)

    iptables扩展模块    扩展匹配条件:需要加载扩展模块(/usr/lib64/xtables/*.so),方可生效 查看帮助 man iptables-extensions (1)隐式扩展 ...

  7. 读书笔记——《redis入门指南(第2版)》第七章 持久化

    7 持久化 在一些情况下,我们会希望Redis 在重启后能够保证数据不丢失,例如: 1·将Redis 作为数据库使用时. 2·将Redis 作为缓存服务器,有可能出现的缓存雪崩会使服务无法响应. 这时 ...

  8. zstu月赛 招生

    题目 浙江理工大学招生,一开始有0名学生报考,现在有如下几种情况: 1.增加一名报考学生,报考学生成绩为x: 2.一名成绩为x的学生放弃报考. 3.从现在报考的学生来看,老师想知道如果要招生至少x名学 ...

  9. vue mint ui 手册文档

    npm 安装 推荐使用 npm 的方式安装,它能更好地和 webpack 打包工具配合使用. npm i mint-ui -S CDN 目前可以通过 unpkg.com/mint-ui 获取到最新版本 ...

  10. kafka读书笔记《kafka并不难学》

    ======第一章 1 在高并发场景,如大量插入.更新数据库会导致锁表,导致连接数过多的异常,此时需要消息队列来缓冲一下.消息队列通过异步处理请求来缓解压力 2 消息队列采用异步通信机制消息队列拥有先 ...