小黄鸭系列java基础知识 | java中的方法

前言

今天我们要探讨的问题,是java基础语法的最后一个问题,也就是java中的方法,今天主要从以下几个方面来介绍:

  1. 方法是什么(定义)
  2. 方法的分类
  3. 方法的调用

应该说,学完今天的知识,你至少应该看懂java代码的大概结构,能够写一些简单的java程序,来处理一些简单的问题,如果还没达到这个高度,那你可要好好学习,多动手练习,我记得我那会开始学习的时候,就是靠着一本二手的java教材,然后看着课后练习题,不断敲代码,然后才入门的,刚开始的时候好多概念也不知道,也没看视频教程,走了好多弯路,所以我觉得你也可以,加油吧!

正文

什么是方法

在最开始我们讲到java的基本结构的时候,我们说方法是某个对象的行为,比如对于人这个class

class 人 {
  	名字;
    电话;
    年龄;
    吃饭() {
        
    }
    睡觉() {
        
    }
    打豆豆() {
        
    }
}

吃饭、睡觉、打豆豆都是人这个class的行为,也就是方法,现在我们要对方法进行扩展和更精确的定义。从实际应用开发的角度来说,方法就是一系列操作的集合,但这一系列组合操作要尽可能相关,因为实际应用开发的原则是一个方法只做一件事。

当然你也可以在一个方法中做多件事,但是这样不够优雅,对于后期维护极其不方便,你能想象一个方法里面有上百行,甚至上千行的代码吗?我们的项目中还真有,后期修改那个业务的时候,我想死的心都有,因为那已经是经过N手的代码,没有注释,业务逻辑只能靠debug和自己猜,所以各位小伙伴一定要养成编写优雅代码的好习惯,这样才会你好我好大家好。

方法的创建语法是这样的:

访问控制符 特殊修饰符 返回值类型 方法名(参数类型 参数1名称, 参数类型 参数2名称...) {
    // 方法内部的操作
    // 返回语句,对于返回值类型为void的语句,返回语句为【return ;】,当然返回语句可以省略
    return  类型为返回值类型的变量 
}

其中,访问控制符就是我们上周说的,主要有privatepublicprotected、默认,访问控制权限和修饰class类似:

访问修饰符 本类 同包 子类 其他
private × × ×
默认 × ×
protected ×
public

无修饰符的方法在实际开发中应用很少(反正我没见过),需要注意的是接口中的方法并非是无修饰符的,它的方法默认修饰符是public,只是是隐式的。

特殊修饰符指的是为了一些特殊需求而加的修饰符,只要有finalstaticabstract,这里不做过多说明,后面在面向对象的继承部分会详细说明。

返回值类型指的是方法执行完成要返回的结果的类型,如果当前方法不需要返回结果,返回结果类型就是void。返回值类型,除了基本类型外,还可以是任意引用类型,比如StringObject

方法名就是我们定义的操作集合的名称,从代码规范的角度来说,名称要尽可能反映该方法集合要做的事情,比如吃东西的方法集合,为了让其他人看了也知道,那我起的名字就是eat

参数是方法内部要用到的变量,但是这些变量必须要方法外部传入,比如我定义了一个eat方法:

public void eat(String food) {
        System.out.println("吃" + food);
    }

现在我的参数是食物,但如果我还想再增加一个参数,增加餐具,你这样定义方法就可以:

public void eat(String food, String eatTool) {
        System.out.println("用" + eatTool + "吃" + food);
    }

如果需要更多参数,你自行添加即可。参数的次序没有任何要求,可以自己调整,但是参数名称一定要尽可能真实表达参数的意义,这样对于方法的调用方,他就可以更清楚地传值。

方法的分类

