欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > > 文章正文

JavaSE 05 方法,javase05方法

来源: javaer 分享于  点击 21601 次 点评:190

JavaSE 05 方法,javase05方法


1、方法的概念

方法,办法:解决一个问题的代码集合。

Java中往往将一些常见的步骤打包封装在里面,对外仅仅暴露一个名字,这就是方法。

狭义的方法:一个功能模块。比如求和、求最值、查找、排序等。
广义的方法:一个行为。比如人:跑,吃饭,睡觉等。

2、方法的好处

⑴ 减少代码的重复,提高了重用性。
⑵ 使用者仅仅需要记住方法名,而不用关心方法的具体的实现细节,比较简单。

3、方法的声明

语法:


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

方法的要素:


⑴ 修饰符 <可选项>


可以为:public static 公共的静态的

⑵ 返回类型


① 返回类型实际就是返回结果的类型,返回类型要与返回结果的类型一致或兼容。
② 返回类型可以是基本数据类型也可以是引用数据类型。
③ 如果方法没有返回结果,则返回类型写 void。
如果方法有返回结果,则返回类型对应返回结果的类型,且方法体必须有 return 语句。
④ 一个方法最多只有一个返回值。

⑶ 方法名


见名知义,遵循和变量名一样的命名规则和规范。
命名规则:只能包含字母、数字、下划线和$,不能用数字开头。不能是关键字或保留字。
命名规范:遵循驼峰命名法。

⑷ 参数列表


参数:方法执行时,可能需要调用者传递一些值给方法,这些值就是参数。
① 参数的数量可以为多个或0个。
② 每个参数之间用 ,(逗号) 隔开,且语法规则为:
参数类型 参数名1, 参数类型 参数名2, 参数类型 参数名3 …
③ 参数类型可以为任意类型,包括基本数据类型和引用数据类型。
④ 方法定义时的参数称为形式参数(形参);方法调用时的参数称为实际参数(实参)。
⑤ 形参和实参的数据类型和顺序必须一一对应,参数的名字可以不一样。

⑸ 方法体


可以为任意的逻辑语句,包含输入、输出、变量的声明和赋值、分支、循环等。
注意:① 方法中不能嵌套方法。
② 方法需要定义在类中,属于类的特征。

按照方法有无返回值、有无参数,可以将方法分为4类:


⑴无返回值、无参数:


修饰符 void 方法名(){ // 这行也叫方法签名
方法体
}

⑵无返回值、有参数:


修饰符 void 方法名(参数列表){
方法体
}

⑶有返回值、无参数:


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

⑷有返回值、有参数:


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

注意:① 方法中不能嵌套方法。
② 方法中可以调用方法。
③ 方法如果有返回值,则在方法体的最后一句必须为return 返回值; 否则报错。
④ 方法如果没有返回值,则方法体的最后一句不用加return。如果非加,则可以加 return;
⑤ 方法的功能是唯一的。
⑥ 功能性的方法,除了打印界面这些方法,都没有输入或输出语句。这样可以提高代码的重用性。

4、方法的调用

⑴ 调用本类中的方法


语法:
① 没有返回值的方法调用:
方法名(实参);
② 有返回值的方法调用:
数据类型 变量名 = 方法名(实参);

⑵ 调用其他类中的方法

语法:
① 没有返回值的方法的调用:
类名.方法名(实参);
② 有返回值的方法的调用:
数据类型 变量名 = 类名.方法名(实参);

⑶ 总结


① 方法随着类的加载,而被存储在方法区中。方法区中储存着方法的描述信息,包括方法名和参数类型,但是不包括大括号里(方法体)的内容
② 当方法被调用时,方法入栈。也就是在栈中开辟对应的空间
③ 当方法执行完毕时,方法出栈。也就是随之销毁,里面的局部变量也会随之释放空间

5、方法的传参【面试题】

方法的传参:将实参传递给形参的过程,也就是将实际参数赋值给形式参数的过程。
Java中支持的是按值传递

基本数据类型的参数传递



当参数为基本数据类型时,传递的是值(拷贝或元素的内容)。形参的改变不会影响实参。

引用数据类型的参数传递



当参数为引用数据类型时,传递的是地址值(引用)。形参的改变会影响实参。

6、方法重载

Java中允许在同一个类中,存在多个参数列表不同,但方法名相同的方法。

优点:⑴ 解决了起名麻烦的问题。⑵ 调用者不需要记住太多的方法名。

              同一个类中   方法名     参数列表   返回值类型   修饰符
重载(Overload)   是的     必须相同    必须不同     无要求     无要求

注:参数列表的数据类型参数的个数参数的顺序,至少有一样不同。

7、可变参数的方法

【JDK5.0的新特性】

将一个类中,多个方法名相同,参数列表的数据类型相同,但参数个数不同的方法,封装成一个方法,称为可变参数的方法。

其优点就是提高了代码的重用性。

语法:
修饰符 返回值类型 方法名(参数的数据类型… 参数名){
     // 使用时,将参数名看作为一个数组的名字
}

