讲完了语句结构还有运算符、变量,下面我们来了解下函数。

那么什么是函数,函数的定义是怎样的呢?

函数的定义:

函数是指在类当中定义的一段有特殊功能的代码段,同时函数在类中也被成为方法。

class FunDemo
{
public static void main(String[] args) { int a=1,b=2;
int c;
c = a+b;
c = 5+7;
//为了能够重复引用这个方法,我们在类中定义一个特殊方法。
add(2,8); } int add(int a,int b)
{ return a+b;
//但是这里a,b都是未初始化的,为了初始化这两个变量,我们需要定义一段初始化的代码即(a,b)为了但是因为java是强类型语言,我们需要我为这两个参数定义类型
//即(int a, int b)
//但是这样定义完了,我们没法调用,我们为了调用他就为他起一个名字,方便我们标识
//这里我们定义他为add,总起来就是
//这样还不便于我们处理,处理数据就是I/O的过程,我们还需要他返回我们想要的。
//即将结果返回给我们
//return a+b; return 是关键字(具有特殊作用的字符)。//但是返回的字符,由于java的强类型,这里需要标志返回的数值的类型:这里需要返回int 类型
//综上所述:
//首先这段代码得有属于自己的代码块,即作用范围
//其次为了能够实现一段特殊的功能,我们需要定义一条语句,这里暂且定义为a+b
}
}

  如果此时我们编译的话,得到的将是一个异常错误:“无法从静态上下文当中引用,非静态方法”,也就是说如果我们想引用这个方法,必须给其定义一个静态方法,这里我们使用static修饰符。修改如下:

class FunDemo
{
public static void main(String[] args) { int a=1,b=2;
int c;
c = a+b;
c = 5+7;
//为了能够重复引用这个方法,我们在类中定义一个特殊方法。
c = add(2,8);
System.out.println("c="+c); } static int add(int a,int b)
{ return a+b;
//但是这里a,b都是未初始化的,为了初始化这两个变量,我们需要定义一段初始化的代码即(a,b)为了但是因为java是强类型语言,我们需要我为这两个参数定义类型
//即(int a, int b)
//但是这样定义完了,我们没法调用,我们为了调用他就为他起一个名字,方便我们标识
//这里我们定义他为add,总起来就是
//这样还不便于我们处理,处理数据就是I/O的过程,我们还需要他返回我们想要的。
//即将结果返回给我们
//return a+b; return 是关键字(具有特殊作用的字符)。//但是返回的字符,由于java的强类型,这里需要标志返回的数值的类型:这里需要返回int 类型
//综上所述:
//首先这段代码得有属于自己的代码块,即作用范围
//其次为了能够实现一段特殊的功能,我们需要定义一条语句,这里暂且定义为a+b
}
}

  此时便可以顺利编译通过。

  打印结果为c =10;

通过以上分析,我们来总结下java中函数的书写方式。

修饰符  返回值类型  函数名称(参数类型 参数一,参数类型 参数二,参数类型 参数三,参数类型 参数四,参数类型 参数五.....)

{

  执行语句;

  return 返回值;(特殊条件下可以省略,省略的时候,返回值类型为void)

}

在我们定义函数名称的时候,我们命名的时候,要求除第一个字符之后的每个单词都要首字母大写。

那么这里的返回值,是做什么的呢?有什么作用呢,他的作用就是把值返回给调用者。什么是返回给调用者呢?举个例子来说:你去食堂打饭,你付钱给食堂师傅,师傅收钱之后,应该把饭给你吧,总不能给张三或者李四吧。这里就是把值返回给调用者。

特殊情况:通常我们定义完函数之后,都有返回结果,但是也有这么一部分函数,你定义完之后,它没有返回结果。那么此时return后直接跟的是;号,没有具体的返回值类型,此时我们在定义函数返回值类型的时候,就用java中唯一代表这种情况的 void 关键字。

代码示例:

class FunDemo
{
public static void main(String[] args) { shuChu(); } static void shuChu(){ System.out.println("Hello World!");
return ;//如果返回值是void,这条语句可以省略
} }

通过以上代码,那么函数的作用或者好处到底体现在什么地方呢?

1、提高了代码的复用性,不要一味的重复写功能一样的代码,把加和的,或者打印 helloword 有了重复的利用。

