前提:现在所讲解的方法定义格式,只属于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. 升级sudo版本

    1.查看sudo版本 sudo -V 2.下载sudo最新安装文件 sudo官方地址: https://www.sudo.ws/ 下载地址:https://www.sudo.ws/dist/ 3.解压 ...

  2. C语言日记① 初识C

    概念 c语言是一种计算机语言 也就是人与计算机打交道的语言 在早期,因为计算机使用的二进制 所以早期写代码都是科学家来写的使用对应的功能二进制代码 需要用到手册,所以开发不方便 在后来,人们发明了汇编 ...

  3. Go语言核心36讲(Go语言基础知识一)--学习笔记

    01 | 工作区和GOPATH 从 Go 1.5 版本的自举(即用 Go 语言编写程序来实现 Go 语言自身),到 Go 1.7 版本的极速 GC(也称垃圾回收器),再到 2018 年 2 月发布的 ...

  4. 从零入门 Serverless | 使用 Spot 低成本运行 Job 任务

    作者 | 代志锋(云果)  阿里云技术专家 本文整理自<Serverless 技术公开课>,点击链接即可免费听课:https://developer.aliyun.com/learning ...

  5. CF123E Maze(期望dp,树形dp,式子)

    题目大意: 给你一棵树,边权都是1,每一个点有一个是起点的概率和一个是终点的概率,你将以起点为根,开始在树上随机dfs,每到一个点,就会将他的所有儿子随机打乱成序列,然后按照那个随机顺序走完,直到走到 ...

  6. Vulnstack内网靶场2

    环境配置 内网2靶场由三台机器构成:WIN7.2008 server.2012 server 其中2008做为对外的web机,win7作为个人主机可上网,2012作为域控 网络适配器已经设置好了不用自 ...

  7. 初学python-day5 流程控制

    流程控制 一.判断语句 1.if语句(单一条件分支) 结构: if    表达式: 为真的时候执行的语句 概述:当程序运行到if语句时候,首页要计算表达式的值,判断真假,如果表达式的职位为真,则执行i ...

  8. python jinja2初见

    吸取了长城杯的教训,学习python-web迫在眉睫. 正常难度的python_template_injection,由于现在没学面向对象,理解原理比较困难,所以先使用简单版复现:并附上正常版的常用p ...

  9. Less-25 preg_replace2

    Less-25: 核心语句: 各种回显也均有. 通过blacklist,我们可以发现,本题屏蔽了and和or. preg_replace函数中正则表达式后面的i是一个修饰符,代表正则匹配时不区分大小写 ...

  10. 字符串匹配(kmp+trie+aho-corasic automaton+fail tree)

    目录 kmp 那么怎么快速求最长前缀后缀呢 trie aho-corasic automaton fail tree kmp 对于一个字符串\(s_{0\dots n}\),称\(s_{0\dots ...