什么是方法
生活中使用的工具,螺丝刀,锤子,扳手。
1. 复用,重复使用
2. 提高效率
开发中,存在代码需要复用的情况。虽然循环可以解决一部分代码复用的问题,但是无法从根本上解决需要多处使用的情况。
这里需要用到方法
代码中使用循环解决复用的问题
1. 代码冗余!!!
2. 维护性极差!!!
3. 阅读性极差!!!
// main方法 Java中主方法格式
public static void main(String[] args) {
}
/*
public static : 不要问!!!固定格式
void: 返回值类型 void 表示当前方法没有返回值
返回值类型是当前方法运行完成之后对方法外的一个返回数据
main: 方法名,方法名是一个名字,要求符合命名规范
小驼峰命名法,见名知意,动宾结构
(形式参数列表): 当前方法运行所需的外来数据,这里需要告知调用者数据类型
{}: 方法体
方法格式:
public static 返回值类型 方法名(形式参数列表) {
方法体
}
public static returnType methodName(Arguments) {
Method Body
}
*/
第一次自定义实现方法
需求:
使用方法展示一个Hello World
方法分析:
固定格式: public static 不要问
返回值类型:
这里不需要返回值类型,采用void
方法名:
printHelloWorld
见名知意,动宾结构,小驼峰命名法
形式参数列表:
当前方法没有任何的外来数据需求,不需要参数
public static void printHelloWorld()
方法实现过程
/**
* 文档注释
* 1. 对于方法的功能解释
* 2. 方法所需参数介绍
* 3. 方法返回值类型介绍和含义
* 4. 方法处理过程中出现的异常
*/
/**
* 展示打印到控制台一个Hello World
*/
public static void printHelloWorld() {
// 方法体
System.out.println("Hello World");
}
自定义方法调用过程
1. 在需要调用方法的位置,使用方法名调用方法
2. 方法和变量的最大区别
方法后面一定有小括号!!!
/* 自定义实现第一个方法 */
class Method1 {
public static void main(String[] args) {
// 调用方法一定要有小括号,如果没有参数,小括号内没有内容
printHelloWorld();
printHelloWorld();
printHelloWorld();
printHelloWorld();
printHelloWorld();
}
/**
* 展示打印到控制台一个Hello World
*/
public static void printHelloWorld() {
// 方法体
System.out.println("烤羊排~~");
}
}
自定义方法小总结
1. 目前我们有且只考虑在main方法中来调用其他方法
2. main方法是目前我们现在程序的唯一入门,如果想要哪一个代码执行,哪一个方法被调用,都需要经过main方法完成
3. 方法书写一定要注意代码格式
4. 方法位置在class以内,其他方法之外
无形式参数无返回值的方法
/*
需求:
在控制台打印展示10个烤羊排!!!
方法分析:
固定格式:
public static 不要问
返回值类型:
在控制台展示输出,这里不需要返回值
void
方法名:
BBQ 烧烤
形式参数列表:
当前方法没有一个对于外来数据的需求
() 没有参数
【方法声明】
public static void BBQ()
*/
/**
* 展示10次烧烤内容
*/
public static void BBQ() {
for (int i = 1; i <= 10; i++) {
System.out.println("烤羊肉串...");
}
}
========================================================================
/* 无形式参数无返回值类型的方法 */
class Method2 {
public static void main(String[] args) {
// 方法调用一定有小括号
BBQ();
}
// 注释颜色
/**
* 展示10次烧烤内容
*/
public static void BBQ() {
for (int i = 1; i <= 10; i++) {
System.out.println("烤羊排...");
}
}
}
有参数无返回值的方法
/*
需求:
展示用户告知的int类型数据
用户调用该方法,传入一个int类型,在控制台打印展示int类型数据
方法分析:
固定格式:
public static 不要问
返回值类型:
展示打印一个int类型数据,不需要返回值!!!
void
方法名:
printIntNumber
小驼峰命名法,见名知意,动宾结构
形式参数列表:
该方法需要展示的数据是用户传入的,而且是int类型
(int num) 参数声明
int 是参数的数据类型
num 是参数的名字,可以认为是方法内的一个变量,可以供方法使用
【方法声明】
public static void printIntNumber(int num)
*/
/*
文档注释细节
1. @param num 是告知编译器,这里在解释方法参数num
2. 方法功能概述和之后的参数解释,返回值解释需要空一行,标准格式代码
3. 文档注释可以帮助我们后期更好的阅读代码
*/
/**
* 展示用户传入的int类型数据
*
* @param num 这里需要一个int类型数据
*/
public static void printIntNumber(int num) {
// 用户调用该方法时,会将数据存储于num中,展示num中的数据就OK了
System.out.println(num);
}
有参数无返回值方法调用
/* 有参数无返回值方法演示 */
class Method3 {
public static void main(String[] args) {
// 当前方法需要参数,这里调用时调用者必须给他参数
printIntNumber(10);
}
/**
* 展示用户传入的int类型数据
*
* @param num 这里需要一个int类型数据
*/
public static void printIntNumber(int num) {
// 用户调用该方法时,会将数据存储于num中,展示num中的数据就OK了
System.out.println(num);
}
}
- 方法如果需要参数,必须在调用过程中给予对应的参数
- 方法如果没有给定参数,报错!!!编译不通过
- 方法如果给定的实际参数,数据类型不符合形式参数列表要求的数据类型,报错!!!编译不通过,数据类型一致化问题!!!
- 方法如果在调用的过程中给定的参数个数,不是方法所预期的参数个数,报错!!!编译不通过
返回值【难点】
1.生活中的返回值:
餐馆吃饭
烤羊排 138一份 --> 声明
付款 138RMB --> 给予实际参数
厨师做好烤羊排之后,让服务员给你端上来 --> 厨师完成操作,给予的返回值
ATM机取钱
取钱 1000RMB --> 调用方法
输入密码 --> 给予实际参数
密码正确,ATM给你1000RMB --> 操作完成,给予的返回值
去餐厅吃饭,端上来的菜品
去ATM取钱,ATM给我们的钱
以上都是返回值的一个生活解释
2.代码中的返回值:
return 返回作用:
- 结束当前方法的执行
- 返回return之后的数据,到方法之外,要求返回值的数据和方法声明位置告知调用者的
返回值数据类型一致 【数据类型一致化】
3.调用一个带返回值的方法
class Method1 {
public static void main(String[] args) {
/*
调用一个带有返回值的方法
返回值怎么用???
赋值,运算,打印
方法的返回值返回到之外,调用者决定当前结果的
使用方式。
*/
int ret = 0;
System.out.println("调用方法之前 ret : " + ret);
ret = giveMeFive();
System.out.println("直接调用方法:" + giveMeFive());
System.out.println("调用方法之后 ret : " + ret);
}
/**
* 该方法返回一个5,一个整数
*
* @return 返回一个整数5
*/
public static int giveMeFive() {
return 5;
}
}
- 返回值使用的关键字 return关键字
- 带有返回值的方法,需要在文档注释中加入@return 告知调用者方法返回值的类型,含义…
- 方法返回值类型和方法体内返回数据的类型必须一致,如果不一致报错,【数据类型一致化】
- 方法的返回值处理方式,由程序员自己决定,因为我们现在只会sout,但是不代表只有sout。后期数据的处理方式有很多,传递,展示,发送,保存。。。。
优化方法:
class Method4 {
public static void main(String[] args) {
int max = maxOfNumber(30, 20);
System.out.println("Max : " + max);
}
/**
* 该方法是返回两个整数里的较大那个
*
* @param num1 int类型数据
* @param num2 int类型数据
* @return 两个int类型数据中较大的一个,如果相同返回任意一个
*/
public static int maxOfNumber(int num1, int num2) {
/*
当前方法体是存在两个return,而在开发中return的使用是需要有一些
注意事项
尽量减少return的使用 增强阅读性,代码逻辑更加明确
if (num1 > num2) {
return num1;
} else {
return num2;
}
*/
/*
当前写法是没有问题,而且使用到假设的思想,可以提供代码的
阅读性,并且简化代码逻辑,减少return使用
int max = num1;
if (max < num2) {
max = num2;
}
return max;
*/
/*
三目运算符/条件运算符
条件 ? true处理方式 : false处理方式;
简化版,功能缺失版 if else结构
建议:
在一些简单的逻辑中可以使用,提高一定的效率
*/
return num1 > num2 ? num1 : num2;
}
}
优化代码思想:
class Method5 {
public static void main(String[] args) {
double min = minOfNumber(4.5, 3.8);
System.out.println(min);
boolean ret = isMyUpper('Z');
System.out.println(ret);
}
/**
* 返回两个浮点数里的较小那个
*
* @param num1 double类型数据
* @param num2 double类型数据
* @return 两个浮点数里的较小那个
*/
public static double minOfNumber(double num1, double num2) {
return num1 < num2 ? num1 : num2;
}
/**
* 封装一个方法,来判断一个字符是否是大写字母
* 如果是,返回true,否则返回false
*
* @param c 字符类型数据
* @return 如果字符是大写字母返回true,否则返回false
*/
public static boolean isMyUpper(char c) {
return c >= 'A' && c <= 'Z';
}
}
局部变量:
class Method9 {
public static void main(String[] args) {
int num = 5;
test(num);
// 5 为什么是5
System.out.println(num);
}
public static void test(int num) {
num = 10;
}
}
局部变量概念
除class大括号之外,其他大括号以内的变量都可以认为是一个局部变量。
方法大括号以内,if分支结构以内,switch case结构大括号以内,循环大括号以内
以上大括号以内全部都是【局部变量】
作用域
当前局部变量能够使用的范围在什么地方
局部变量有且只能在当前所处大括号以内使用,超出范围无法使用
生存期
局部变量的生存期也在大括号以内,和作用域一致。