前提:现在所讲解的方法定义格式,只属于JAVA 方法定义的其中一种组成方式。而完整的组成方式将随着学习逐步渗透。
  1.方法的基本定义
    方法(Method)在一些书中也会有人将其说是  函数(Function) 。但是两者的含义完全相同的,那什么是方法?为什么需要有方法?实际上所谓的方法指的就是一段代码封装在一个结构体之中,并且可以重复调用。
    方法的定义语法原则(本次所讲解的语法指的是在主类中定义的方法,并且由主方法直接调用。)
  2.方法调用
    java中的方法分为(1)静态方法 直接使用 类名.方法名 调用
    (2)普通方法 通过new创建对象 然后使用 对象.方法 调用

public static 返回值类型 方法名称([参数类型 变量,参数类型 变量,...]){
方法中包含的代码;
[return 返回值;]
}

返回值类型可以设置为两种:
   JAVA 中的数据类型:基本数据类型,引用数据类型;如果现在有返回的内容则需要通过 retum 返回
  不返回任何的结果:void;

方法就是留给用户进行重复调用的。

public class TestDemo{
public static void main(Srting args[]){
printlnfo(); // 调用方法
printlnfo(); // 调用方法
}
public static void printlnfo(){ // 此方法没有参数没有返回值
System.out.println(".........................");
System.out.println("-- Hello World! --");
System.out.println(".........................");
}
}

范例:定义一个可以接收参数的方法

public class TestDemo{
public static void main(Srting args[]){
printlnfo(10); // 调用方法
printlnfo(100); // 调用方法
}
public static void printlnfo(int age){
if(age > 250){
System.out.println("您是人吗?");
}else{
System.out.println("您的年龄是:"+ age);
}
}
}

  实际上在进行方法编写的时候有其自己的定义格式:要求定义方法的单词第一个单词字母小写,而后每个单词的首字母大写。

  那么以上定义了无参无返回值,有参无返回值的方法,那么下面在来定义有参数有返回值的方法
    范例:定义一个加法操作

public class TestDemo{
public static void main(Srting args[]){
int result = add(10,20); // 由于返回的是int型数据,所以可以利用变量接收
System.out.println(result);
System.out.println(add(100,300)); // 直接将方法的返回值输出

public static int add(int x,int y){
if(x<0){
return 0; // 只要有返回值类型声明,那么必须使用return 返回
}
if(y<0){
return 0; // 只要有返回值类型声明,那么必须使用return 返回
}
return x + y; // 只要有返回值类型声明,那么必须使用return 返回
}
}

  在学习循环语句的时候学习过 break 与 continue语句,这两个语句主要是进行循环控制,合理的利用可以让循环语句之后的代码不在执行,但是必须与 if 判断一起使用。
而同样的操作在方法中也提供,如果说你的方法使用了 void 声明,那么就是可以
在方法执行过程之中直接利用“return”来结束方法调用。
  范例:利用return 结束方法调用

public class TestDemo{
public static void main(Srting args[]){
print(10);
print(100);
}
public static void print(int age){ // 此时方法没有返回值
if(age > 250){
return; // 后续代码不再执行,前提:方法必须返回 void
}
System.out.println("年龄是:" + age);
}
}

  不管什么情况,只要是在return之后的代码都不再执行,但是需要区分的是,如果方法返回的是 void,那么就可以直接写 return,但是如果方法本身有返回值,那么就必须在编写return的同时返回内容。

  return的常用作用有以下两种
    一种是返回参数所用的关键字,假如一个有返回值的方法执行完了之后需要返回一个参数,示例:

  public string functionTest(){
String a = "abc";
return a;
  }

  那么这个方法被调用之后就会返回一个值为abc的字符串,string result = functionTest();

  第二种用法是,代码执行到此处终止。
    比如当代码执行到某个地方会出现几种结果,然后其中一种结果就不能执行后续代码,这时候在那里加上一个return就可以终止后面的代码执行

    实际的开发之中是否使用方法有两个决定性的原则:
      主方法里的代码是不是太多了,如果多了,可以将其拆分到方法之中;
      在你编写代码的过程之中总是在不断的进行复制和粘贴;就可以考虑将这部分代码封装为方法

3. 方法重载(重点)
  方法重载指的是方法名称相同,参数的类型或个数不同。为了理解方法重载的意义   要求:
    现在要求定义有三个加法操作,包括两个整型相加,三个整型相加,两个小数相加。

public class TestDemo{
public static void main(Srting args[]){
System.out.println("两个整数相加:" + add1(10,20));
System.out.println("三个整数相加:" + add2(10,20,30));
System.out.println("两个小数相加:" + add3(10.2,30.4));
}
public static int add1(int x,int y){
return x+y;
}
public static int add2(int x,int y,int z){
return x + y + z;
}
public static double add3(double x,double y){
return x+y;
}
}

