JavaSE 05 方法,javase05方法
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类型。
相关文章
- 暂无相关文章
用户点评