Java方法(动力节点)

本文详细介绍了Java编程中的方法概念、语法、调用规则,包括方法的返回值、参数、局部与成员变量,以及方法重载和递归的原理与注意事项。同时讨论了包机制和import语句的使用,强调了在实际开发中的最佳实践。
摘要由CSDN通过智能技术生成

在这里插入图片描述

方法 Method

方法的本质就是一段可以重复使用的代码,而且每个方法都是独立的,可以独立的完成某项任务;

  • 注意:方法只定义不调用是不会执行的;

  • 方法的定义与调用:

    1. 方法的定义。
      1.1 语法格式:
      [修饰符列表] 返回值类型 方法名(形式参数列表){
      方法体;
      }
      //[ ]中的修饰符列表不是必须存在的!
      1.2 修饰符列表:目前修饰符列表这一块,统一编写public static。后面讲。
      1.3 返回值类型
      可以是java语言中任何一种数据类型。包括基本数据类型,引用数据类型。
      例如:byte short int long float double boolean char String…
      如果方法执行结束的时候没有返回任何数据给调用者,返回值类型写:void。
      切记:不能空着不写。
      返回值类型是String表示:方法结束的时候会返回一个字符串给调用者。
      返回值类型是void表示:方法结束的时候不返回任何数据给调用者。
      1.4 当返回值类型不是void的时候,方法在结束的时候必须使用“return 值;”语句来完成数据的返回。
      1.5 return语句有两种写法:
      第一种:return 值;
      第二种:return;
      不管是哪一种,只要return语句执行,方法必然结束。
      1.6 当返回值类型是void的时候:
      不能编写"return 值;" 这样的语句。
      但是可以编写"return;"语句,主要是用来终止方法的执行。也可以不编写“return;”,这个要看具体的业务。
      1.7 当调用一个返回值类型不是void的方法时,方法结束的时候会返回值,这个值可以采用变量接收。注意变量的类型。
      变量的类型一定要和返回值类型一致。或者能够自动类型转换,或者强制类型转换。
      1.8 方法执行结束有返回值,但是对于调用者来说,可以选择接收,也可以选择不接收。
      1.9 方法名:只要是合法的标识符即可。首字母小写,后面每个单词首字母大写。(一般方法都是一个行为,所以方法名一般都是动词。)
      方法名最好是反映了这个方法所实现的功能。
      deleteUser
      saveUser
      login
      logout

    1.10 形式参数列表一般简称为:形参。形参个数是:0-N个。多个的话,使用逗号隔开。
    形参是局部变量。形参中起决定性作用的是:形参的类型。形参名随意。

    1.11 方法体:任何一个方法都有一个方法体。方法体用大括号括起来:
    在大括号中编写“java语句;”
    并且方法体中的代码有执行顺序,遵循自上而下。

    1. 方法的调用。
      当这个方法修饰符列表有static关键字的时候:
      调用的语法格式:
      类名.方法名(实际参数列表);

    实际参数列表简称为:实参。

    实参和形参列表必须一一对应:
    类型要一一对应。
    个数要一一对应。
    当调用函数和被调用函数在同一个方法中时,可以省略类名,反之不可以。
    return 语句不是写了就可以,还要保证100%的执行,也就是一定能够完成值的返回!
    在同一个域(就是有效范围)中:return语句后面的代码是无法执行的。请不要写。

public static int m1(){
int i = 100;
if(i > 99){//i的域就是m1函数内!
return 1;
}else{
return 0;
}
}

变量的分类:

  • 局部变量 方法中的变量就是局部变量,注意形参列表里的变量作用域就是其所在方法,所以形参是局部变量
  • 成员变量 类体中,方法外的变量叫成员变量。
    在这里插入图片描述
    通过运用方法思想编写一个登陆方法。
import java.util.Scanner;
public class LoginTest{
public static void main(String[] args){
	login();
	}
	//下面要写一个登陆方法,通过判断用户名和密码来确定是否能够登陆。用户名:张三 密码:1234
	/** 
	*@param 无参数,只要被调用即可;
	*@author zcw
	*/
	public static void login(){
		while(true){
			Scanner sc = new Scanner(System.in);
		System.out.println("请输入用户名:");
		String username = sc.next();		
		System.out.println("请输入,密码:");
		String password = sc.next();
		
		boolean res = check(username,password);
		if(res){
			System.out.println("登陆成功");
			return;
		}
		}
	}
	/*核对用户名和密码是否正确,因为可能多次输入错误,为了简化判
	断流程,所以给登陆密码检查也写了个代码。
	*/
	public static boolean check(String username,String password){
		if(username.equals("张三")&&password.equals("1234")){
			return true;
		}else{
			return false;
		}
	}
	
}

执行结果在这里插入图片描述

方法重载Overload

在这里插入图片描述

