方法
概念:方法是一个代码段的抽取 (函数、功能)
好处:降低了程序的冗余,提高了代码的复用性,隐藏 功能的实现细节
一、定义
格式:
修饰符 返回类型 方法名 (参数列表){
方法体;
return;
}
修饰符:固定式public static
返回类型:方法运行完毕后会得到一个具体的结果返回给调用者
方法名:方法的名字
参数列表:功能执行时需要的一些基本内容
方法体:具有功能的实现
return :结束方法,返回结果的关键字
二、参数列表、返回类型和方法体的关系
参数列表:原材料
方法:工厂
返回类型:产品
三、方法的分类
3.1 无返回的方法
方法可以执行具体的功能,但是执行完毕后没有返回值‘
3.2 有返回的方法
方法在执行完具体功能后,会将结果返回给调用者,这类方法的返回类型是具体的某种类型
四、使用
调用格式:
方法名(参数列表);
五、参数列表
分类:
形式参数:形参,在方法的定义中,作用是告知调用者,方法的执行,需要哪些,需要多少个参数,形参的变量名可以是任意的,但是请遵循规范
实际参数:实参,在方法的调用中,是真正的参数运算的数据
问:参数的类型有哪些?
答:参数的类型可以试任意的,如果是hi基本数据类型,传递的是值’;如果是引用类型传递的是地址值
5.2 值传递和引用传递
值传递:传递的数据是基本数据类型,形参的作用域是在当前方法中,随着方法的释放(出栈)会被释放
引用传递:传递的是引用数据类型的地址,引用数据类型创建出的内容都在堆内存中,不会随着栈中方法的释放(出栈)而释放
5.3 可变参数
格式:
数据类型…变量名
特点:
1、参数个数可以试任意的
2、可变参数的本质是数组
3、可变参数必须出现在参数列表的末尾
六、方法的重载
概念:在同一个类中,多个方法具有相同的方法名,且参数列表各不相同就形成了方法的重载
特点:
1、方法名相同
2、参数列表不同(个数不同、类型不同、顺序不同、)
好处:
只需要明确想要执行的功能,就能找到对应的方法,而不需要针对类似的功能而去记忆各个方法名不同的方法。
七、成员变量和局部变量
成员(全局):定义在方法外,类中的内容
局部:定义在方法内的内容
注:
1、变量的使用范围是在它所定义的代码段中,成员内容能在当前类的任意位置使用,局部内容只能在它所在的方法体中使用。
2、就近原则:方法中使用变量时,优先使用本方法中定义的内容,本方法中如果没有该变量,则使用成员的,如果成员中也没有定义则编译失败。
区别:
1、定义位置不同,成员的在类中,局部的在方法中
2、默认值不同,成员的有默认值(同数组的默认值),局部的没有默认值
3、适用范围不同,成员的可以在本类中的任何位置使用,局部的只能在所定义的方法中使用
4、内存的存储位置不同,成员的在堆中,局部的在栈中
5、内存中的存活时间,局部的是从入栈到出栈,成员的是从加载到内存直到被垃圾回收器回收
八、返回类型
概念:表示当方法运行完毕后,会将结果通过return关键字返回给调用者
关键字return的功能
1、将方法的结果返回给调用者,返回的结果可以试表达式
2、结束方法
注:
1、如果方法的返回类型是void,在方法的末尾处有一个隐十点return来完成方法的结束,此时return后不能有数据,应该直接分号结束
2、如果方法的返回类型不是void,那么方法必须有return执行方法的返回
3、return 之后不能再有语句
小结
方法数组以前学的不好,所以现在感觉还是有收获的,今天讲到了方法的重写,老师罗列了几个坑,比如
public static void main(String[] args) {
// b(3, 3); // 编译失败
}
public static void b(double a,int b){
System.out.println(“B”);
}
public static void b(int a,double b){
System.out.println(“A”);
}
//一般不会这样重写方法
还有一个小练习,感觉做做挺有帮助
` public class Test5 { // 在指定的字符串数组中通过指定的元素,返回所有出现该元素的下标
public static void main(String[] args) {
String[] names = {“ls”,“zs”,“ww”,“ls”,“zl”,“tq”,“ls”,“zsf”};
int[] indexs = getIndexs(names, “tq”);
if(indexs.length == 0){
System.out.println(“没有找到”);
}else{
System.out.println(Arrays.toString(indexs));
}
}
public static int[] createArray(int[] arr,int index){
int[] newArr = new int[arr.length+1];
for(int i = 0;i<=arr.length-1;i++){
newArr[i] = arr[i];
}
newArr[newArr.length-1] = index;
return newArr;
}
public static int[] getIndexs(String[] arr,String str){
int[] indexs = new int[0];
for(int i = 0;i<arr.length;i++){
if(str.equals(arr[i])){
indexs = createArray(indexs, i);
}
}
return indexs;
}
}
`
九、方法的注意事项
1、方法定义的位置是任意的
2、方法体中不能再定义方法
3、方法的执行,只有在方法被调用后才 能执行,才会进入栈中