课外天地 李树青学习天地Java程序语言课件 → 课件7下载——Java函数


  共有20051人关注过本帖树形打印复制链接

主题:课件7下载——Java函数

帅哥哟,离线,有人找我吗?
admin
  1楼 博客 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 管理员
等级:管理员 帖子:1939 积分:26594 威望:0 精华:34 注册:2003/12/30 16:34:32
课件7下载——Java函数  发帖心情 Post By:2006/2/26 21:25:33 [只看该作者]

Java函数

函数能够将功能相近的代码封装成一个可以复用的模块。

1、定义
一般的函数需要考虑以下内容:返回值类型、函数名称和形参。
如有一个函数,功能为在屏幕上直接输出一个字符串“Hello”,函数的原型为:
void func()
{
        System.out.println("Hello");
}

如有一个函数,接受一个字符串变量,将其在屏幕上输出,函数原型为:
void func(String str)
{
        System.out.println(str);
}

如有一个函数,接受两个整型变量,返回它们的最大值,函数原型为:
int func(int a,int b)
{
        if(a>b)
                return a;
        else
                return b;
}
或者为:
int func(int a,int b)
{
        if(a>b)
                return a;
        return b;
}
或者为:
int func(int a,int b)
{
        return (a>b)?a:b;
}

2 使用
函数的使用很简单,只需直接以函数名称调用即可,如函数有形参则可以将实参赋过去,如函数没有参数,括号也不能省略。如:
public class exec
{
        public static void main(String[] args)
        {
                System.out.println(func(1,2));
        }
        
        public static int func(int a,int b)
        {
                return (a>b)?a:b;
        }
}
说明:如果一个函数需要被main主函数调用,需要在前面加上public static(个中原因以后再说)。

对于具有引用类型参数的函数而言,调用后将有可能产生实参的改变。
如:
public class exec
{
        public static void main(String[] args)
        {
                int i=0;
                func(i);
                System.out.println(i);
        }
        
        public static void func(int num)
        {
                num=1;
        }
}
输出为0,表明基本类型的参数不会发生形参的改变导致实参的改变

再如:
public class exec
{
        public static void main(String[] args)
        {
                int[] narray=new int[10];
                narray[0]=0;
                func(narray);
                System.out.println(narray[0]);
        }
        
        public static void func(int[] num)
        {
                num[0]=1;
        }
}
输出为1,表明引用类型的参数会发生形参的改变导致实参的改变,主要原因在于参数的传递内容其实是对象变量的引用,而非对象本身,所以会导致形参引用变量和实参引用变量指向同一个对象变量。

3、函数重载
下面程序的功能是实现多种函数,分别对不同类型的变量求最大值
public class exec
{
        public static void main(String[] args)
        {
                System.out.println(ifunc(1,2));
                System.out.println(dfunc(1.0,2.0));
        }
        
        public static int ifunc(int a,int b)
        {
                return (a>b)?a:b;
        }
        
        public static double dfunc(double a,double b)
        {
                return (a>b)?a:b;
        }
}

虽然结构清晰,但是函数调用的时候不太方便,需要指定不同的函数名称。在Java中完全可以将上述的两个自定义函数设计成同一个名称,但是参数不一样,此时称为函数重载,如:
public class exec
{
        public static void main(String[] args)
        {
                System.out.println(func(1,2));
                System.out.println(func(1.0,2.0));
        }
        
        public static int func(int a,int b)
        {
                return (a>b)?a:b;
        }
        
        public static double func(double a,double b)
        {
                return (a>b)?a:b;
        }
}

注意:
重载的条件只有下面几种:
1)参数个数不一样,或者参数有无
2)参数类型不一样,或者类型顺序不一样
下面不能成为重载的条件:
1)参数的名称不一样
2)函数的返回类型不一样

有时存在隐式类型转换,会导致调用情况复杂,如:
public class exec
{
        public static void main(String[] args)
        {
                System.out.println(func(1,2.0));
        }
        
        public static int func(int a,int b)
        {
                return (a>b)?a:b;
        }
        
        public static double func(double a,double b)
        {
                return (a>b)?a:b;
        }
}
输出为:2.0
说明:当有多种重载函数可以匹配时,系统总是采用从低精度类型向高精度类型转换的方式来选择重载函数。

[此贴子已经被作者于2010-12-12 07:34:25编辑过]

 回到顶部
美女呀,离线,留言给我吧!
eva
  2楼 博客 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游民 帖子:43 积分:2049 威望:0 精华:0 注册:2006/9/18 17:29:55
  发帖心情 Post By:2007/3/19 22:31:59 [只看该作者]

老师,这个“2)函数的返回类型不一样”可以作为不能成为重载的条件吗?你上面的例子不是一个返回int,一个返回double吗?

 回到顶部
帅哥哟,离线,有人找我吗?
admin
  3楼 博客 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 管理员
等级:管理员 帖子:1939 积分:26594 威望:0 精华:34 注册:2003/12/30 16:34:32
回复  发帖心情 Post By:2007/3/20 6:31:16 [只看该作者]

函数的返回类型不一样不可以作为重载的条件

上述两个函数虽然返回类型不一样,但是重载实际依据的是参数类型的不同,如果你将两个函数的参数类型改为一样,编译就会报错


 回到顶部
美女呀,离线,留言给我吧!
eva
  4楼 博客 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游民 帖子:43 积分:2049 威望:0 精华:0 注册:2006/9/18 17:29:55
  发帖心情 Post By:2007/3/20 22:09:12 [只看该作者]

那这两个条件不是相互矛盾吗?


 回到顶部
帅哥哟,离线,有人找我吗?
admin
  5楼 博客 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 管理员
等级:管理员 帖子:1939 积分:26594 威望:0 精华:34 注册:2003/12/30 16:34:32
回复  发帖心情 Post By:2007/3/22 20:07:26 [只看该作者]

为什么矛盾?

返回类型和参数并不是一个概念


 回到顶部
美女呀,离线,留言给我吧!
eva
  6楼 博客 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游民 帖子:43 积分:2049 威望:0 精华:0 注册:2006/9/18 17:29:55
2010年我开设的毕业设计选题——面向07级信管班  发帖心情 Post By:2007/3/22 21:47:54 [只看该作者]

虽然不是一个概念,但是它们必须同时满足吧?

 回到顶部
帅哥哟,离线,有人找我吗?
admin
  7楼 博客 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 管理员
等级:管理员 帖子:1939 积分:26594 威望:0 精华:34 注册:2003/12/30 16:34:32
回复  发帖心情 Post By:2007/3/25 23:12:12 [只看该作者]

不是,根本不必考虑返回类型对重载的影响,重载只与参数有关

 回到顶部