Java方法的定义与调用基础及其扩展

Java 方法

学习方法前建议熟悉我的这一篇文章:

类、对象与方法如何使用(什么是类?什么是对象?什么是方法?) - 小简博客 (janyork.com)https://blog.janyork.com/index.php/archives/447/

常见的方法

System.out.println;

在前面几个章节中我们经常使用到 System.out.println,那么它是什么呢?

我们来分析分析这个输出语句

  • println 是一个方法
  • System 是系统类
  • out 是标准输出对象

这句话的用法是调用系统类 System 中的标准输出对象 out 中的方法 println

这里只是让大家了解一下,不必去深入刨析这一句话

那么什么是方法呢?

按套路来,先看看理论讲解

Java方法是语句的集合,它们在一起执行一个功能

  • 方法是解决一类问题的步骤的有序组合
  • 方法包含于类或对象中
  • 方法在程序中被创建,在其他地方被引用

没看懂?,没有关系,这里这是给你了解一下这个理论,后面我们实际演示就可以理解了!

方法的优点

我们现在方法还是一个模糊的概念,但是我们得先讲解它的优点与好处,这样才知道什么情况该使用方法,目的是什么!

  • 使程序变得更简短而清晰
  • 有利于程序维护
  • 可以提高程序开发的效率
  • 提高了代码的重用性。