方法的分类简单来讲有三类:

  1. 类(静态)方法:static特殊修饰符修饰的方法,比如main方法就是最典型的静态方法:

     public static void main(String[] args) {
            Person person = new Person();
            person.age = 20;
            System.out.println(person.age);
            double pi = Math.PI;
            float pif = (float) pi;
            System.out.println(pi);
            System.out.println(pif);
        }
    
  2. 实例方法:顾名思义,实例方法,就是要先创建方法所在的类的实例,然后才能调用的方法。这类方法最常见,也是实际开发中应用最广的方法,我们上面定义的eat方法就是此类

  3. 构造方法:这类方法是在创建某个类的对象是调用的,和上面两个不同的是,这个方法没有返回值类型,不可以加特殊修饰符,该方法默认返回类的实例对象:

    public class You {
        public String name;
        public int age;
        public String gender;
    
        public You() {
            // 方法操作
            System.out.println("you被创建");
        }
        You(String name) {
            // 方法操作
            System.out.println("you被创建,you的名字" + name);
        }
        private You(int age) {
            // 方法操作
            System.out.println("you被创建,you的年龄" + age);
        }
        protected You(String name, int age) {
            // 方法操作
            System.out.println("you被创建,you的名字" + name + "you的年龄" + age
    }
    

    上面的这些方法,都是you的构造方法,需要注意的是,构造方法的名字必须和类名保持一致(区分大小写),构造方法也可以说它是静态方法,只是它的static是隐式的,至于为什么,我们在方法的调用再来探讨。

方法的调用

方法也叫函数,但是在java中我们习惯叫他方法,方法的调用就是方法的使用,一个方法如何使用,首先取决于它的类型(它是哪种方法),所以这里我们也分三块来讲:

静态方法的调用

静态方法可以被实例方法、构造方法和静态方法调用,调用方法也很简单:

类名.方法名(方法入参);
// 如果是在同一个类中调用,可以省略类名:
方法名(方法入参)

示例代码:

	public static void testSatatic(String name) {
        System.out.println("我是一个静态方法,我被调用了,name=" + name);
    }
	/**
  	* 在静态方法中调用静态方法
  	*/
	public static void main(String[] args) {
        String name = "静态方法";
       You.testSatatic(name);
    }
	/**
	* 在实例方法中调用
	*/
    public void test(String name) {
        System.out.println("我是一个实例方法,我被调用了,name=" + name);
        testSatatic("实例方法");
    }
	/**
	* 在构造方法中调用
	*/
	public You() {
        // 方法操作
        System.out.println("you被创建");
        testSatatic("构造方法");
    }

实例方法的调用

我们前面说了,实例方法必须先创建类的实例,才能调用实例方法,所以实例方法的调用是这样的:

类名 实例名 = new 构造方法();
实例名.实例方法名(方法入参)
// 如果是在同一个类中调用,可以省区实例化操作:
实例方法名(方法入参)

示例代码:

	public void test(String name) {
        System.out.println("我是一个实例方法,我被调用了,name=" + name);
    }
	/**
 	 * 在静态方法中调用实例方法
  	*/ 
    public static void main(String[] args) {
       You you = new You();
       you.test("静态方法");
    }
   /**
     * 在实例方法中调用
     */ 
    public void test2() {
        System.out.println("我是一个实例方法");
        test("实例方法");
    }
	/**
     * 在构造方法中调用
     */
	public You() {
        // 方法操作
        System.out.println("you被创建");
        test("构造方法");
    }

构造方法的调用

构造方法的调用也很简单:

类名 实例名 = new 构造方法();

示例代码:

	public You() {
        // 方法操作
        System.out.println("you被创建");
    }
    /**
      * 在静态方法中调用
      */
    public static void main(String[] args) {
       You you = new You();
    }
	/**
      * 在实例方法中调用
      */
	public void test2() {
        System.out.println("我是一个实例方法");
        You you = new You();
    }
	/**
      * 在构造方法中调用
      */
	public You(String name) {
        // 方法操作
        System.out.println("you被创建,you的名字" + name);
        You you = new You();
    }
	/**
	  * 如果是同一个类的构造方法之间的调用,也可以这样写:
	  */
	public You(String name) {
        // 调用无参构造方法
        this();
        // 方法操作
        System.out.println("you被创建,you的名字" + name);        
    }

这里需要注意的是,在构造方法中通过this调用自己的构造方法时,调用操作必须写在第一行,否则会报编译错误:

结语

java方法部分的内容到这里就结束了,当然方法这里还有很多知识点没有讲到:方法的重写、重载、方法传参等,内容还有很多,后面等面向对象部分的内容讲解完后,我们再来进一步剖析。希望看完今天内容的小伙伴,能对方法有个更清晰的认知和了解,我刚才翻了下之前自己的学习笔记,我发现我那会对方法这块认识的还不够,所以希望正在学习的你,能少走弯路,最后附上我之前的笔记,大家看下是不是认识不够:

实例方法可以调用该类中的实例方法或者类方法,类方法只能调用该类的类方法或者静态方法,不能调用实例方法(静态方法只能调用静态方法,不能调用非静态方法)

方法声明中用关键字static修饰的均为类方法或者静态方法,不用static修饰的方法称为实例方法;

最后,放上最近刚开源的一个小仓库,里面有我日常开发整理形成的工具类,目前确实详细的说明文档,后续会逐步补充,如果只是参考使用的话,代码的注释应该已经可以了。

项目地址:

https://github.com/Syske/syske-common-utils

项目目录:

原文地址:https://www.cnblogs.com/caoleiCoding/p/14455121.html