/**
对象名打印---》类名@地址值
1、从磁盘读取class文件,加载进方法区的class文件区
2、将class文件静态的属性和行为的加载进静态区
3、将class文件中私有的行为加载进方法区
4、在堆中持有方法的引用
5、读取class文件中的成员字段,并初始化
6、在堆中持有方法的引用
7、将这个地址赋值给对象名
对象使用:
1、打印对象名---》打印的是类名和地址值
2、给对象设置数据或是读对象的数据
格式:对象名.变量名
3、调用对象的方法:
格式:对象名.方法名(对应的参数);
栈桢---方法运行的内存
栈 ----存储栈桢
堆 ----存储new出来的----》数组 对象()
方法区-class文件区----》存储class文件
静态区--------》存储被static修饰的变量和方法
成员区--------》存储非static修饰的方法(成员方法)
dorm1.方法名()----》1、根据dorm1存储的地址值找到堆
2、堆内有方法名,方法名指向一个地址值
3、根据这个地址,找到方法区中的具体方法实现代码
4、强方法实现压入栈
成员方法的实现代码,为什么不像成员字段一样存在堆中
1、成员字段随对象的不同而不同
2、成员方法都是一样的实现
3、处于节约资源的考虑,成员方法存储进成员区
*/
class OOP04
{
public static void main(String[] args)
{
//1、创建对象
Dorm dorm1 = new Dorm();
System.out.println("dorm1=" + dorm1);//直接打印dorm1的地址值
//2、向对象中设置参数
dorm1.elec = 100;//将dorm1 中的elec赋值为100
dorm1.water = true;//将dorm1 中的 water 赋值为true(即:水闸的状态是开启状态)
//3、获取到对象的数据
System.out.println("dorm1 的电表数 = "+dorm1.elec);//查看elec的值
System.out.println("dorm1 的水闸状态 =" + dorm1.water);//查看water的状态
//4、操作对象的行为
dorm1.changerWater();
System.out.println("dorm1 的水闸改变后的状态 =" + dorm1.water);
// 以同样的方式获取Dorm2的各种值或状态
Dorm dorm2 = new Dorm();
dorm2.elec = 1000;
System.out.println("dorm2 的电表数 = " + dorm2.elec);//1000
System.out.println("dorm1 的电表数 = " + dorm1.elec);//100
//一些经典的案例
//创建一个dorm3,
Dorm dorm3 = dorm2;//将dorm2的地址值给dorm3,
dorm3.elec = 0;
System.out.println("dorm2 的电表数 = " + dorm2.elec);//0
System.out.println("dorm1 的电表数 = " + dorm1.elec);//100
System.out.println("dorm3 的电表数 = " + dorm3.elec);//0
//由运算结果可以看出,dorm2 和dorm3 的结果一样
//用成员改变共享的变量
System.out.println(dorm1.elecAll);//0
System.out.println(dorm1.waterAll);
dorm1.elecAll = 10000;
System.out.println("dorm2访问共享电表:" + dorm2.elecAll);//10000
System.out.println("dorm1访问共享电表:" + dorm1.elecAll);//10000
System.out.println("dorm3访问共享电表:" + dorm3.elecAll);//10000
}
}
/**
从现实中的宿舍,抽取计算机概念的类
共享的 私有的
数据: 共享的电表 自己的电表
共享的水闸 私有的水闸
行为: 关闭共享的水闸 自己的水闸
*/
class Dorm
{
Dorm(){
}
//--------共享的数据----------
public static int elecAll;//共享的电表
public static boolean waterAll;//共享的水闸
//--------私有数据-----------
public int elec;
public boolean water;
//-------共享行为------
public static void changeWaterAll(){
waterAll = !waterAll;
}
//-----私有的行为
public void changeWater(){
System.out.println("水闸状态改变");
water = !water;
}
}
对象名打印---》类名@地址值
1、从磁盘读取class文件,加载进方法区的class文件区
2、将class文件静态的属性和行为的加载进静态区
3、将class文件中私有的行为加载进方法区
4、在堆中持有方法的引用
5、读取class文件中的成员字段,并初始化
6、在堆中持有方法的引用
7、将这个地址赋值给对象名
对象使用:
1、打印对象名---》打印的是类名和地址值
2、给对象设置数据或是读对象的数据
格式:对象名.变量名
3、调用对象的方法:
格式:对象名.方法名(对应的参数);
栈桢---方法运行的内存
栈 ----存储栈桢
堆 ----存储new出来的----》数组 对象()
方法区-class文件区----》存储class文件
静态区--------》存储被static修饰的变量和方法
成员区--------》存储非static修饰的方法(成员方法)
dorm1.方法名()----》1、根据dorm1存储的地址值找到堆
2、堆内有方法名,方法名指向一个地址值
3、根据这个地址,找到方法区中的具体方法实现代码
4、强方法实现压入栈
成员方法的实现代码,为什么不像成员字段一样存在堆中
1、成员字段随对象的不同而不同
2、成员方法都是一样的实现
3、处于节约资源的考虑,成员方法存储进成员区
*/
class OOP04
{
public static void main(String[] args)
{
//1、创建对象
Dorm dorm1 = new Dorm();
System.out.println("dorm1=" + dorm1);//直接打印dorm1的地址值
//2、向对象中设置参数
dorm1.elec = 100;//将dorm1 中的elec赋值为100
dorm1.water = true;//将dorm1 中的 water 赋值为true(即:水闸的状态是开启状态)
//3、获取到对象的数据
System.out.println("dorm1 的电表数 = "+dorm1.elec);//查看elec的值
System.out.println("dorm1 的水闸状态 =" + dorm1.water);//查看water的状态
//4、操作对象的行为
dorm1.changerWater();
System.out.println("dorm1 的水闸改变后的状态 =" + dorm1.water);
// 以同样的方式获取Dorm2的各种值或状态
Dorm dorm2 = new Dorm();
dorm2.elec = 1000;
System.out.println("dorm2 的电表数 = " + dorm2.elec);//1000
System.out.println("dorm1 的电表数 = " + dorm1.elec);//100
//一些经典的案例
//创建一个dorm3,
Dorm dorm3 = dorm2;//将dorm2的地址值给dorm3,
dorm3.elec = 0;
System.out.println("dorm2 的电表数 = " + dorm2.elec);//0
System.out.println("dorm1 的电表数 = " + dorm1.elec);//100
System.out.println("dorm3 的电表数 = " + dorm3.elec);//0
//由运算结果可以看出,dorm2 和dorm3 的结果一样
//用成员改变共享的变量
System.out.println(dorm1.elecAll);//0
System.out.println(dorm1.waterAll);
dorm1.elecAll = 10000;
System.out.println("dorm2访问共享电表:" + dorm2.elecAll);//10000
System.out.println("dorm1访问共享电表:" + dorm1.elecAll);//10000
System.out.println("dorm3访问共享电表:" + dorm3.elecAll);//10000
}
}
/**
从现实中的宿舍,抽取计算机概念的类
共享的 私有的
数据: 共享的电表 自己的电表
共享的水闸 私有的水闸
行为: 关闭共享的水闸 自己的水闸
*/
class Dorm
{
Dorm(){
}
//--------共享的数据----------
public static int elecAll;//共享的电表
public static boolean waterAll;//共享的水闸
//--------私有数据-----------
public int elec;
public boolean water;
//-------共享行为------
public static void changeWaterAll(){
waterAll = !waterAll;
}
//-----私有的行为
public void changeWater(){
System.out.println("水闸状态改变");
water = !water;
}
}