public class Address {
String city;
String street;
String zipcode;
}
public class User {
int id; // instance variable
String username; // instance variable
Address addr; // instance variable
}
int 是基本数据类型;String是引用数据类型
Address也是引用数据类型
instance variable都在堆内存的对象内部。
public class Test {
public static void main (String[] args) {
//家庭住址对象
Address a = new Address();
a.city = "beijing";
a.street = "daxing";
a.zipcode = "121221";
// 用户对象
User u = new User();
System.out.println(u.id); //默认值0
System.out.println(u.username); // null
System.out.println(u.addr); // null
u.id = 1111;
u.username = "zhangsan";
u.addr = a;
其实原理和下面的代码一样。
int i = 100;
int j = i;
原理:会将i中保存的100复制一份,传给j变量
为什么要画内存图 (非常重要)?
- 有了内存图,程序不运行,我也知道结果。
- 有了内存图,有助于调试程序。
- 画内存图是对Java运行机制的一种理解。不知道运行机制,以后复杂的程序出现错误之后不会调试
方法体外:成员变量(实例变量)
方法体内:局部变量
instance variable不能用类名访问
id的访问必须先创建对象,然后对象有了,才能访问对象的id
基本数据类型的默认值偏向0,false也是0
引用数据类型的默认值:null
int x = 100;
这个=代表赋值运算
int y = x;
第二行的等号是把什么传递给了y?
将x变量中保存的值100复制一份给y
Address k = new Address();
等同于 Address k = 0x1111;
Address m = k;
把k里保存的东西给了m
如果想要知道zhangsan是哪个城市的,代码应该怎么写?
System.out.println(u.addr.city);
u.addr.city这行代码可以拆分吗?
int i = u.id;
Address ad = u.addr;
String zhuZhi = ad.city;
System.out.println(zhuZhi);
// 报错:System.out.println(User.id)
id是实例变量,必须先创建对象,通过“引用." 的方式访问。
User u = new User();
u是引用。
引用和对象怎么区分?
引用:存储对象内存地址的一个变量
对象:堆里new出来的
思考:引用一定是局部变量吗?
不一定,可以是成员变量
学习所用,内容版权归B站视频老师所有。