方法
方法是什么
方法就是功能,供别人使用,在实际开发中会编写很多重复的代码,如果重复编写的代码出现过多,就会造成后期维护难,方法的使用可以解决代码的重复问题
例子
尚未使用前
class A{
//学习的代码
}
class B{
//学习的代码
}
class C{
//学习的代码
}
使用方法后
Class Student{
方法(){
学习的代码
}
}
class A{
//学习的代码
Student.A();
}
class B{
//学习的代码
Student.A();
}
class C{
//学习的代码
Student.A();
}
定义语法
[访问修饰符] [是否静态] 返回值类型 方法名([参数类型 参数1,参数类型 参数2....]){
[return 返回值;(方法返回值用void声明可以不使用)]
}
DRY(Don’t Repeat Yourself)
不要重复自己的代码
方法中的组成部分
方法就是一个功能,供别人的使用,返回别人需要的东西
public static void main(String[] args){
修饰
}
-
谁能访问:public(公开的:谁都能访问)/private(私有的:只有自己能够访问)
-
怎么访问:static(静态的),表示当前方法使用 类名.方法名()
-
返回什么数:void(没有返回),表示当前方法不需要任何的返回
如果需要返回值,这里写返回值的类型(比如:int double String),必须要使用return关键字返回,返回值的类型必须和方法上定义的类型一致
方法如果需要返回值,就需要保证无论在什么清空下都要使用return将结果返回
-
功能名称:使用什么名字来访问到当前方法,使用任意的标识符(不能使用关键字)来表示
-
给方法我什么:参数,方法在完成功能的时候,需要调用者给的数据
形式参数:存在哪些未知的因数,也就是定义方法括号里面的参数(简称:形参)
实际参数:在实际调用的时候给的参数就是实际参数(简称:实参)
参数有多少个,实参就有多少个,类型也要一致
注:方法必须在类里面、方法不能嵌套方法
返回值类型未必一定要有return,可以使用抛出错误的形式终止方法
class Test{
public static void main(String[] args){
error();
}
//RuntimeException运行时报错
public static int error(){
throw new RuntimeException("");
}
}
方法中的可变参数
class Test{
public static void main(String[] args){
getSum(1,2,3,4);
}
public static int getSum(int...nums){
int sum = 0 ;
for(int i = 0 ; i < nums.length ; i++){
sum+=nums[i];
}
return sum;
}
}
------------------------------------底层转换------------------------------------
class Test
{
public static void main(String[] paramArrayOfString){
getSum(new int[] { 1, 2, 3, 4 });
}
public static int getSum(int[] paramArrayOfInt) {
int i = 0;
for (int j = 0; j < paramArrayOfInt.length; ++j)
i += paramArrayOfInt[j];
return i;
}
}
可以看出可变参数就是一个一维数组,底层会将实参转换成第一个数组传到方法里
使用:
- 可变参数必须是最后一个参数,否则无法使用,也避免了多参数的歧义性
- 方法参数最多只能有一个可变参数
使用场景:
- 用于不定长的相同意义参数的时候
重载
为什么要使用重载
相似的功能不想定义不同名字
原则
使用原则:“两同一不同”
同一个类,方法名相同
方法的参数列表不同(参数类型,参数个数,参数顺序)
- 参数类型,参数个数,参数顺序任意一个不同,就叫参数列表不同
例:
class OverloadDemo{
public static void main(String[] args){
}
//求两个int之和
public static int getSum(int num1,int num2){
System.out.println("int类型");
return num1+num2;
}
//求两个double之和
public static double getSum(double num1,double num2){
System.out.println("double类型");
return num1+num2;
}
}
方法参数传递机制
基本类型
public static void main(String[] args){
int i = 1;
change(i);
System.out.println("main"+i);//1
}
public static void change(int i){
System.out.println("change"+i);//1
i=10;
System.out.println("change"+i);//10
}
引用类型
public static void main(String[] args){
int[] i = {1,2,3,4};
change(i);
System.out.println("main"+java.util.Arrays.toString(i));//[1,10,3,4]
}
public static void change(int[] i){
System.out.println("change"+java.util.Arrays.toString(i));//[1,2,3,4]
i[1]=10;
System.out.println("change"+java.util.Arrays.toString(i));//[1,10,3,4]
}
总结
- 基础类型参数传递:传递的是数字
- 引用类型参数床底:传递的是地址(栈中的栈帧指向堆中的地址)