JavaSE基础知识(5)—面向对象(5.2类的成员之二:方法)

一、概念

理解:用于描述类或对象的行为或功能,定义在类体中,属于类的成员

二、好处

1、提高代码的重用性和维护性
2、从调用层面上,调用者不用关心方法的内部实现细节,调用比较简单。只需要知道:
  叫什么(方法名)
  干什么(方法功能)

三、定义语法 ★

[修饰符] 返回类型 方法名(参数列表){
  方法体
}

四、方法五要素

 1、修饰符

特点:可选
public 公共的,任意类都可以调用该方法

2、返回类型

说明:某些行为或功能执行结束后需要返回给调用方一个具体的值,则将值的类型标注成返回类型,如果行为或功能执行结束后没有返回值,则返回类型写成void即可
特点:
  ①一个方法至多有一个返回值,要求返回值的类型和返回类型一致或兼容
  ②返回类型可以为任意类型,包含基本或引用
  ③如果方法有返回值,则方法体中要求必须有return语句,而且return的值的类型必须和返回类型一致或兼容
   如果方法没有返回值,则方法体不用加return语句,如果非加,则写成 return;
  ④如果方法有返回值,则必须保证所有路径下都可以return值;
    public int m(int i){
      if(i>5)
        return 10;
      return 99;
    }

3、方法名

遵循标识符的命名规则和规范(同变量的规范):见名知义,且遵循驼峰命名法

4、参数列表

说明:某些方法的执行需要调用方传递源数据,否则无法执行。我们把这些源数据称为参数
特点:
  ①参数可以为多个,语法如下:
    (类型 参数名1,类型 参数名1,...,类型 参数名n)
  ②参数类型可以为任意类型,包含基本类型或引用类型
  ③参数的本质就是一个局部变量,也必须赋值后才能使用,但这个赋值一般是隐式赋值的(传参时)
  ④方法定义时的参数称为形式参数,简称形参;方法调用时的参数称为实际参数,简称实参
    形参和实参的类型、个数必须一致,参数名无要求

5、方法体

可以包含0条或任意多条逻辑语句。
形式:输入、输出、变量、运算、分支、循环、方法调用

五、调用语法 ★

1、本类内方法调用:方法名(实参列表);
2、跨类中方法调用:对象或类名.方法名(实参列表);
注意:

如果待调用的方法有返回值,则最好用变量接受或做其他处理
如果待调用的方法没有返回值,则不能当成表达式做任何处理

六、调用机制 √

每次方法调用,都伴随“入栈”的操作
每次调用结束,都伴随“出栈”的操作

七、方法的传参 ★

特点:
java中方法按“值”传递。
  参数类型为基本类型,则值代表元素内容,传递是一个拷贝,形参的改变不影响实参
  参数类型为引用类型,则值代表地址,传递是一个地址(引用)形参的改变影响实参
示例:
  public static void main(String[] args){
    int[] arr = {1,2,3};
    update(arr);
    print(arr);//1 2 3
  }
  public static void update(int[] arr){
    arr = new int[3];
    arr[0]=100;
    print(arr);//100 0 0
  }
  public static void print(int[] arr){
    for(int i=0;i<arr.length;i++){
      System.out.println(arr[i]);

    }
  }

八、方法的重载

1、定义:java中提供了一种机制,允许同一个类中多个同名但参数列表不同的方法存在
2、好处:
  ①解决了起名问题
  ②解决了记名麻烦问题
3要求:

同一个类中
方法名必须相同
参数列表必须不同(参数类型、个数或顺序至少有一样不同)
返回类型无要求
修饰符无要求

九、可变参数的方法

1、理解:jdk5.0出现的新特性。java中允许将一个类中同名,同参数类型、同返回的多个方法抽取成一个可变参数的方法

2、语法:

  修饰符 返回类型 方法名(参数类型...参数名){
    //参数当做数组类型去使用
  }

3、好处:

  ①提高重用性
  ②提高维护性和扩展性

4、特点:

①可变参数的实参允许0个或多个参数
②可变参数的实参允许数组类型
③可变参数可以和普通类型的参数同时出现在一个形参列表,但要求可变参数必须放在最后
一个形参列表中最多有一个可变参数
⑤可变参数的方法、普通类型参数的方法实现了重载(注:不可以和同一类型的数组参数方法构成重载),传参时:
  遵循:先找一致类型——>兼容类型——>可变参数
    A a = new A();
    a.m(10);//执行方法1
    pubic class A{
      public void m(int a){ }   //方法1
      public void m(double a){ }  //方法2
      public void m(int... a){}//方法3
    }

猜你喜欢

转载自www.cnblogs.com/truthseeking/p/9508240.html