当一个程序满足怎样的条件时,代码就构成了方法重载呢?
条件1:在同一个类中。
条件2:方法名一致。
条件3:形式参数列表不同:
类型不同算不同
顺序不同算不同说的是数据类型的顺序不同。
个数不同算不同
注意:形参中重要的是形参的数据类型,因此

// 以下这两个方法没有构成方法重载,属于方法重复定义了。语法错误,编译器报错。
	public static void doSome(int a, int b){
	
	}
	public static void doSome(int x, int y){
	
	}

方法重载是编译阶段的机制还是运行阶段的机制?
方法重载机制是编译阶段的机制。
在编译阶段已经完成了方法的绑定。
在编译阶段已经确定了要调用哪个方法了。
什么情况下我们考虑使用方法重载呢?
在以后的开发中,在一个类中,如果两个方法的功能相似,建议将方法名定义为同一个名字。
此时就使用了方法重载机制。

运算器的实现就可以借助方法重载机制,比如实现加法:

public class OverloadTest02{
	public static void main(String[] args){
		// 调用方法
		sum(10, 20);
		sum(10L, 20L);
		sum(3.0, 2.0);
	}

	public static void sum(int a, int b){
		int c = a + b;
		System.out.println(a + "+" + b + "=" + c);
	}

	public static void sum(long a, long b){
		long c = a + b;
		System.out.println(a + "+" + b + "=" + c);
	}

	public static void sum(double a, double b){
		double c = a + b;
		System.out.println(a + "+" + b + "=" + c);
	}

}

方法递归 Recursion

方法的递归调用:

  1. 什么是方法的递归调用?
    方法自己调用自己。

  2. 递归调用如果没有结束条件的话,会出现栈内存溢出错误:
    java.lang.StackOverflowError

  3. 所有的递归调用必须要有结束条件。

  4. 在实际开发中,使用递归调用的时候,即使有的时候,结束条件是存在的,并且结束条件也是合法的。但仍然会发生栈内存溢出错误,这可能是因为递归太深,栈内存不够了导致的。所以递归调用一般是不建议使用的。只有在不使用递归调用时这个问题解决不了的情况下,才建议使用递归调用。
    原则:能用循环尽量使用循环。
    因为递归调用太耗费栈内存。

  5. 在实际开发中,如果因为递归调用发生了栈内存溢出错误,你该怎么办?
    首先可以调整栈内存的大小。扩大栈内存。
    如果扩大之后,运行一段时间还是出现了栈内存溢出错误。
    可能是因为递归结束条件不对。需要进行代码的修改。

兔子繁殖问题又称为斐波那契数列:
分析过程:
在这里插入图片描述代码如下:

/*加入有一对兔子,从出生后第三个月起,每个月都生一对兔子,
小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,请问第n个月后的兔子有多少对。*/
import java.util.Scanner;
public class RecursionTest{
	public static void main(String[] args){
	Scanner sc = new Scanner(System.in);
	System.out.println("请输入月份:");
	int month = sc.nextInt();
	int sum = sum(month);
	System.out.println("第" + month + "月一共有" + sum + "对兔子");
	}
	//sum方法,用来求n月后兔子的总对数
	public static int sum(int month){
		if(month == 1||month  ==2){
			return 1;
		}else{
			return sum(month-1)+sum(month-2);
		}
	}
}

package

package只能在代码第一行的含义:所有被编译器执行的代码中,排首行。如果有注释的话,注释在第一行也没关系。

在这里插入图片描述
在这里插入图片描述package语法:

  1. package是包机制,有什么用?
    便于管理。不同的类放在不同的包下。好维护。

  2. package语句只能写1行,并且只能写在java源码的第一行。

  3. 怎么定义包?
    package 包名;

  4. 定义了包之后,怎么带包编译?
    javac -d . PackageTest01.java
    语法:javac -d 生成目录 源文件路径

    当然,也可以不带包编译,编译之后,可以手动创建目录,这种方式比较麻烦。

  5. 一旦定义了package之后,有了包之后,怎么运行java程序呢?
    重点强调:有了package之后,完整的类名是带包名的。所以运行的时候一定要添加包名:
    java org.apache.struts.PackageTest02

  6. package命名规范:

    • 所有的包名都是小写。
    • 包名的命名规范:
      公司域名倒序 + 项目名 + 模块名 + 功能名;
    • 例如:com.powernode.oa.empmgt.service;
  7. import语句只能出现在package和class定义之间。

  8. import语句可以编写多个。

  9. 什么时候必须使用import语句?
    A类中使用B类,当A和B类不在同一个包下。并且B类也不属于java.lang包,必须使用import引入。

  10. import支持模糊导入。

  11. import还支持静态导入:
    不常用。了解即可。
    在这里插入图片描述IDEA安装视频链接IDEA安装视频链接
    在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Alice要11点睡

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

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

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

打赏作者

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

抵扣说明:

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

余额充值