java方法(超详细!)

一、前言

  1. 程序开始执行的时候是先执行main方法。因为main方法是一个入口。
  2. 在java语言中所有的方法体中的代码都必须遵循自上而下的顺序依次逐行执行。
  3. main方法不需要程序员手动调用,是由JVM调用的。但是除了main方法之外其他的方法,都需要程序员手动调用
  4. 方法只有调用的时候才会执行,方法不调用是不会执行的。
  5. 方法定义在类体当中。方法定义的先后顺序没有关系
  6. 方法中的变量都属于局部变量。方法结束之后,局部变量占用的内存会自动释放。

二、方法怎么定义,语法机制是什么?

1.语法格式

	[修饰符列表] 返回值类型 方法名(形式参数列表){
				方法体; 
	}

注意:

  1. [] 符号叫做中括号,以上中括号[ ]里面的内容表示不是必须的,是可选的。
  2. 方法体由Java语句构成。
  3. 方法定义之后需要去调用,不调用是不会执行的

2.关于修饰符列表

3.关于返回值类型

  1. 第一:返回值类型可以是任何类型,只要是java中合法的数据类型就行,数据类型包括基本数据类型引用数据类型,也就是说返回值类型可以是:byte short int long float double boolean char String…
  2. 第二:什么是返回值?
    返回值一般指的是一个方法执行结束之后的结果。
    结果通常是一个数据,所以被称为“值”,而且还叫“返回值”。
    方法就是为了完成某个特定的功能,方法结束之后大部分情况下都是有一个结果的,而体现结果的一般都是数据。数据得有类型。这就是返回值类型。
	main{
		// 调用a方法
		a();..如果a方法执行结束之后有返回值,这个返回值返回给main了。
	}

方法执行结束之后的返回值实际上是给调用者了。谁调用就返回给谁。

  1. 第三:当一个方法执行结束不返回任何值的时候,返回值 类型也不能空白,必须写上void关键字。所以void表示该方法执行结束后不返回任何结果
  2. 第四:如果返回值类型“不是void”,那么你在方法体执行结束的时候必须使用"return 值;"这样的语句来完成“值”的返回,如果没有“return 值;”这样的语句,那么编译器会报错。

return 值; 这样的语句作用是什么?作用是“返回值”,返回方法的执行结果

  1. 第五:只要有“return”关键字的语句执行,当前方法必然结束

return只要执行,当前所在的方法结束,记住:不是整个程序结束。

  1. 第六:如果返回值类型是void,那么在方法体当中不能有“return 值;”这样的语句。但是可以有“return;”语句。这个语句“return;”的作用就是用来终止当前 方法的。
  2. 第七:除了void之外,剩下的都必须有“return 值;”这样的语句。

4.方法名

方法名要见名知意。(驼峰命名方式)
方法名在标识符命名规范当中,要求首字母小写,后面每个单词首字母大写

5.形式参数列表

  1. 简称:形参
  2. 注意:形式参数列表中的每一个参数都是“局部变量”,方法结束之后内存释放
  3. 形参的个数是:0 ~ N个。
  4. 形参的数据类型起决定性作用,形参对应的变量名是随意的。(方法重载会涉及!)
	public static void sumInt(){}
	public static void sumInt(int x){}
	public static void sumInt(int x, int y){}
	public static void sum(int a, int b, double d, String s){}
	
	形参有多个的话使用“逗号,”隔开。逗号是英文的。

6.方法体

由Java语句构成。java语句以“;”结尾。
方法体当中编写的是业务逻辑代码,完成某个特定功能。
在方法体中的代码遵循自上而下的顺序依次逐行执行。
在方法体中处理业务逻辑代码的时候需要数据,数据来源就是这些形参。

三、方法的调用

	类名.方法名(实际参数列表);

实参和形参的类型必须一一对应,另外个数也要一一对应。

1.在方法调用的时候,什么时候“类名.”是可以省略的。什么时候不能省略?

a()方法调用b()方法的时候,a和b方法都在同一个类中,“类名.”可以省略
如果不在同一个类中“类名.”不能省略。

四、break;语句和return;语句和 System.exit();有什么区别?

  • break;用来终止switch和离它最近的循环。
  • return;用来终止离它最近的一个方法。
  • System.exit();用来结束程序运行。

五、注意点

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
	}

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

3.函数必须百分百返回值(除void类型)

	public static int m(){
		boolean flag = true; //编译器不负责运行程序,编译器只讲道理。
		// 对于编译器来说,编译器只知道flag变量是boolean类型
		// 编译器会认为flag有可能是false,有可能是true
		if(flag){
			// 编译器觉得:以下这行代码可能会执行,当然也可能不会执行
			// 编译器为了确保程序不出现任何异常,所以编译器说:缺少返回语句
			return 1;
		}
	}
	
----------------------------修正--------------------------------------------
	// 第一种方案:带有else分支的可以保证一定会有一个分支执行。
	public static int m(){
		boolean flag = true;
		if(flag){
			return 1;
		}else{
			return 0;
		}
	}
	
	// 第二种方案:该方案实际上是方案1的变形。
	// return语句一旦执行,所在的方法就会结束。
	public static int m(){
		boolean flag = true;
		if(flag){
			return 1;
		}
		return 0;
	}

六、补充

1.函数没有加static

public class A{
	public static void main(String[] args){
		a(1, 2, 3, 4,5,6);//编译器报错
        practice.a(1,2);//编译器报错
        new practice().a(1,2); //正确
        
        test.b();//编译器报错
        new test().b();//正确
	}

	public void T(){
		System.out.println("T方法")
	}
}

class B{
		public void Y(){
		System.out.println("Y方法")
	}
}

2.java可变参数(参数类型… 参数名)

2.1语法格式

	[修饰符列表] 返回值类型 方法名(形式参数列表, 返回值类型 ... 变量名){
				方法体; 
	}

eg.

    public static int b(int a, int b, int ...AA){
        for (int i = 0; i < AA.length; i++){
            ;
        }
        return 1;
    }


    public static int b(int ...AA){
        for (int i = 0; i < AA.length; i++){
            ;
        }
        return 1;
    }
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值