2、对现有的功能进行了封装,把add函数封装了一种特定的功能。

3、只有当代码被调用的时候才会被执行。

封装的作用在于,提供复用。

需要注意的一个问题:函数中只能调用函数 ,但是不能在函数当中定义函数。

函数的级别是同级的都是相对于类来说的。

示例:

class FunDemo
{
public static void main(String[] args) { static void shuChu(){ System.out.println("Hello World!");
//return ;
} shuChu(); } }

  如果这样写,我们编译的时候会提示,非法表达式开始XXXX,这里也从另一个方面说明了。函数当中,只能写语句表达式,不能够写函数。

定义函数时,函数的返回值,应该返回给调用者,由调用者处理。生活中的例子:我给你钱,让你去买雪糕,结果你买完之后自己吃了,那么这就是不合理的。

class FunDemo
{
public static void main(String[] args) { int x = add(3,5);//这个良好
add2(3,5);//这个就没有把返回值返回,而是私自打印了
          System.out.print(add2(3,5));//因为此时add2(int a, int b),返回值为void即,返回值不确定,此时就无法确定返回值的类型,编译时会报错。
} static int add(int a, int b){
return a+b;
} static int add2(int a, int b){
System.out.print(a+b);
} }

  写函数的时候两个确定:1、这个功能的结果是什么?//return 和算法的体现

               2、这个功能实现的过程当中是否需要未知内容参与运算。//是否需要传入参数。

  一个注意,参数的类型和返回值的类型没有关系。

(To be continue!!!)

 函数在内存当中的存储方式:

  当程序被访问的时候,程序被加载进内存。然后当函数被调用的时候,函数被加载到栈内存,栈内存的特点在于先进后出[FILO],跟子弹夹类似。当函数调用,返回值之后,之后的动作就是出栈,释放内存空间。

函数的重载:

函数重载之所以出现是为了提供给我们一种机制,什么机制呢?就是比如我们要需要一个打印功能,我们给这个功能取名为printOut;

那么我们先用他来打印一个字符串:

两个明确:1、这个函数最后返回什么,结果是什么?这里只是在控制台打印,没有具体的返回值,我们用void来标志他的返回类型。

     2、函数中有没有不确定的参数参与运算。这里当然有,我们想打印"Hello "、"Nice"...这些都是未知的,那么我们就需要输入参数即形参,那么形参的类型是什么呢?答案:String

class Funcdemo{

	public static void main(String[] args) {

		String a = "The Hello World!";
printOut(a); } public static void printOut(String s){ System.out.print(s); } }

  那么到这里,可以正常实现我们的需求。可是,现在我们的需求变了,我们还要打印2个整数的和,我们来定义一个返回值为void 的函数 printOut2;它也有两个未知的参数参与运算,我们来给她定义一下2个int 型的参数。

代码:

class Funcdemo{

	public static void main(String[] args) {

		String a = "The Hello World!";
printOut(a);
int x = 210;
int y = 343;
printOut2(x,y); } public static void printOut(String s){ System.out.println(s); } public static void printOut2(int a, int b){ System.out.println(a+b); } }

写到这里,我们就可以看到,我们所写的函数的功能都是相同,就是想控制台打印东西嘛,只不过传入的参数不一样而已。假如有这样的一个功能,我们可以定义同名函数,然后运行的时候

根据不同的输入类型,或者同类型的不同的形参个数来确定,调用那个方法该多好。Thank java,他提供了我们一个函数的特殊功能,重载!!!

什么是重载呢?java允许我们在定义接受不同类型参数【这里需要定义一点,这个跟返回值类型没有丁点关系】或者不同参数个数的同名函数,这个就是重载。

