• 小黄鸭系列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
    

    项目目录:

  • 相关阅读:
    【转】Intel Atom手机处理器“上窜下跳”
    神奇HVXC的MOS 分
    Skype 将支持 WebRTC 标准
    一篇文章算市值
    算法经典趣题三色旗
    Java基础(2)Java三大版本/体系
    一天一个 Linux 命令(27):mkfs 命令
    Java基础(1)Java特性及优势
    一天一个 Linux 命令(26):fdisk 命令
    关于Java中的整数类型值比较的疑问
  • 原文地址:https://www.cnblogs.com/caoleiCoding/p/14455121.html
Copyright © 2020-2023  润新知