局部变量和成员变量 与 值传递和引用传递

局部变量和成员变量

成员变量:

成员变量不能定义到类体外(成员变量是定义在类)

局部变量:

定义在方法里面的变量就是局部变量

这两个变量的不同之处

定义的位置不同:

成员变量:定义在类体以内,方法体以外

局部变量:定义在方法体内或者声明在方法上

 

 

在内存中的位置不同

成员变量:在堆中进行存储

局部变量:在栈中进行存储

 

初始化值的不同

成员变量:有默认值

局部变量:没有默认值,在使用的时候需要进行赋值

 

 

生命周期不同

生命周期:一个变量从创建到销毁的全过程就是生命的周期

成员变量:随着对象的创建而创建,随着对象的销毁而销毁的,具体结束是按照垃圾回收器空闲的时候进行销毁的

局部变量:随着你的方法创建而创建的,随着你的方法销毁而进行销毁

当局部变量和成员变量名称相同的时候

局部变量会优先于成员变量(就近原则)

public class a1 {
    public static void main(String[] args) {
        Dogs d = new Dogs();
        System.out.println(d.dogName);
        d.dogName="旺财";
        System.out.println(d.dogName);
        d.eat();
    }
}
class Dogs{
    //成员变量
    public String  dogName;
    //方法
    public void eat(){
        //局部变量
        System.out.println("->"+dogName);
        String dogName="小黑";
        System.out.println(dogName);
    }
}

 

 

值传递和引用传递

基本数据类型

基本的数据类型会作为形式参数,形参的改变是不会影响实际参数的,传递的是值本身

public class a1 {
    public static void main(String[] args) {
        Cat cat = new Cat();
        int x=10;
        System.out.println("调用前x的值为:"+x);
        cat.chea(x);
        System.out.println("调用后x的值为:"+x);
    }
}

class Cat{
    public void chea(int x){
        //局部变量
        x += 5;
        System.out.println("方法中x的值为:"+x);
    }
}

 

 

引用数据类型

引用数据类型作为参数,形参的改变影响实际参数,传递的是地址值

public class a1 {
    public static void main(String[] args) {
        Dogs dogs = new Dogs();
        dogs.name = "张三";
        dogs.age = 20;
        System.out.println("方法调用前的信息:"+dogs.name+"\t"+dogs.age);
        Cat c = new Cat();
        c.change(dogs);
        System.out.println("方法调用后的信息:"+dogs.name+"\t"+dogs.age);


    }
}

class Cat{
    public void change(Dogs d){
        d.name = "小明";
        d.age = 10;
        System.out.println("方法调用时的信息:"+d.name+"\t"+d.age);
    }
}
class Dogs{
    String name;

    int age;

}

 

 

posted @ 2022-06-15 20:29  魔光领域  阅读(54)  评论(0编辑  收藏  举报