    如果说功能相同的方法名字不一样,那么在调用的时候实在是很麻烦的,这种情况下最好的解决方案就是方法重载(像这样有几十个就会很麻烦,要自己去找合适的方法,不过现在可以用方法重载来解决)
  范例:利用重载解决
    调用重载方法时会根据传递的参数类型以及个数调用不同的方法执行。

public class TestDemo{
public static void main(Srting args[]){
System.out.println("两个整数相加:" + add(10,20));
System.out.println("三个整数相加:" + add(10,20,30));
System.out.println("两个小数相加:" + add(10.2,30.4));
}
public static int add(int x,int y){
return x+y;
}
public static int add(int x,int y,int z){
return x + y + z;
}
public static double add(double x,double y){
return x+y;
}
}

  两类操作完成的是同一个功能,但是很明显,在调用的时候利用方法重载的操作会更加简单。

  但是在进行方重载的时候有一项重要的说明----关于 返回值的问题。在方法重载的时候本身只规定了参数的类型与个数的不同,但是并没有针对于返回值的类型是否相同进行限制。但是在实际来讲,方法重载时返回值类型一定要相同。

  方法重载时返回值类型可以不同,但是从开发的标准来讲应该相同的。

2.3 方法的递归调用
  如果以开发中出现的代码为主的画,那么递归操作几乎不会出现,但是如果你要想分析一些开发工具原理的话那么就必须使用递归。递归是迈入数据结构的第一步,但是这并不是说一下子就就可以理解递归,相反,如果真的想理解递归操作,那么可以将本次的代码自己编写50遍以上。

