JavaSE--方法

一、方法

1、方法的定义

// 语法格式
[修饰符列表] 返回值类型 方法名(形式参数列表){
方法体;
// return;终止当前方法
}

 

注意:方法写完之后需要调用去使用,不调用没法用

  1)修饰符列表:

    不是必选的

  2)返回值类型:

    可以是任何数据类型(基本数据类型和引用数据类型)

    返回值:一般是指一个方法执行结束之后的结果,通常返回一个数据,返回值实际给的是调用者

      当一个方法执行结束不返回任何值时,需要写void关键字,表示无返回值,但是也可以写return

  3)注意:

    如果返回值类型不是void,那么在方法执行结束后必须使用  return 值;  ,来完成值的返回
            如果没有return中编译器会报错,只要return执行,当前方法必然结束

  4)方法名

    方法名要见名知意,规则首字母消息,后面每个单词首字母大写

  5)形式参数列表:

    每一个参数都是局部变量,方法结束后内存释放

    个数:0-n个,使用逗号隔开  (int x,int y,double z,String s)

  6)可变长度参数列表:

    a)语法

// 类型后面三个点,一定是三个点
类型...

    b)概述

      b1.可变长度参数要求的参数个数是:0到N个。

      b2.可变长度参数在参数列表中必须在最后一个位置上,而且可变长度参数只能有1个

      b3.可变长度参数可以当做一个数组来看待

public class ArgsTest {
public static void main(String[] args) {
m();
m(10);
m(10, 20);
m2(100);
m2(200, "abc");
m2(200, "abc", "def");
m3("ab", "de", "kk", "ff");
String[] strs = {"a","b","c"};
// 也可以传1个数组
m3(strs);
}
public static void m(int... args){
System.out.println("m方法执行了!");
}
// 报错
//public static void m2(int... args2, String... args1){}
// 必须在最后,只能有1个。
public static void m2(int a, String... args1){
}
public static void m3(String... args){
//args有length属性,说明args是一个数组!
// 可以将可变长度参数当做一个数组来看。
for(int i = 0; i < args.length; i++){
System.out.println(args[i]);
}
}
}

  7)方法体

    方法体中编写业务逻辑代码,遵循自上而下的顺序执行,

    需要数据,数据来源就是形参

 

2、方法的调用

  压栈:方法只有在调用的时候才会在栈中分配空间,并且调用时就压栈

  弹栈:方法执行结束之后,该方法所在的空间就会释放,此时会发生弹栈

  方法调用叫做压栈,方法结束叫做弹栈

/*
方法必须调用才能使用
1、调用:
类名.方法名(实际参数列表);
2、实参和形参的数据类型必须一一对应
*/
public class MethodTest02{
public static void main(String[] args){
// 调用方法
// (10,2)叫做实际参数列表 实参
// 接收方法的返回值:使用变量来接收,
// 也可以不接收,但是不接收没有意义啊
int result = MethodTest02.divide(10,2);
System.out.println(result);
// 自动类型转换 可以
double jieguo = MethodTest02.divide(10,2);
// 注意::对于没有返回值的方法,变量不可以接收
}
public static int divide(int x,int y){
T.print();// 调用方法不一定非要在main方法中,不要把main方法特殊化
return x / y;
}
}
class T{
public static void print(){
System.out.println("hello");
}
}
/*
调用方法时,什么时候类名可以省略
a方法调用b方法,a和b方法在同一个类的时候,“类名.”可以省略
不在同一个类中的时候,不可以省略
*/
public class MethodTest04{
public static void main(String[] args){
MethodTest04.print();
// “类名.”可以省略不写,因为在同一个类中
print();
// 跨类调用的时候不可以省略
MyClass.print1();
}
public static void print(){
System.out.println("hello");
}
}
// 类2
class MyClass{
public static void print1(){
System.out.println("hello");
}
public static void print2(){
System.out.println("hello");
}
}

3、实际参数列表

/*
实际参数列表
*/
public class MethodTest03{
public static void main(String[] args){
// 使用小容量
byte b1 = 10;
byte b2 = 20;
// 把小容量传进去是可以的
int result = MethodTest03.divide(10,20);
}
public static int divide(int x,int y){
return x / y;
}
}

4、break;和return;语句的区别

/*
break终止最近的循环
return终止当前方法
*/
public class MethodTest05{
public static void main(String[] args){
for(int i = 0;i < 10;i++){
if(i == 5){
// break;// 终止for循环
return;// 终止当前方法,不是一个级别 也就是hello不会输出
}
System.out.println(i);
}
System.out.println("hello");
}
}

 

二、方法的重载overload

1、方法重载机制:

  功能相似的,可以让方法名相同,更加易于代码的编写

  注意:重载不能随便用,如果两个功能压根不相干,之间根本没有关系,此时使用重载机制,会导致编码更麻烦。无法进行功能的区分

2、java语言中,怎么进行方法区分:

  首先java编译器会通过方法名进行区分,方法名相同下,会通过方法的参数类型区分

  注意:方法重载和方法的返回值类型以及修饰符无关

public calss OverloadTest01{
public static void main(String[] args){
System.out.println(sum(10,20));
System.out.println(sum(10L,20L));
System.out.println(sum(10.0,20.0));
}
// 计算int类型数据求和
public static int sum(int a,int b){
return a + b;
}
// 计算long类型数据求和
public static long sum(long a,long b){
return a + b;
}
// 计算double类型数据求和
public static double sum(double a,double b){
return a + b;
}
}

3、什么时候代码发生重载

  条件1:在同一个类中

  条件2:方法名相同

  条件3:参数列表不同:参数的个数、类型、顺序不同都算不同

 

三、方法的递归

1、方法递归

  方法自己调用自己,就是方法递归

  当递归时,程序没有结束条件,一定会发生栈内存溢出错误

  所以 :递归必须要有结束条件

public class RecursionTest01{
public static void main(String[] args){
doSome();
}
public static void doSome(){
System.out.println("doSome");
}
}

 

posted @   洛小依ovo  阅读(7)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示