Java方法

一、方法的定义

方法包含一个方法头和一个方法体。下面是一个方法的所有部分:

  • 修饰符:修饰符,这是可选的,告诉编译器如何调用该方法。定义了该方法的访问类型。
  • 返回值类型 :方法可能会返回值。returnValueType 是方法返回值的数据类型。有些方法执行所需的操作,但没有返回值。在这种情况下,returnValueType 是关键字void
  • 方法名:是方法的实际名称。方法名和参数表共同构成方法签名。
  • 参数类型:参数像是一个占位符。当方法被调用时,传递值给参数。这个值被称为实参或变量。参数列表是指方法的参数类型、顺序和参数的个数。参数是可选的,方法可以不包含任何参数。
  • 方法体:方法体包含具体的语句,定义该方法的功能。

举例:

public static int max(int num1, int num2) {
  return num1 > num2 ? num1 : num2;
}
//含有形参,且是int方法返回值,必有return

 

二、方法的分类

public class Demo{
    
//1. 最简单的无参方法
    void sum1(){
        System.out.println("加法操作"); 
    }
//2. 拥有修饰符的无参方法 
    public static void sum2(){ 
        System.out.println("加法操作");
    }
//3. 有参数,无返回值
    public static void sum3(int a,int b){ 
        System.out.println("两数相加结果"+a+b); 
    }
//4.有参,有返回值
    public static int sum4(int a,int b){
        return a+b;
    }
//5.无参数,有返回值
    public static int sum5(){
        int x=20; 
        int y=28; 
        int z=x+y; 
        return z; 
    }
}

2.1 void——无返回值的调用(1)

public class Demo{

    public static void main(String[] args) {
        //实参
        int a = 10;
        int b = 20;
        swap(a,b);

        System.out.println("main函数中的a=" + a);//10
        System.out.println("main函数中的b=" + b);//20
    }
    //分析:需要参数(两个参数)
    // 不需要返回值
    // 形参:没有携带值的变量,多个变量之间使用逗号分隔

    public static void swap(int a,int b){
        int temp = 0;
        temp = a;
        a = b ;
        b = temp ;

        System.out.println("swap函数中的a=" + a); //20
        System.out.println("swap函数中的b=" + b); //10
    }
}
/*
swap函数中的a=20
swap函数中的b=10
main函数中的a=10
main函数中的b=20
*/

 2.2 void——有返回值的调用(2)

public class Demo {
    public static void main(String[] args) {
        show();
    }

/*1,在void的函数中使用return,类似于break或者continue,直接结束整个方法,一般情况可以
不用return */
    public static void show() {
        System.out.println("Hello World!");
        int x = 10;
        if (x > 5) {
            return;//结束方法 }
        }
        // 不能执行
        System.out.println("no");
    }
}

 2.3 非void——有返回值的调用(1)

public class Demo {
    public static void main(String[] args) {
       int result = add(10,20);
       System.out.println(result);
    }

/*2在一个有返回值的函数中必须有return,return后面必须跟一个具体的数值,而且数值
的类型和返回值类型必须保持一致,最后结束整个方法,并且将返回值携带给调用者 */
    public static int add(int a ,int b) {
        System.out.println("Hello World!");
       int c = a+b;
       return c;
    }
}

2.4 非void——有返回值的调用(2)

public class Demo {
    public static void main(String[] args) {
        int result = compare(34,67);
        System.out.println(result);
    }

/*3,如果一个自定义的函数有返回值,并且在方法中遇到了分支结构,在每
一个分支后面都需要出现一个return,相当于Switch里面的break语句 */
    public static int compare(int a,int b) {
        if(a>b){
            return a;
        }
        else if(a<b){
            return b;
        }
        else{
            return 0;
        }
    }
}

三、自动类型转换

左侧的数据类型可以提升为右侧的任何数据类型:

byte → short → int → long
short → int → long
int → long → float → double
float → double
long → float → double

//1.函数返回值小转大—>自动类型转换


//2.函数实参小转大—>自动类型转换
public class A {
	public static void main(String[] args){
		double x = sum(1, 2);//double是大容量。int是小容量。自动类型转换。int--->double
		byte a = 1, b = 1;
		int m = sum(a, b); // (b1,b2)是实参。自动类型转换。byte--->int
        System.out.println(x);
	}

	public static int sum(int a, int b){
		int y = a + b;
		return y;
	}
}


//3.函数必须具有返回值(除void类型)
	public static int m(){
		boolean flag = true; //编译器不负责运行程序,编译器只讲道理。
		// 对于编译器来说,编译器只知道flag变量是boolean类型
		// 编译器会认为flag有可能是false,有可能是true
		if(flag){
			// 编译器觉得:以下这行代码可能会执行,当然也可能不会执行
			// 编译器为了确保程序不出现任何异常,所以编译器说:缺少返回语句
			return 1;
		}
	}
//修改正确:
	public static int m(){
		boolean flag = true;
		if(flag){
			return 1;
		}else{
			return 0;
		}
	}

 

四、方法重载

  • 同一个类中,方法名字相同,参数列表不同,则是方法重载。
  • 参数列表的不同包括,参数个数不同,参数数据类型不同,参数顺序不同
  • 方法的重载与方法的修饰符和返回值没有任何关系
//1、参数数量
add(int, int)
add(int, int, int)
//2、参数的数据类型
add(int, int)
add(int, float)
//3、参数的数据类型顺序
add(int, float)
add(float, int)
//4、像这种就不是重载,方法的返回类型不同将引发编译错误
double max(double num1, double num2) 
int max(int num1, int num2) 

 

五、 finalize() 方法

Java 允许定义这样的方法,它在对象被垃圾收集器析构(回收)之前调用,这个方法叫做 finalize( ),它用来清除回收对象。

例如,你可以使用 finalize() 来确保一个对象打开的文件被关闭了。

在 finalize() 方法里,你必须指定在对象销毁时候要执行的操作。

public class FinalizationDemo {  
  public static void main(String[] args) {  
    Cake c1 = new Cake(1);  
    Cake c2 = new Cake(2);  
    Cake c3 = new Cake(3);  
      
    c2 = c3 = null;  
    System.gc(); //调用Java垃圾收集器
  }  
}  
 
class Cake extends Object {  
  private int id;  
  public Cake(int id) {  
    this.id = id;  
    System.out.println("Cake Object " + id + "is created");  
  }  
    
  protected void finalize() throws java.lang.Throwable {  
    super.finalize();  
    System.out.println("Cake Object " + id + "is disposed");  
  }  
}
/*
$ javac FinalizationDemo.java 
$ java FinalizationDemo
Cake Object 1is created
Cake Object 2is created
Cake Object 3is created
Cake Object 3is disposed
Cake Object 2is disposed
*/

参考资料:菜鸟教程 - 学的不仅是技术,更是梦想! (runoob.com)

参考文献1:详解:Java的重载方法与示例_java重载,实现以下功能计算两个双精度数之和 要求通过实参调用这种方法,并输出求-CSDN博客

参考文献1:Java方法详解(Java基础)_java ((( ),())-CSDN博客

参考文献1:java方法(超详细!)_java中方法怎么写-CSDN博客

  • 24
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

S0fM

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值