调用: 方法名(实参值);
方法名(实参值1, 实参值2, 实参值3);
方法名(形参类型的数组);

示例:
public static void main(String[] args) {
System.out.println(“最小值:” + getMin(23, 22, 10, -9, 30, 28)); // 最小值:-9
System.out.println(“最小值:” + getMin(16)); // 最小值:16

    int[] nums = {19, 23, 11, 70, 68};
    System.out.println("数组中的最小值:" + getMin(nums)); // 数组中的最小值:11 【可变参数的方法的实参可以为数组】

    myMethod("abc", "dnf"); // 方法被调用
    myMethod(); // 方法被调用 【可变参数的方法的实参个数可以为0】

    myMethod2(10, "a"); // 含有普通参数类型的可变参数方法
  }

public static int getMin(int... args) {
  int min = args[0];

  for (int i = 0; i < args.length; i++) {
    if (min > args[i]) {
      min = args[i];
    }
  }
  return min;
}

public static void myMethod(String... args) {
  System.out.println("方法被调用");
}

public static void myMethod2(int i, String... args) {
  System.out.println("含有普通参数类型的可变参数方法");

}

注意:⑴ 可变参数的方法的形参既包含可变参数又包含普通类型参数时,必须把可变参数放在最后。
⑵ 一个方法中只能有一个可变参数。
⑶ 可变参数的方法的实参类型可以为对应形参的数据类型的数组。
⑷ 可变参数的方法的实参的个数可以为0个,前提为可变参数方法没有其他的普通类型的形参,否则会报错:【实际参数列表和形式参数列表长度不同】

8、Arrays类的常用方法

⑴ sort 【排序】


语法:sort(数组名);
返回值:void

⑵ binarySearch 【查找】


语法:binarySearch(数组名, 要查找的数组元素);
返回值:int 【如果没有找到就返回一个负数】
注意:使用此方法时,需要传递一个排过序的数组。

⑶ fill 【填充】


语法:fill(数组名, 要填充的数组元素);
返回值:void

⑷ equals 【比较】


语法:equals(数组名1, 数组名2);
返回值:boolean
注意:此方法是比较连个数组中的元素的内容是否相同。

⑸ copyOf 【复制】


语法:copyOf(要复制的数组, 新数组的长度);
返回值:新数组
注意:新数组的长度超出要复制的数组的长度时,则多出来的长度为对应的数据类型的初始值。

示例 ⑴

int[] nums = {23, 17, 24, 39, 29};
Arrays.sort(nums); // 【⑴ 数组的排序】
for (int i = 0; i < nums.length; i++) {
  System.out.print(nums[i] + "\t"); // 17      23      24      29      39
}
System.out.println();

int result = Arrays.binarySearch(nums, 29); // 【⑵ 数组元素的查找】
System.out.println(result); // 3

char[] ch = new char[6];
Arrays.fill(ch, '#'); // 【⑶ 数组的填充】
for (int j = 0; j < ch.length; j++) {
  System.out.print(ch[j] + "\t"); // #       #       #       #       #       #
}
System.out.println();

int[] nums2 = {17, 23, 24, 29, 39}; // 上面调用过排序方法
System.out.println(Arrays.equals(nums, nums2) ? "两个数组的元素内容相同" : "两个数组的元素内容不同"); // (true)【⑷ 数组的比较】

int[] numsNew = new int[nums.length + 2];
numsNew = Arrays.copyOf(nums, nums.length + 2); // 【⑸ 数组的复制】
for (int k = 0; k < numsNew.length; k++) {
  System.out.print(numsNew[k] + "\t"); // 17      23      24      29      39      0       0 【可以看出多出来的两个元素是默认值 (0)】
}

⑹ asList 【数组转List(集合)】


语法:asList(要转换的数组);
返回值:List集合
注意:
① 要转换的数组的类型必须是引用数据类型(包装类型),不能是基本数据类型。
② 得到的List集合不能增删,即不能使用add和remove方法,否则会报错:java.lang.UnsupportedOperationException。

示例 ⑵

import java.util.Arrays;
import java.util.List;

public class Test {
  public static void main(String[] args) {
    Integer[] nums = { 1, 2, 3, 4 };
    List<Integer> list = Arrays.asList(nums);

    int len = list.size(); // 获取集合元素个数
    for (int i = 0; i < len; i++) { // 遍历
      System.out.println(list.get(i));
    }

    System.out.println();

    list.set(2, 12); // 改
    System.out.println(list.get(2)); // 查
  }
}

⑹ 注意事项


在使用Arrays类的方法时,一定要导包: import java.util.Arrays;

9、命令行参数

命令行参数即main方法中的args

args需要通过eclipse来传参。具体步骤:右键 → Run As → Run Configurations… → Java Application → Arguments → Program arguments
每个参数之间用空格隔开

注意:args的类型是String数组,数组的元素为String类型。

相关文章

    暂无相关文章

用户点评