目
录
1.值传递
基本类型作为参数传递,属于值传递!传递的是变量的值,形参的改变不会影响实参的值!
public class Test {
public static void main(String[] args) {
//创建对象
Test test=new Test();
int num=100;
System.out.println("传入num参数之前:"+num);
//调用chuancan方法,传入参数num
chuancan(num);
System.out.println("传入num参数之后:"+num);
}
public static void chuancan(int n){ //传入参数n
System.out.println("传入num参数到方法中运算前"+n);
n+=20;
System.out.println("传入num参数到方法中运算后"+n);
}
// 传入num参数之前:100
// 传入num参数到方法中运算前100
// 传入num参数到方法中运算后120
// 传入num参数之后:100
//传入num参数前后没有变化!不影响实参的值
}
2.址传递
引用类型作为参数传递,属于引用传递(址传递).传递的是地址值,形参的改变会影响实参的值!
方法的形参是数组类型
当咱们以后看到一个方法的形参要一个数组类型,你就传递一个该数组的地址值过去。
public class Test1 {
public static void main(String[] args) {
//定义数组
int[] arr={1,2,3,4,5};
//调用方法chuancan,传入引用类型的参数(数组)
chuancan(arr);
//遍历一下传参后的数组元素
for(int i=0;i<arr.length;i++) {
System.out.println(arr[i]);
}
//结果是1 4 3 8 5
//传入的形参影响了实参的值
}
private static void chuancan(int[] arr) { //传入数组
for (int i=0;i<arr.length;i++){
if (arr[i]%2==0){
arr[i]*=2;
}
}
}
}
如下图中的内存图!数组的地址值返回到了栈内!对其堆内的值进行修改需要找到地址值,然后进行修改!所以是完全的修改掉了!
方法的形参是 类 类型
当咱们以后看到一个方法的形参要一个 类 类型,你就传递一个该类的对象。
public class MyTest {
public static void main(String[] args) {
int num = 20;
Student student = new Student();
student.num = 50;
//方法的形参要一个类 类型,就传递一该类的对象。
test(student, num);
System.out.println(student.num); //20(就近原则)
}
public static void test(Student student, int num) {
student.num = num;
}
}
class Student {
int num = 100;
public void show(Student studnet, int num) {
studnet.num = num;
}
}
方法的形参是 抽象类 类型
当咱们以后看到一个方法的形参,要一个 抽象类 类型,你就传递一个该抽象类的子类对象。 说白了,就是多态的形式
public class MyTest {
public static void main(String[] args) {
//方法的形参要一个 抽象类 类型,就传递一个该抽象类的子类对象
//多态形式
AA aa = new BB();
aa.num = 88;
test(aa, 2);
System.out.println(aa.num); //2
}
public static void test(AA aa, int num) { //AA aa=bb 多态
//多态形式访问成员变量,编译看左边,运行也看左边。
aa.num = num;
}
}
abstract class AA {
int num = 100;
public abstract void aa(int num);
}
class BB extends AA {
int num = 30;
@Override
public void aa(int num) {
this.num = num;
}
}
方法的形参是 接口 类型
当咱们以后看到一个方法的形参要一个 接口 类型,就传递一个该接口的实现类的对象。
public class MyTest {
public static void main(String[] args) {
//方法的形参要一个 接口 类型,就传递一个该接口的实现类的对象。
DD dd = new DD();
test(dd);
System.out.println(dd.num);//100
}
}
interface MyInterface {
public static final int num = 100;
void show();
}
class DD implements MyInterface {
@Override
public void show() {
System.out.println(this.num);
}
}
(小编也在努力学习更多哟!以后会多多分享哒!)
希望对友友们有所帮助!!!!