java学习之函数的更多相关文章

  1. Java学习笔记-函数

    Java也有着函数的概念,不过在OOP中,函数用作方法称呼 函数的定义 函数就是定义在类中的具有特定功能的一段独立小程序 函数也称为方法 函数的格式 修饰符返回值类型函数名(参数类型形式参数1,参数类 ...

  2. Java学习----集合函数

    1.List----有序的collection(序列) 与数组的不同:数据类型可以相同可以不同,数组的长度是预先定义好的,集合的长度也是预先定义好的,但是长度会随着元素的增加而增加 ArrayList ...

  3. Java学习----Math函数

    public class TestMath { public static void main(String[] args) { System.out.println(Math.E); System. ...

  4. Java学习----日期函数

    Date   Calendar public class TestDate { private Date date; Calendar calendar; public TestDate() { // ...

  5. Java学习----字符串函数

    1.String string类是最终类,不可以有子类 package com.demo.pkg1; public class TestString { public static void main ...

  6. Java 学习笔记(3)——函数

    之前的几篇文章中,总结了java中的基本语句和基本数据类型等等一系列的最基本的东西,下面就来说说java中的函数部分 函数基础 在C/C++中有普通的全局函数.类成员函数和类的静态函数,而java中所 ...

  7. Java学习笔记(04)

    Java学习笔记(04) 如有不对或不足的地方,请给出建议,谢谢! 一.对象 面向对象的核心:找合适的对象做合适的事情 面向对象的编程思想:尽可能的用计算机语言来描述现实生活中的事物 面向对象:侧重于 ...

  8. 《Java学习笔记(第8版)》学习指导

    <Java学习笔记(第8版)>学习指导 目录 图书简况 学习指导 第一章 Java平台概论 第二章 从JDK到IDE 第三章 基础语法 第四章 认识对象 第五章 对象封装 第六章 继承与多 ...

  9. (。・・)ノ~个人java学习随笔记录

    基本认识 1.编程思维 根据这几天的java学习,编写程序最重要的就是要有一个清晰的思路.语法上的错误可以跟随着不断的联系与学习来弥补,清晰的思维却只有自己来前期模仿,后面慢慢摸索形成一套属于自己的思 ...

随机推荐

  1. 如何将你的程序打包成ipa

    ios打包 把需要安装这个app的设备的证书导入xcode中 Archive打包ipa 将打包得到的文件打开,并且显示包内容 找到有相关图标的文件,文件上面有一个禁止符号 将这个文件,拖到itunes ...

  2. ios中从相册:相机中获取图片信息

    ios中从相册/相机中获取图片信息 从相册中获取图片的信息 UIImagePickerController *imgPickView = [[UIImagePickerController alloc ...

  3. iOS UIKit:viewController之层次结构(1)

    ViewController是iOS应用程序中重要的部分,是应用程序数据和视图之间的重要桥梁.且应用程序至少有一个view controller.每个view controller对象都负责和管理一个 ...

  4. C#压缩文件为zip格式

    Vercher   C#压缩文件为zip格式 需要ICSharpCode.SharpZipLib.dll,网上下载的到. 代码是从网上找来的: 1 public class ZipClass 2 { ...

  5. Unity3D GUI学习之GUILayout控件及使用

    GUILayout也可以定义一些控件,并且它们会自动垂直对其: GUILayout.Button("开始游戏"); GUILayout.Button("结束游戏" ...

  6. (转)基于PHP的cURL快速入门

    1. 原文:基于PHP的cURL快速入门 英文原文:http://net.tutsplus.com/tutorial ... for-mastering-curl/ 原文作者:Burak Guzel ...

  7. Activity间的跳转,startActivity与startActivityForResult

    JreduCh04 2016-07-30跳转 (由一个画面跳转到另一个画面)两种方法:Intent中 startActivity.startActivityForResult.后者可设置request ...

  8. Wireshark提示没有一个可以抓包的接口

    这是由于win下默认NPF服务是关闭的,需要以管理员的身份开启这个服务 Windows上安装wireshark时,会遇到NPF驱动无法启动的情况,一般如果采用管理员的方式就可以正常启动,或者是将NPF ...

  9. java基础之抽象类与接口的区别

    在学习java的过程中,或者是在找工作笔试或面试的时候,如果你是java岗位,那么抽象类与接口的区别无疑是一个大热点,是各大公司都想要考的一个小知识点,下面是我为了9月份秋招自己总结的,若有不对的地方 ...

  10. Codeforces 543B Destroying Roads(最短路)

    题意: 给定一个n个点(n<=3000)所有边长为1的图,求最多可以删掉多少条边后,图满足s1到t1的距离小于l1,s2到t2的距离小于l2. Solution: 首先可以分两种情况讨论: 1: ...