IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> [3] Java的方法后续部分 -> 正文阅读

[数据结构与算法][3] Java的方法后续部分

Java的方法后续部分

简单回顾Java的方法概念

方法,在C语言里就是函数,主要的优点就是可以复用。写函数的要求一般是,尽量一个函数完成一个功能。

例子:

比较两个整数的大小

public class Demo02 {
        public static void main(String[] args){
                int i=99;
                int j=88;
                int result=Max(i,j);
                System.out.println(result);
        }
        public  static int Max(int a,int b){
                return a>b?a:b;
        }
}

输出结果:

99

Java的方法的特点:

  • 相对于C/C++来说一般多了public static
  • 相对于C语言来说,Java的方法可以没有顺序(因为Java的方法算是类中的成员方法,所以可以没有顺序,C++的类中的成员函数也是可以没有顺序的)

解释一下Java的方法有static和没static的区别:其实就是主方法想直接调用子方法那就加static修饰,如果主方法不想直接调用子方法那就不用加static

先看例子:

有static

public class Demo02 {
        public static void main(String[] args){
                int i=99;
                int j=88;
                int result=Max(i,j);
                System.out.println(result);
        }
        public  static int Max(int a,int b){
                return a>b?a:b;
        }
}

没有static

public class Demo02 {
        public static void main(String[] args){
                int i=99;
                int j=88;
                int result=new Demo02().Max(i,j);
                System.out.println(result);
        }
        public  int Max(int a,int b){
                return a>b?a:b;
        }
}

可以看到第二个代码块中,子方法Max是没有static修饰的,然后主方法调用Max方法的时候需要先new一个主类的对象,然后才能调用Max子方法。

可以这么理解:

  • 有static的时候,子方法Max是属于整个Demo02类的,所以不用实例化一个对象来调用。
  • 没有static的时候,子方法Max是属于Demo02类创建出来的对象的,只有把对象创建出来才能调用这个子方法。

上面两个程序输出的结果是一样的,所以主方法想直接调用主类中的方法就加上static关键字,这个也是比较推荐的写法。

方法的重载

Java的方法比C语言的函数又多了点不一样的东西。就是Java的方法可以重载。

Java的方法重载的概念和C++里的函数重载的概念是一样的。

重载的特点:

  • 函数名相同
  • 返回值可以不同,也可以相同
  • 形参列表不同
    • 参数的类型不同
    • 参数的个数不同
    • 参数的顺序不同

直接看代码例子:

public class Demo03 {
        public static void main(String[] args){
                //方法重载
                int num1=Max(5,3,8);
                int num2=Max(5,4);
                System.out.println("第一个结果: "+num1+"\t第二个结果: "+num2);
                int num3=Max(8,8,8);
                System.out.println("第三个结果: "+num3);
        }
        public static int Max(int i,int j){
                return i>j?i:j;
        }
        public static int Max(int i,int j,int k){
                if(i>j){
                        if(j>k){
                                return i;
                        }
                        else if(k>i) {
                                return k;
                        }
                }
                else{
                        if(i>k){
                                return j;
                        }
                        else if(k>j){
                                return k;
                        }
                }
                return i;
        }
}
第一个结果: 8	第二个结果: 5
第三个结果: 8

上面的两个Max子方法就是重载的方法。

如果不写重载:

public class Demo03 {
        public static void main(String[] args){
                //方法重载
                int num1=Fun(5,3,8);
                int num2=Max(5,4);
                System.out.println("第一个结果: "+num1+"\t第二个结果: "+num2);
                int num3=Fun(8,8,8);
                System.out.println("第三个结果: "+num3);
        }
        public static int Max(int i,int j){
                return i>j?i:j;
        }
        public static int Fun(int i,int j,int k){
                if(i>j){
                        if(j>k){
                                return i;
                        }
                        else if(k>i) {
                                return k;
                        }
                }
                else{
                        if(i>k){
                                return j;
                        }
                        else if(k>j){
                                return k;
                        }
                }
                return i;
        }
}

结果也是一样的,但是如果有重载的话,就显得比较清楚,同样是做返回最大值的功能,那就直接把这些方法全部写成Max的子方法,让别人一看就知道是求最大值的方法。如果一个求两个数的最大值是Max,另一个求三个数的最大值是Fun当然是可以的,但是如果有10个以上呢?如果不用重载的话就不太好管理了。

Java提供的很多库中也存有方法重载的使用,就像是打印的方法

System.out.println();

这个方法也是重载的。不过,这个没有什么说服力,因为C语言中的printf()函数也可以,但是C语言的printf()函数不是重载。C语言没有重载的概念。还是上面的Max方法的例子比较有说服力。C语言中如果存在同名函数是会报错的,而Java和C++就不会,因为他们有重载的概念。

public class Demo{    
	public static void main(String[] args){        	
		System.out.println("Hello");        
		System.out.println(99);        
		System.out.println(3.14);        
		System.out.println(2.5f);        
		System.out.println('A');
    }
 }

输出结果:

Hello
99
3.14
2.5
A

注意点:在方法重载中,没有强制的说一定要传入的参数类型和返回的参数类型一样,但为了防止混淆,一般返回值类型和传入的要相同。这个就看开发者的经验了,在写C语言的时候正常情况下也不会把返回值类型搞混淆。

方法的递归

递归的概念其实在C语言中也已经有了。递归就是方法自己调用自己的过程。当然有时也可以是两个子方法来回调用对方。

递归的特点:

  • 子方法自己调用自己
  • 递归要有终止递归的条件,不能让程序进入死循环
  • Java因为存在重载的概念,有时候递归的终止条件会单独写成一个方法
  • 递归的子方法看起来比较的简明,但是消耗的内存大

递归的简单例子:

计算1~100的累加结果:

public class Demo04 {        
	public static void main(String[] args){                
		//计算1~100的累加值                
		int result=Fun(100);                
		System.out.println(result);        
		}        
		public static int Fun(int i){                
			if(i<=1){			//递归的终止条件                        
				return 1;                
			}                
			return i+Fun(i-1);
		}
}

输出结果:

5050

图解:
在这里插入图片描述

黑色的箭头表示子方法在调用子方法,红色的表示算到最后Fun(1)的时候返回1,然后依次把累加之后的结果返回的最开始的Fun(100)。最后把最终的结果赋值给result。然后把result输出,结果就是5050。

Cukor丘克主页

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-09-18 10:27:04  更:2021-09-18 10:29:20 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 2:49:33-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码