  所谓的递归指的是方法自己调用自己的情况。而对于递归操作一般都要满足如下操作。
    递归必须在方法上进行
    递归中必须有明确的结束条件
    递归的过程之中必须进行结束条件的变更。
  范例:利用while循环实现一个累加操作。

public class TestDemo{
public static void main(Srting args[]){
int x = 1;
int sum = 0;
while(x <= 100){
sum += x;
x ++;
}
System.out.println(sum);
}
}

那么下面讲此代码修改为递归的调用形式。

public class TestDemo{
public static void main(Srting args[]){
System.out.println(sum(100));
}
public static int sum(int num){ // 进入到方法之中
if(num == 1){ // 已经到了最后一个数据
return 1; // 直接返回1
}
// 100+99+98+...+2+1;
return num + sum(num -1); // 每次修改接收条件

  对于此代码的调用分析如下:
    第一次调用(主方法调用):retum 100 + sum(99);
    第二次调用(sum(99)方法):retum 99 + sum(98);
    第三次调用(sum(98)方法):retum 98 + sum(97);
    ...............................
    倒数第二次调用(sum(2)方法):retum 2 + sum(1);
    最后一次调用(sum(1)方法):if 判断条件满足,retum 1。
  最终变为了:retum 100 +99+98+......+3+2+1(if 语句);

  实际上递归操作有一件很可怕的影响:由于其操作所占用的时间(包括内存占用)的时间过长,那么有可能会造成内存的溢出。导致程序出现问题。所以不是必须用到的情况下,不建议使用递归操作。

3.总结
  方法的定义结构,但是本次的方法有限制性:只能够在主类中定义由主方法进行调用;
  方法的重载:方法名称相同,参数的类型和个数不同,方法重载对返回值类型没有要求,但是一定要统一返回值类型。

菜鸡的Java笔记 第六 - java 方法的更多相关文章

  1. Java笔记(六)

    IO流: 字符流和字节流: 字符流两个基类: InputStream OutputStream 字节流两个基类: Reader Writer FileWriter: import java.io.Fi ...

  2. java并发系列(六)-----Java并发:volatile关键字解析

    在 Java 并发编程中,要想使并发程序能够正确地执行,必须要保证三条原则,即:原子性.可见性和有序性.只要有一条原则没有被保证,就有可能会导致程序运行不正确.volatile关键字 被用来保证可见性 ...

  3. 【Java笔记】配置文件java.util.Properties类的使用

    配置文件的路径:项目名/src/main/resources/mmall.properties mmall.properties的内容是键值对.例如假设写了ftp服务器的一些信息. ftp.serve ...

  4. Java笔记12:Java对象排序

    代码: import java.util.Arrays; import java.util.Comparator; class Person { private String name; privat ...

  5. 【Java笔记】【Java核心技术卷1】chapter3 D1JavaStandard

    package chapter3;/*有包名,命令行编译javac -d . 名字.java(注意空格)运行时用java chapter3.JavaStandard*/ public/*访问修饰符*/ ...

  6. 菜鸡的Java笔记 第四 - java 基础运算符

    数学运算符,逻辑运算,三目运算,位运算 double d2 = 314e2; //采用科学计数法的写法,表示10的2次方.= 31400.0 代码写的越简单越好   简化运算符 代码:x=x+y 可以 ...

  7. 菜鸡的Java笔记 第十 - java 类与对象

    (局部变量需要初始化,全局变量不初始化系统也会帮忙初始化而局部变量系统不会帮忙初始化)>>>    2.1 类与对象基本概念        在现实生活之中,类指的就是具备某一共性的群 ...

  8. 菜鸡的Java笔记 第二十三 - java 抽象类的概念

    abstractClass 抽象类的概念        1.抽象类的基本定义        2.抽象类的使用原则                不会抽象类与接口,java = 没学           ...

  9. 菜鸡的Java笔记 第八 - java 面向对象

    面向对象的特点以及开发过程.    java中最大的特点是其支持面向对象编程设计思想.在面向对象之前广泛流传的是面向过程的编程思想,例如:C语言的开发就属于面向过程    如果要想更简单的去理解面向过 ...

随机推荐

  1. JVM-直接内存(Direct Memory)

    1.直接内存概述 直接内存不是虚拟机运行时数据区的一部分,也不是<Java虚拟机规范>中定义的内存区域. 直接内存是在Java堆外的,直接向系统申请的内存区间. 来源于NIO,通过存在堆中 ...

  2. 使用node-gyp编写简单的node原生模块

    通过样例,让我们了解如何编写一个node的原生模块.当然,这篇文章还有一个目的,是为了方便以后编写关于node-gyp的文章,搭建初始环境. 基于node-addon-api 基于node-addon ...

  3. oracle基础安全配置

    1.oracle中用户密码复杂度配置 1)查看参数 select limit from dba_profiles where resource_name='PASSWORD_VERIFY_FUNCTI ...

  4. 从零入门 Serverless | 企业级 CI/CD 工具部署 Serverless 应用的落地实践

    背景知识 通过以往几节课程的学习,相信大家对于 SAE 平台已经有了一定的了解.SAE 为客户免除了很多复杂的运维工作,开箱即用.按用量付费:与此同时 SAE 提供了丰富的 Open API,可以很容 ...

  5. Java秘诀!Java逻辑运算符介绍

    运算符丰富是 Java 语言的主要特点之一,它提供的运算符数量之多,在高级语言中是少见的. Java 语言中的运算符除了具有优先级之外,还有结合性的特点.当一个表达式中出现多种运算符时,执行的先后顺序 ...

  6. 2020.4.6--UCF Local Programming Contest 2017的正式赛

    Problem A : Electric Bill 题目大意:进行电量分级制收费,1000kwh及以下一档收费,1000kwh以上按另一档收费,给出每个人的电量总额,问每人应支付多少钱. 思路:基础i ...

  7. 2021年3月-第02阶段-前端基础-HTML+CSS阶段-Day02

    HTML5 第二天 一.rotate 2d旋转指的是让元素在2维平面内顺时针旋转或者逆时针旋转 使用步骤: 给元素添加转换属性 transform 属性值为 rotate(角度) 如 transfor ...

  8. 二、Ansible基础之模块篇

    目录 1. Ansible Ad-Hoc 命令 1.1 命令格式 1.2 模块类型 1.3 联机帮助 1.3.1 常用帮助参数 1.4 常用模块 1.4.1 command & shell 模 ...

  9. 4.14——208. 实现 Trie (前缀树)

    前缀树(字典树)是经典的数据结构,以下图所示: 本来处理每个节点的子节点集合需要用到set,但是因为输入规定了只有26个小写字母,可以直接用一个[26]的数组来存储. 关于ASCII代码: Java ...

  10. js--数组的 fill() 填充方法详解

    前言 我们知道了很多了初始化数组的方法,但是初始化数组之后,数组中的每一项元素默认为 empty 空位占位,如何对数组这些空位添加默认的元素,ES6提供了 fill() 方法实现这一操作.本文总结数组 ...