局部变量和成员变量 与 值传递和引用传递
局部变量和成员变量
成员变量不能定义到类体外(成员变量是定义在类)
局部变量:
定义在方法里面的变量就是局部变量
这两个变量的不同之处
定义的位置不同:
成员变量:定义在类体以内,方法体以外
局部变量:定义在方法体内或者声明在方法上
在内存中的位置不同
成员变量:在堆中进行存储
局部变量:在栈中进行存储
初始化值的不同
成员变量:有默认值
局部变量:没有默认值,在使用的时候需要进行赋值
生命周期不同
生命周期:一个变量从创建到销毁的全过程就是生命的周期
成员变量:随着对象的创建而创建,随着对象的销毁而销毁的,具体结束是按照垃圾回收器空闲的时候进行销毁的
局部变量:随着你的方法创建而创建的,随着你的方法销毁而进行销毁
当局部变量和成员变量名称相同的时候
局部变量会优先于成员变量(就近原则)
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; }