这一节我们学习java语言中的函数概念和定义格式.

一、函数的定义

函数就是定义在类中的具有特定功能的一段独立小程序.我们可以看到,这里面比较需要注意的词语,一个就是具有特定功能,另一个就是独立.

//普通方法,有返回值,返回两上整数的和public static int add(int a,int b)//没有static时报错{return a+b;}

在java中返回类型用void关键字表示该函数没有返回值.

注意:如果返回值类型是void,那么函数中的return语句可以省略不写.

我们来看一下这两个小函数是怎么被调用的.

class FunctionDemo
{public static void main(String[] args) {int a = 3;int b = 4;int c = add(a,b);System.out.println("c="+c);/*注意:函数中只能调用函数,不能定义函数public static void myPrint(){System.out.println("hello java");}myPrint();*/}//普通方法,有返回值,返回两上整数的和public static int add(int a,int b)//没有static时报错{return a+b;}//没有返回值的函数public static void myPrint(){System.out.println("Hello Java"); //return ;//这句话可以不写} }

 小结:

我们总结了3点应该注意的细节:

1.函数中只能调用函数,不能定义函数

2.定义函数时,函数的结果应该返回给调用者,交由调用者处理

3.函数只有被调用才会被执行

二、定义函数的两个明确

这一节我们学习在实际开发中如何定义一个函数,也就是如何定义一个功能.

要定义一个功能,就要用两个明确来完成:

明确一:这个功能的结果是什么;

明确二:这个功能实现过程中是否需要未知内容参与运算.

我们直接看下面代码:

class FunctionDemo2 //两个明确
{public static void main(String[] args) {int num = 65;System.out.println(num+"分对应的等级:"+getLevel(num));print99();}/*需求1:定义一个功能,完成两个整数的和的获取思路:既然定义功能,就是可以用函数来实现如何定义一个函数呢?通过两个明确来完成明确一:这个功能的结果是什么?  是和,是功能的结果,所以该功能的返回值类型是int其实就是在明确函数的返回值类型明确二:这个功能实现过程是否需要未知内容参与运算?  有,加数和被加数,这就是函数的参数列表(参数的个数+参数的类型)其实就明确参数列表*/public static int add(int a,int b){return a+b;}/*需求2:定义一个功能,画一个矩形在控制台思路:明确一:这个功能的结果是什么?  没有结果,直接打印到控制台,并未返回给调用者,用void表示明确二:这个功能实现过程是否需要未知内容参与运算?  有,行和列不确定.两个整数int*/public static void draw(int row,int col){for(int x=1;x<=row;x++){for(int y=1;y<=col;y++){System.out.print("*");}System.out.println();}}/*需求3:定义一个功能,比较两个数年是否相等思路:明确一:这个功能的结果是什么?  有,比较结果boolean明确二:这个功能实现过程是否需要未知内容参与运算?有,两个整数*/public static boolean equals(int a,int b){/*if(a==b)return true;elsereturn false;*///(a==b)?true:false;return a==b;}/*需求4:定义一个功能,获取两个数中较大的数思路:明确一:这个功能的结果是什么?  有,两个整数中较大的数明确二:这个功能实现过程是否需要未知内容参与运算?有,参与比较的两个参数*/public static int getMax(int a,int b){/*if(a>b)return a;elsereturn b;*/return (a>b)?a:b;}/*需求5:定义一个功能,打印99乘法表思路:明确一:这个功能的结果是什么?  没有,直接在控制台输出99乘法表明确二:这个功能实现过程是否需要未知内容参与运算?没有*/public static void print99(){for(int x=1;x<=9;x++){for(int y=1;y<=x;y++){System.out.print(y+""+x+"="+y*x+"\t");}System.out.println();}}/*需求6:根据考试成绩获取学生分数对应的等级90~100      A80~89      B70~79      C60~69      D60以下       E思路:明确一:这个功能的结果是什么?  有,返回等级char明确二:这个功能实现过程是否需要未知内容参与运算?有,学生的分数int*/public static char getLevel(int num){if(num>=90&&num<100)return 'A';else if(num>=80&&num<89)return 'B';else if(num>=70&&num<79)return 'C';else if(num>=60&&num<69)return 'D';elsereturn 'E';}
}

三、函数的内存加载过程

java命令启动了JVM,当启动JVM之后,会自动寻找main方法,如果没有就报错.

这就是说如果没有main方法,编译是可能通过的,但是在运行时会找到错误.

虚拟机在启动之后,然后在栈内存中划分一部分空间;
先分配一个内存存放main方法,执行main函数,执行主函数中的第一句语句:x=add(3,5)
内存中变量x暂时未知,调用add方法;
内存再分配一个存放add方法的空间,同时把实际参数a和b进行运算;
然后把a+b的结果赋给变量x;
内存释放add方法内存;
然后再继续执行main函数中的第二名语句进行输出;
最后内存释放main方法的内存.

四、函数的重载

函数的重载(overload):在同一个类中,允许存在一个以上同名函数,只要它们的参数个数或者参数类型不同即可.

class OverloadDemo
{//加法运算,两个整数的和public static int add(int a,int b){return a+b;}//加法运算,两个小数的和public static double add(double a,double b){return a+b;}//加法运算,三个整数的和public static int add(int a,int b,int c){return a+b+c;}public static void main(String[] args) {printCFB();printCFB(6);}/*打印乘法表*/public static void printCFB(int n){for(int x=1;x<=n;x++){for(int y=1;y<=x;y++){System.out.print(y+"*"+x+"="+y*x+"\t");}System.out.println();}}/*打印标准乘法表*/public static void printCFB(){printCFB(9);}
}

从重载的概念和上面的例子我们不难看出以下几个特点:

1.它们必须在同一个类中.

2.同时它们的函数名是相同的.

3.参数的个数或者参数的类型不同.

4.与函数的返回值无关.

我们之前说过java是严谨性的语言,当一个函数出现调用不确定时,编译时会提示失败,所以我们在函数重载时一定要掌握好重载函数的区别和特点,对我们合理的重载函数是非常有用的.

Javase杂谈(四)相关推荐

