方法相关内容

基础

  1. 方法其实就是若干语句的功能集合

  2. 定义方法的完整格式:

    1
    2
    3
    4
    修饰符 返回值类型 方法名称(参数类型 参数名称,...){
    方法体;
    return 返回值;
    }
    • 修饰符:public private protected static final abstract
    • 返回值类型:也就是方法最终产生的数据结果是什么类型
    • 方法名称:方法的名字,规则和变量名一样,小驼峰式
    • 参数类型:进入方法的数据是什么类型
    • 参数名称:进入方法的数据对应的变量名称 参数如果有多个,采用逗号分隔
    • 方法体:方法需要做的事情,若干行代码
    • return:两个作用,停止当前方法 将后面的返回值还给调用处
    • 返回值:方法执行完后最终产生的数据结果 类型必须和方法定义中的返回值类型相一致
  3. 方法调用的三种方式:

    1. 单独调用:方法名称(参数);
    2. 打印调用:system.out.println(方法名称(参数));
    3. 赋值调用:数据类型 变量名称 = 方法名称(参数);
  4. 注意事项:

    • 方法应该定义在类当中,但是不能在方法中再定义方法,不能嵌套
  • 方法定义的前后顺序无所谓
    • 任何数据类型都可以作为方法的参数类型,或者返回值类型,数组作为参数传递的是地址值,同样的数组作为返回值返回的是数组的地址值
    • 方法定义之后,自己不会执行的,如果希望执行,一定要进行方法的调用
    • 如果方法有返回值,那么必须写上”return 返回值” ,不能没有
    • return 后面的返回值数据,必须和方法的返回值类型,对应起来
    • 对于一个void没有返回值的方法,不能写return后面的返回值,只能写return;
    • 对于无返回值的方法,方法中最后一行的return可以省略不写
    • 一个方法当中可以有多个return语句,但是必须保证同时只有一个会被执行到,两个return不能连写

重载

  1. 对于功能类似的方法来说,因为参数列表不一样,却需要记住那么多不同方法的名称,太麻烦,方法的重载就是为了解决这个问题 方法的重载(Overload),多个方法的名称一样,但是参数列表不一样,只需要记住一个方法的名称就可以实现类似的多个方法的名称 在调用输出语句的时候,println方法其实就是进行了多种数据类型的重载形式
  2. 方法重载和下列因素有关:
    1. 参数个数不同
    2. 参数类型不同
    3. 参数的多类型顺序不同
  3. 方法重载和下列因素无关
    1. 与参数的名称无关
    2. 与方法的返回值类型无关

构造方法

  1. 构造方法是专门用来创建对象的方法,当我们通过关键字new来创建对象时,其实就是在调用构造方法

    1
    2
    3
    4
    格式:
    修饰符 类名称(参数类型 参数名称){
    方法体;
    }
  2. 注意事项:

    1. 构造方法的名称必须和所在类的类名称完全相同
    2. 构造方法不用写返回值类型,连void都不用写
    3. 构造方法不能return一个具体的返回值
    4. 构造方法,类似于常规的方法,同样可以被public、protected、private这三个关键词修饰,但是构造方法不能有返回值。我们人为地将构造方法声明为private,这样其他的类就不能直接调用该类生成新的对象,也就避免了同一个类被反复创建的情况,这种情况,该类只有一个对象实例
    5. 如果没有编写任何构造方法,那么编译器将会默认赠送一个构造方法,没有参数,方法体什么都不做(空参构造方法)
    6. 一旦编写了至少一个构造方法,那么编译器将不再赠送
    7. 构造方法也可以重载(方法名相同,参数列表不同)
  3. 在继承关系中,父子类构造方法的访问特点:(子类必须调用父类构造,不写则赠送super(),写了则用写的指定的super调用,super只能有一个,还必须是第一个)

    1. 子类构造方法当中有一个默认隐含的”super()”调用,所以一定是先调用父类构造,后执行子类构造
    2. 子类构造可以通过super关键字来调用父类重载构造
    3. super的父类构造调用,必须是子类构造方法的第一个语句,不能一个子类构造调用多次super构造
  4. 非静态方法和构造方法是随着对象绑定在一起的,只有创建了对象,才能调用非静态方法和构造方法。先执行静态方法,再是非静态方法,最后是构造方法。

重写

  1. 在继承关系中,方法的名称一样,参数列表也一样
  2. 创建的是子类对象,则优先使用子类方法
  3. 注意事项:
    1. @Override:写在方法的前面,用来检测该方法是不是一个正确的重写方法,但是不写该注解,并不影响重写
    2. 重写方法不能比被重写方法限制有更严格的访问级别
    3. 参数列表必须与被重写方法的参数列表相同
    4. 重写方法不能抛出新的异常或者比被重写方法声明的检查异常更广的检查异常,但是可以抛出更少,更有限或者不抛出异常(这种限制只是针对检查异常,至于运行时异常及其子类不在这个限制当中)
    5. 不能重写被标识为final的方法
    6. 如果一个方法不能被继承,则不能重写它,如private方法
    7. 子类不能用静态方法重写父类的非静态方法
    8. 子类不能用非静态方法,重写父类的静态方法
    9. 子类方法的返回值必须小于等于父类方法的返回值范围,等于的时候是重写,小于的时候就是子类自己特有的方法了,并不是重写
Thanks!