1.一个对象的内存图
class Demo1_Car {
public static void main(String[] args) {
Car c1 = new Car(); //创建对象
//调用属性并赋值
c1.color = "red"; //为车的颜色赋值
c1.num = 8; //为车的轮胎数赋值
//调用行为
c1.run();
}
}
/*
车的属性
车的颜色
车的轮胎数
车的行为
车运行
*/
class Car {
//成员变量
String color; //车的颜色
int num; //车的轮胎数
public void run() { //车运行
System.out.println(color + "..." + num);
}
}
2.两个对象的内存图
class Demo1_Car {
public static void main(String[] args) {
Car c1 = new Car(); //创建对象
//调用属性并赋值
c1.color = "red"; //为车的颜色赋值
c1.num = 8; //为车的轮胎数赋值
//调用行为
c1.run();
Car c2 = new Car(); //创建对象
c2.color = "black"; //为车的颜色赋值
c2.num = 4; //为车的轮胎数赋值
c2.run();
c2 = null; //用null把原来的地址值覆盖掉了
c2.run(); //c2里面记录的是null,所以报出空指针异常
}
}
/*
车的属性
车的颜色
车的轮胎数
车的行为
车运行
*/
class Car {
//成员变量
String color; //车的颜色
int num; //车的轮胎数
public void run() { //车运行
System.out.println(color + "..." + num);
}
}
3.三个引用两个对象的内存图
class Demo1_Car {
public static void main(String[] args) {
Car c1 = new Car(); //创建对象
//调用属性并赋值
c1.color = "red"; //为车的颜色赋值
c1.num = 8; //为车的轮胎数赋值
//调用行为
c1.run();
Car c2 = new Car(); //创建对象
c2.color = "black"; //为车的颜色赋值
c2.num = 4; //为车的轮胎数赋值
c2.run();
//c2 = null; //用null把原来的地址值覆盖掉了
//c2.run(); //c2里面记录的是null,所以报出空指针异常
Car c3 = c2;
c3.run();
}
}
/*
车的属性
车的颜色
车的轮胎数
车的行为
车运行
*/
class Car {
//成员变量
String color; //车的颜色
int num; //车的轮胎数
public void run() { //车运行
System.out.println(color + "..." + num);
}
}
4.成员变量与局部变量的区别
A:在类中的位置不同
* 成员变量:在类中方法外
* 局部变量:在方法定义中或者方法声明上
* B:在内存中的位置不同
* 成员变量:在堆内存(成员变量属于对象,对象进堆内存)
* 局部变量:在栈内存(局部变量属于方法,方法进栈内存)
* C:生命周期不同
* 成员变量:随着对象的创建而存在,随着对象的消失而消失
* 局部变量:随着方法的调用而存在,随着方法的调用完毕而消失
* D:初始化值不同
* 成员变量:有默认初始化值
* 局部变量:没有默认初始化值,必须定义,赋值,然后才能使用。
* 注意事项:
* 局部变量名称可以和成员变量名称一样,在方法中使用的时候,采用的是就近原则。
* 基本数据类型变量包括哪些:byte,short,int,long,float,double,boolean,char
* 引用数据类型变量包括哪些:数组,类,接口,枚举
成员变量与局部变量有什么区别? 类的位置,内存位置,生命周期,初始化值 补充:调用方式不同,局部变量的调用,在方法内直接调用即可,成员变量的调用,需要使用对象.成员变量调用 在使用变量的过程中, 查找变量的顺序是什么? 就近原则 |
class Demo2_Person {
public static void main(String[] args) {
Person p = new Person();
p.speak();
}
}
class Person {
String name; //成员变量
int num;
/*public void speak(int x) {
int num = 10; //x和num都是局部变量
System.out.println(name);
System.out.println(num);
}*/
public void speak() {
int num = 10; //num是局部变量
System.out.println(name);
System.out.println(num);
}
}