为什么使用方法会让程序很简洁呢?
因为方法全都写在里面,一个类里面也可以有很多方法,我们只需要在它的主类(程序入口类,即有main方法的类调用就可以

为什么使用方法可以提高开发效率呢?
因为方法是可以重复利用的,写一个方法,要用时就可以调用,可以反反复复调用

方法基本的命名规则

方法的名字的第一个单词应以小写字母作为开头后面的单词则用大写字母开头写,不使用连接符。例如:addPerson。他有一个名字,叫驼峰命名法

方法如何创建(定义)

语法:

修饰符 返回值类型 方法名(参数类型 参数名){
    ...
    方法体
    ...
    return 返回值;
}

这就是定义一个方法的基本语法,我们一个个点解析

  • 先看看修饰符,这个不必详细了解,只要知道修饰符基本都是public就可以,我们就直接public开头
  • 返回值类型,我们这里就要提到两个关键词,void与return,这两个可以说时竞争关系,怎么说呢?有void没return,有return没void,不能共存,我们return一般在有参方法里面使用
  • 方法名,方法名自己定义,但是按规范来,命名是小写开头,并且使用驼峰命名法!
  • 带参数,我们后面有一个(),这个括号里面可以存放参数,格式是这样的,比如我要带一个int类型参数,参数名叫num:(int num)
  • 我们后面的{}的用法就不需要说了吧!在{}里面,我们在里面放方法体,其实这个方法体就是代码块,不用管他

理解图示

提示:如果方法没有返回值,那么返回值类型默认是void ,如果有返回值,那么必须用return 返回值,并且该值的数据类型必须是定义方法的数据类型

方法的无参与有参

无参方法:

我们知道,方法是分为无参有参
我们先来讲讲无参方法,那么什么是无参方法呢?如何创建(构造)无参方法呢?
我们看看无参方法的样式:

public void one() {
    System.out.println("HelloWorld!"); //定义方法
}

这个方法里面是一个输出语句,外面是一个访问修饰符,加一个void返回类型,方法名是one,后面的()内没有任何参数,这就是一个典型的无参方法
说白了,就是()里面没有参数就是无参

有参方法:

我们上面说了,无参就是()里面不带参数的方法,那么我想有参也就好理解了,所谓有参,就是括号里面带参数的方法
当然,我们的重点不是有参与无参是什么,而是怎么使用它!
无参方法使用很简单,创建对象,然后用对象调用方法就可以
其实有参方法的调用也一样,我们先看两给代码:

 Demo类:

public class Demo {
    public void number(){
        System.out.println("无参");
    }
    public int num(int a,int b){
        System.out.println(a+b);
        return a+b;
    }
}

Dome2(程序入口):

public class Demo2 {
    public static void main(String[] args) {
//        创建对象
        Demo one = new Demo();
//        调用无参方法
        one.number();
//        调用有参方法
        one.num(1,3);
    }
}

看看这里,我们创建了两个类,一个Demo类,里面存放了两个方法,一个无参一个有参
然后就是Demo2类,这个是main方法入口,我们在这个类里面创建对象(one),并且利用对象调用了两个方法
看看有参方法的调用,实际上除了括号里面,与无参方法调用并无区别


那调用有参方法的()里面为什么要放参数呢?
我们来看看这个有参方法,它的返回类型不是void,也就是我我们需要return返回一个数值

看看我们的有参方法的构成:

public int num(int a,int b){}

这个方法,没有void()里面带了两个空的 int 类型参数,也就是a与b,并且方法定义的类型是int型,这个地方注意一下,这个地方指定值的类型不对()里面造成影响,但是它对后面返回return有一些,它限制return返回类型,我们下面详解,先讲解有参方法

这个方法的()里面的值是对应对象调用方法的()里面的数值,我们看看我们的对象调用:

 one.num(1,3);

这个()里面两个值,1和3分别对应对应上面的int a与b,中间用 ,隔开,也就是说,上面()里面有多少个值,那对象的()里面就可以放多少个值
我们这里是int,如果方法是String,就得带上双引号,其他的类型,同理可知 

无参有参总结

有参数:小括号当中有内容,当一个方法需要一些数据条件,就是有参数,例如两个数字相乘,必须知道这两个数字各自是多少,才能相加。
无参数:小括号当中留空,一个方法不需要任何数据条件,自己就能独立完成任务,就是无参。例如定义一个方法,打印固定10次HelloWorld。

代码运行图鉴

 

 形参与实参

什么是形参什么是实参呢?
形参 :就是形式参数,用于定义方法的时候使用的参数,是用来接收调用者传递的参数的。 形参只有在方法被调用的时候,虚拟机才会分配内存单元,在方法调用结束之后便会释放所分配的内存单元。 因此,形参只在方法内部有效,所以针对引用对象的改动也无法影响到方法外。
实参 :就是实际参数,用于调用时传递给方法的参数。实参在传递给别的方法之前是要被预先赋值的。
比如:n个,一个,这个n个是一个不知道的参数,我们称为形参,而一个是一个具体的参数,参数值是1,所以”1个“是实参
再举个例子,就像我们上面的方法()里面的int a与int b,这是形参,但是对象调用方法时()里面的1,3是具体的参数,所以是实参

void关键词详解

著我们上面的那个无参方法是用void返回的,那么void到底是什么意思呢?
其实void就是无返回的意思,你也可以理解成无需返回,也就是说这个方法里面没有要返回的参数,或者这个方法里面的代码不需要返回
这个了解一下,只要知道它怎么使用就可以

return关键词的作用

我们上面提到了return关键词,它的作用是返回一个值,那他具体是怎么返回的呢?
return的常用作用有以下两种:

  1. 返回方法指定类型的值(这个值总是确定的),也可以是对象
  2. 结束方法,终止“return;”后面代码的执行

第二个就像break一样,直接停止运行下面的代码


我们主要是看他第一种,怎么返回的呢?我们来看看他怎么返回的
我们定义一个String类型的方法:

public string functionTest(){

    String a = "abc";

    return a;

}

这里没有输出语句,但是它使用return返回了一个a,并且a有一个String值为abc 我们调用一下

public class Test{    
    public static void main(){    
        string result = functionTest();    
        System.out.println(result);    
    }   
}

注意:我这里是方法与入口main方法都写在了同一个类中,所以调用方法不需要对象直接:方法名()
我们将functionTest这个方法赋值给result,这时,functionTest方法里面用return返回的a就被赋值到result了
然后,输出result,输出结果是:abc

方法重载

方法重载其实很简单,不要去书面研究了解,我们直接看代码

代码:

Demo类:

public class Demo {
    public void loop(String a){
        System.out.println(a);
    }
    public void loop(int a){
        System.out.println(a);
    }
    public void loop(char a){
        System.out.println(a);
    }
}

Demo2类:

public class Demo2 {
    public static void main(String[] args) {
        Demo jan = new Demo();
        jan.loop(1);
        jan.loop("字符串");
        jan.loop('a');
    }
}

这里,我们先看Demo类里面的代码,这里有三个方法,注意,三个方法名字相同,都是loop,()里面的变量名也一样,都是a
但是,注意,我们的方法的()里面的值的类型不同,三个方法分别是int、String、char类型,这样就构成了方法重载
说的简单一点,就是方法名相同,返回类型相同()里面变量名相同,就只有()里面的变量类型不同注意:或者也可以返回值类型相同,里面的变量个数不同
这样,这三个方法就构成了重载,不要去过于关注重载是什么,我们来看看运行就知到了
我这里是创建一个对象,对象调用了loop这个方法,我这里调用三次是为了更好对比

    jan.loop(1);
    jan.loop("字符串");
    jan.loop('a');

 注意:我们这上面是一种,我们看看下面,当变量类型相同,里面的变量个数不同也可以构成方法重载哦!

    public void loop(char a){
        System.out.println(a);
    }
    public void loop(char a,char b){
        System.out.println(a);
    }

当你再()里输入字符串类类型(要有“ ”符号),他就会是自动使用我们那三个方法中的字符串类型方法 如果还不懂,可以复制我代码试试,就明白了!

方法中变量作用域(范围)

方法里面定义的变量是局部变量,局部变量的作用范围只能再这个变量所在方法里面,不能用于其他方法与类!

构造方法

  • 当一个对象被创建时候,构造方法用来初始化该对象。构造方法和它所在类的名字相同,但构造方法没有返回值。
  • 通常会使用构造方法给一个类的实例变量赋初值,或者执行其它必要的步骤来创建一个完整的对象。
  • 不管你是否自定义构造方法,所有的类都有构造方法,因为Java会自动提供了一个默认构造方法,默认构造方法的访问修饰符和类的访问修饰符相同(类为public构造函数也为public;类改为protected构造函数也改为protected)。
  • 一旦你定义了自己的构造方法,默认构造方法就会失效。   

先看看上面了解一下构造方法,那很多人问:以前创建方法的时候为什么没有要构造方法呢?

因为我们的Java会自动提供一些基本的默认的构造方法,一旦你没构造方法,就会自动使用Java提供的构造方法,如果你自己构造了方法,那就会使用你创建的构造方法
那么,构造方法有什么用呢?

嘿嘿,这个后面再讲!/偷笑

猜你喜欢

转载自blog.csdn.net/qq_60750453/article/details/120893023