哈喽,大家好!我是白夜,今天给大家聊聊Java里面的方法。
方法(method),又称为函数(function),代表一段“独立的”“可复用”的“功能”代码
方法可以复用代码,减少了代码的冗余,提高效率和程序的可读性。
定义一个方法的语法
/**
* 修饰符 返回值类型 方法名称([参数类型 形参 ...]){
* 方法体代码;
* (return 返回值;)
* }
*/
public static void main(String[] args) {
int num1 = 10;
int num2 = 20;
System.out,println(Add(a,b));
}
注意事项:
定义方法时一般有以下几种情况:
//无参数无返回值
public void m1() { }
//无参数有返回值
public int m2() {
return 1;
}
//有参数无返回值
public void m3(String s) { }
//有参数有返回值
public boolean m4(int a) {
return true;
}
定义方法时基本上就是以上几种情况,可以选择加或者不加访问权限修饰符和静态修饰符,但是返回值类型和方法签名是必不可少的。
注意:有返回值的方法,必须在方法体中,使用 return 关键字,返回对应类型的值。比如你定义的方法返回值是int类型,那么在大括号中就必须有 return 整数数字; 如果 return 后的数据类型与返回值类型不同,也会报错。
在 java 中,return 关键字和 break 关键字的作用相似,在当前这行代码使用 return 关键字时表示代码到此运行结束,下边的代码都不会再执行了。如果写了就会报错。
主要是看否是静态方法(被 static 修饰)
静态方法:在本类中可以直接使用方法名(参数)调用,在其他类中使用类名点方法名(参数)调用
非静态方法:在任何地方调用,都需要创建类的引用对象,使用引用对象点方法名(参数)调用
//静态方法调用 类名+方法名()
User.getName();//无参的
User.getName("毛毛"); //有参的
//非静态方法调用 对象名+方法名()
User u = new User();
u.getName();//无参的
u.getName("毛毛"); //有参的
注意事项:
Java中方法的形参的名字可以随意取,对方法都没有任何影响,形参只是方法在定义时需要借助的一个变量,用来保存方法在调用时传递过来的值。
//n1和n2就是形参
public static int add (int n1,int n2) {
return n1 + n2;
}
add(num1,num2);//num1和num2就是实参,在方法被调用时,形参n1用来保存num1的数值,形参n2用来保存num2的数值
return用于结束当前方法的执行。
return的使用有两种形式:
public void max(int[] a){
for(int i = 0; i b ? a : b
}
概念:在同一个类中,方法名相同,形参列表不同,就是方法重载。
作用:
//构成重载关系,以为个数不一样
public static int sum (int a,int b) {
return a + b;
}
public static int sum (int a,int b,int c) {
return a + b + c;
}
//构成重载,因为参数个数不同
public static float func (int a) {
//方法体
}
public static int func (int a,int b) {
//方法体
}
//不构成重载关系,因为参数都一样,不用管返回值!
public static void func (int a) {
//方法体
}
public static int func (int a) {
//方法体
}
public class Test1 {
public static void func (int a) {
//方法体
}
}
//不构成重载关系,因为分别在两个类中
public class Test2 {
public static int func (double b) {
//方法体
}
}
概念:
方法签名,是来区分不同方法的标示符。
语法:
方法名和参数列表
方法名不同或者参数列表不同都可以用来区分不同的方法。
具体方式:方法全路径名+参数列表+返回值类型,构成方法完整的名字。
java 的参数传递:
基本数据类型传递的是:值本身。
引用数据类型传递的是:变量在堆中的引用地址。
值传递(Pass by Value)是指将参数的副本传递给方法,即方法内部对参数进行的操作不会影响到原始的参数
/**
* 堆栈分析:
* 基本类型是"值"的传递
* 引用类型是引用地址的传递
* 方法内部对参数的修改只会在方法内部生效,不会影响到方法外部
*/
public class _04StackHeap {
public static void main(String[] args) {
int a = 1;
System.out.println("改变前:" + a);// 1
// 调用change方法
change(a);
System.out.println("改变后================ :" + a);// 1
}
public static void change(int a) {
a = 2;
System.out.println("改变中-------:" + a);// 2
}
}
引用传递(Pass by Reference)是指将参数的引用地址值传递给方法,即方法内部对参数的操作会影响到原始的参数。
* 堆栈分析:
* 基本类型是"值"的传递
* 引用类型是引用地址的传递
* 在引用传递中,方法内部对参数的修改会直接反映到方法外部
*/
public class _05StackHeap {
public static void main(String[] args) {
int[] arr = {1, 2};
System.out.println("改变前:" + arr[0]);// 1
System.out.println("改变前:" + arr[1]);// 2
// 调用change方法
change(arr);
System.out.println("改变后================ :" + arr[0]);// 6
System.out.println("改变后================ :" + arr[1]);// 9
}
public static void change(int[] arr) {
arr[0] = 6;
arr[1] = 9;
System.out.println("改变中-------:" + arr[0]);// 6
System.out.println("改变中-------:" + arr[1]);// 9
}
}
//参数类型... 变量名
public void aa(int a, int... bs){ };
特点:
public static int getSum(int... arr) {
System.out.println(arr);// 地址
System.out.println(arr.length);// 数组长度
int sum = 0;
for (int e : arr) {
System.out.println("元素:" + e);
sum += e;
}
return sum;
}
参与评论
手机查看
返回顶部