  1. TW使用经验杂谈(四)--UI自动化脚本规范思考

    TW使用经验杂谈(四)–UI自动化脚本规范思考 在确定使用TW实施基于ui自动化时候,对H2O的按系统功能统计了一下,5大主页83个功能481个业务用例,然后再按步骤.校验.逻辑条件数量来准备,这将是 ...

  2. JavaSE(十四)——网络编程(IP地址、端口号、TCP、UDP)

    文章目录 1. 概述 2. InetAddress类 3. 端口 4. TCP协议 4.1 传输消息 4.2 文件上传 5. UDP协议 6. TCP与UDP区别 7. URL 8. 下载资源 9. ...

  3. javaSE探赜索隐四<数组>

    数组 一.概念 数组是相同数据类型元素的集合.(如果数组中存的是引用类型,则存的是对象的引用.) 数组是一种线性的数据结构. 二.声明方式 数据类型 [] 数组名(后面可以跟多个数组名定义多个数组.) ...

  4. Javase杂谈(十)

    一.继承 这一节我们学习面向对象的第二个特征--继承. 那么什么是继承呢?继承有作用是什么? 我们先通过一个例子来说明: class Student//学生类 {String name;//姓名int ...

  5. javaSE探赜索隐四<基本排序算法>

    冒泡排序 比较数组相邻的元素.如果第一个比第二个大,就交换它们两个. 对每一对相邻元素作同样的工作,这样在最后的元素应该会是最大的数. 针对所有的元素重复以上的步骤,除了最后一个. public vo ...

  6. (杂谈四) 北京城の八月

    经过一段时间的学习以后: 我发觉了学习过程中的一些秘密,尤其是对于技术的学习,比如我学习的就是Android. 1.很多人希望在QQ群或者WeChat群里面找到大神可以带自己飞,且不说别人愿不愿意带你 ...

  7. javaSE学习笔记_目录

    计算机基础知识 javaSE (一)数据类型转换.++/–运算符 javaSE (二)逻辑/位运算符.左移右移运算符.switch语句 循环语句.数组 javaSE (三)循环语句.数组.按值传递(i ...

  8. java基础的知识点(一)

     初始Java: 一.程序: 1.通常指完成某些事物的一种既定方式和过程. 2.计算机程序:为了让计算机执行某些操作或解决某个问题而编写的一系列有序指定的集合. 二.java可以做什么: 1.开发桌 ...

  9. 记忆宫殿心法技法入门

    首先需要说明的是,一,我研究的是应用记忆法,区别与最强大脑上的竞技记忆:二,技法十分重要,但是心法同样重要,也就是道法层面的,心法决定你能走的多远:三,记忆宫殿是技能不是知识,需要大量实操. 我们使用 ...

最新文章

  1. AI服务器的设计与实现
  2. 常用事件方法及技巧(二) -- MouseEvent(鼠标事件)
  3. 讨论UML概念和模型UML九种图。
  4. 部署在sae上的servlet程序出现is not a javax.servlet.Servlet 错误
  5. 《c++语言导学》——3.5 建议
  6. oracle 老白,老白学编程 - Netdata学习 - numa
  7. 每日算法系列【LeetCode 1031】两个非重叠子数组的最大和
  8. OverFeat笔记
  9. 建立自己公众号题库系统
  10. STM32 CAN通讯过滤器使用总结及代码分析
  11. 电脑重装系统不小心格式化了恢复文件教程
  12. 终于明白#!bin/sh是什么意思了
  13. 菜鸟Axios学习=官网
  14. JavaScript 进阶 35 -- 构造函数、原型对象、实例之间的关系详解
  15. SAP中MRP控制者的应用理解
  16. 小傻蛋的妹妹跟随小甲鱼学习Python的第十六节016
  17. 计算机语言表达爱情,各种语言用数字表达爱情的
  18. TW项目寻路算法最优实践
  19. 二维码加密解密工具——优密(手机版)正式上线!
  20. AlwaysOn添加可用性数据库

热门文章

  1. 联通光猫HG2543C1改桥接备忘
  2. 分享一个免费的OCR图片文字识别接口
  3. 一条公链的坎坷进化路 |链捕手
  4. qq一键登入帝国cms插件|适用7.5 7.2版本|UTF-8 GBK双版本
  5. 【NOIP】【codevs】【DP】1169传纸条
  6. 【单片机基础篇】 人体红外感应传感器模块
  7. Android中将像素转换为sp/dp
  8. pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --trusted-host pypi.tuna.tsinghua.edu.cn pym
  9. Figma#1: 图形绘制
  10. php soap 加符号报错,php soap错误获取http标头