JAVA_SE基础——24.面向对象的内存分析
2015-08-18 23:19
519 查看
黑马程序员入学blog ...
接着上一章的代码:
//车类
class Car{
//事物的公共属性使用成员变量描述。
String name; //名字的属性
String color; //颜色属性
int wheel; //轮子数
//事物的公共行为使用函数描述。
public void run(){
System.out.println(name+"飞快的跑起来啦...");
}
}
class Demo1{
public static void main(String[] args) {
//使用了Car类声明了一c变量, c变量指向了一个车对象。
Car c = new Car();
//设置车对象的属性值。
c.name = "BMW";
c.color = "白色";
c.wheel = 4;
//访问车对象的属性值
System.out.println("名字:"+ c.name+" 颜色:"+ c.color+" 轮子数:"+c.wheel);
c.run();
}
}结果是:
名字:BMW 颜色:白色 轮子数:4
BMW飞快的跑起来了
上面代码在内存中是怎么运行的呢?
下面我来给大家分析下:
c是局部变量
1.先声明了c变量 分配在栈内存
2.new Car 在堆内存创建了一个车对象 看看Car有那些成员属性,然后再给对象分配初始值,为name=null,color=null,wheel=0 (成员一旦创建,对象的成员变量也会马上分配默认的初始值) 然后把地址0x97赋给了c c就指向了车的这个对象。
3.
c.name 就是c拿着地址找到车的对象 然后把name改成BMW.
c.color 就是c拿着地址找到车的对象 然后把color 改成白色.
c.wheel 就是c拿着地址找到车的对象 然后把wheel改成4.
下面再看个例子:
//车类
class Car{
//事物的公共属性使用成员变量描述。
String name; //名字的属性
String color; //颜色属性
int wheel; //轮子数
//事物的公共行为使用函数描述。
public void run(){
System.out.println(name+"飞快的跑起来啦...");
}
}
class Demo1{
public static void main(String[] args) {
Car c1 = new Car();
Car c2 = new Car();
c1.name = "宝马";
c2.name = "大众";
System.out.println("名字:"+ c1.name);
}
}
结果:名字:宝马
看下图解释:
1.先声明了c1变量 分配在栈内存
2.new Car 在堆内存创建了一个车对象 看看Car有那些成员属性,然后再给对象分配初始值,为name=null,color=null,wheel=0 (成员一旦创建,对象的成员变量也会马上分配默认的初始值) 然后把地址0x97赋给了c1 c1就指向了车的这个对象。
3.再声明了c2变量 分配在栈内存
4.再new 一个 Car 在堆内存再创建了一个车对象 看看Car有那些成员属性,然后再给对象分配初始值,为name=null,color=null,wheel=0 (成员一旦创建,对象的成员变量也会马上分配默认的初始值) 然后把地址0x67赋给了c2 c2就指向了车的这个对象。
5. c1.name 就是c1拿着地址找到车的对象 然后把name改成" 宝马 "
6. c2.name 就是c2拿着地址找到车的对象 然后把name改成“ 大众 ”
7. 最后输出c1.name c1就拿着地址找到对应的对象 输出了那个对象的name
所以结果是:宝马
下面再把这个例子改下:
//车类
class Car{
//事物的公共属性使用成员变量描述。
String name; //名字的属性
String color; //颜色属性
int wheel; //轮子数
//事物的公共行为使用函数描述。
public void run(){
System.out.println(name+"飞快的跑起来啦...");
}
}
class Demo1{
public static void main(String[] args){
Car c1 = new Car();
c1.name = "宝马";
Car c2 = new Car();
c2.name = "大众";
c1 = c2;
System.out.println("名字:"+ c1.name);
}
}
结果:大众
下图解释:
1.先声明了c1变量 分配在栈内存
2.new Car 在堆内存创建了一个车对象 看看Car有那些成员属性,然后再给对象分配初始值,为name=null,color=null,wheel=0 (成员一旦创建,对象的成员变量也会马上分配默认的初始值) 然后把地址0x97赋给了c1 c1就指向了车的这个对象。
3. c1.name 就是c1拿着地址找到车的对象 然后把name改成" 宝马 "
4.再声明了c2变量 分配在栈内存
5.再new 一个 Car 在堆内存再创建了一个车对象 看看Car有那些成员属性,然后再给对象分配初始值,为name=null,color=null,wheel=0 (成员一旦创建,对象的成员变量也会马上分配默认的初始值) 然后把地址0x67赋给了c2 c2就指向了车的这个对象。
6. c2.name 就是c2拿着地址找到车的对象 然后把name改成“ 大众 ”
7. 把c2的持有地址赋给了c1 c1的地址原来是0x97 改为 0x67
8. 最后输出c1.name c1拿着改后的地址去找地址为0x67的对象
输出为0x67地址的对象中的属性name.
所以结果为;大众
接着上一章的代码:
//车类
class Car{
//事物的公共属性使用成员变量描述。
String name; //名字的属性
String color; //颜色属性
int wheel; //轮子数
//事物的公共行为使用函数描述。
public void run(){
System.out.println(name+"飞快的跑起来啦...");
}
}
class Demo1{
public static void main(String[] args) {
//使用了Car类声明了一c变量, c变量指向了一个车对象。
Car c = new Car();
//设置车对象的属性值。
c.name = "BMW";
c.color = "白色";
c.wheel = 4;
//访问车对象的属性值
System.out.println("名字:"+ c.name+" 颜色:"+ c.color+" 轮子数:"+c.wheel);
c.run();
}
}结果是:
名字:BMW 颜色:白色 轮子数:4
BMW飞快的跑起来了
上面代码在内存中是怎么运行的呢?
下面我来给大家分析下:
c是局部变量
1.先声明了c变量 分配在栈内存
2.new Car 在堆内存创建了一个车对象 看看Car有那些成员属性,然后再给对象分配初始值,为name=null,color=null,wheel=0 (成员一旦创建,对象的成员变量也会马上分配默认的初始值) 然后把地址0x97赋给了c c就指向了车的这个对象。
3.
c.name 就是c拿着地址找到车的对象 然后把name改成BMW.
c.color 就是c拿着地址找到车的对象 然后把color 改成白色.
c.wheel 就是c拿着地址找到车的对象 然后把wheel改成4.
下面再看个例子:
//车类
class Car{
//事物的公共属性使用成员变量描述。
String name; //名字的属性
String color; //颜色属性
int wheel; //轮子数
//事物的公共行为使用函数描述。
public void run(){
System.out.println(name+"飞快的跑起来啦...");
}
}
class Demo1{
public static void main(String[] args) {
Car c1 = new Car();
Car c2 = new Car();
c1.name = "宝马";
c2.name = "大众";
System.out.println("名字:"+ c1.name);
}
}
结果:名字:宝马
看下图解释:
1.先声明了c1变量 分配在栈内存
2.new Car 在堆内存创建了一个车对象 看看Car有那些成员属性,然后再给对象分配初始值,为name=null,color=null,wheel=0 (成员一旦创建,对象的成员变量也会马上分配默认的初始值) 然后把地址0x97赋给了c1 c1就指向了车的这个对象。
3.再声明了c2变量 分配在栈内存
4.再new 一个 Car 在堆内存再创建了一个车对象 看看Car有那些成员属性,然后再给对象分配初始值,为name=null,color=null,wheel=0 (成员一旦创建,对象的成员变量也会马上分配默认的初始值) 然后把地址0x67赋给了c2 c2就指向了车的这个对象。
5. c1.name 就是c1拿着地址找到车的对象 然后把name改成" 宝马 "
6. c2.name 就是c2拿着地址找到车的对象 然后把name改成“ 大众 ”
7. 最后输出c1.name c1就拿着地址找到对应的对象 输出了那个对象的name
所以结果是:宝马
下面再把这个例子改下:
//车类
class Car{
//事物的公共属性使用成员变量描述。
String name; //名字的属性
String color; //颜色属性
int wheel; //轮子数
//事物的公共行为使用函数描述。
public void run(){
System.out.println(name+"飞快的跑起来啦...");
}
}
class Demo1{
public static void main(String[] args){
Car c1 = new Car();
c1.name = "宝马";
Car c2 = new Car();
c2.name = "大众";
c1 = c2;
System.out.println("名字:"+ c1.name);
}
}
结果:大众
下图解释:
1.先声明了c1变量 分配在栈内存
2.new Car 在堆内存创建了一个车对象 看看Car有那些成员属性,然后再给对象分配初始值,为name=null,color=null,wheel=0 (成员一旦创建,对象的成员变量也会马上分配默认的初始值) 然后把地址0x97赋给了c1 c1就指向了车的这个对象。
3. c1.name 就是c1拿着地址找到车的对象 然后把name改成" 宝马 "
4.再声明了c2变量 分配在栈内存
5.再new 一个 Car 在堆内存再创建了一个车对象 看看Car有那些成员属性,然后再给对象分配初始值,为name=null,color=null,wheel=0 (成员一旦创建,对象的成员变量也会马上分配默认的初始值) 然后把地址0x67赋给了c2 c2就指向了车的这个对象。
6. c2.name 就是c2拿着地址找到车的对象 然后把name改成“ 大众 ”
7. 把c2的持有地址赋给了c1 c1的地址原来是0x97 改为 0x67
8. 最后输出c1.name c1拿着改后的地址去找地址为0x67的对象
输出为0x67地址的对象中的属性name.
所以结果为;大众
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树
- [原创]java局域网聊天系统