面向对象_对象的内存体现

对象与内存的分析:

  1、new关键字深入
    1、new关键字表示创建一个对象
    2、new关键字表示实例化对象
    3、new关键字表示申请内存空间
    注意:如果使用一个没有申请内存空间的对象,会报空指针异常:java.lang.NullPoingerException

  2、对象内存分析

  

  

 1 public class sixtyThree {
 2     public static void main(String[] args) {
 3         Dog d = new Dog();//声明一个对象并且实例化对象
 4
 5         //给对象的属性赋值
 6         d.name = "小白";
 7         d.age = 4;
 8         //执行对象的方法
 9         d.say();
10     }
11
12 }
13 class Dog{
14     String name;
15     int age;
16     void say(){
17         System.out.println("我的名字是:"+name+",我的年龄是:"+age);
18     }
19 }

在内存中创建多个对象

  

  

 1 public class sixtyThree {
 2     public static void main(String[] args) {
 3         Dog d1 = new Dog();//声明一个对象并且实例化对象
 4
 5         //给对象的属性赋值
 6         d1.name = "小白";
 7         d1.age = 4;
 8         //执行对象的方法
 9         d1.say();
10
11
12         //--------------------------------
13         Dog d2 = new Dog();
14         d2.name = "小黑";
15         d2.age = 5;
16         d2.say();
17     }
18
19 }
20 class Dog{
21     String name;
22     int age;
23     void say(){
24         System.out.println("我的名字是:"+name+",我的年龄是:"+age);
25     }
26 }

对象之间的赋值(类型相同的对象才可以)

 1 public class Object_Memory {
 2     public static void main(String[] args) {
 3         Car c=new Car();
 4         c.color="blue";
 5         c.run();
 6
 7
 8         //两个对象直接的赋值(地址值)的关系
 9         Car c1=new Car();
10         c1.num=5;
11         Car c2=c1;//把c1赋给c2  c2就和c1指向了同一个对象  就想两个人用同一台电脑,这叫多个引用指向了同一个对象
12         c2.color="green";
13         c1.run();//结果是  5和green
14     }
15
16 }
17 class Car{
18     String color="red";
19     int num=4;
20
21     void run(){
22         System.out.println(color+"...."+num);
23     }
24 }

第四种情况

  

  

 1 public class sixtyThree3 {
 2     public static void main(String[] args) {
 3         Doggg d1 = new Doggg();//声明一个对象并且实例化对象
 4
 5         d1.name = "小白";
 6         d1.age = 4;
 7         d1.say();
 8
 9         Doggg d2 = new Doggg();
10         d2.name = "小黑";
11         d2.age = 6;
12         d2.say();
13
14         d2 = d1;//把d1赋值给d2(赋值的是堆内存地址值)
15         d2.name = "嘿嘿";
16         d2.say();
17         d1.say();
18
19     }
20
21 }
22 class Doggg{
23     String name;
24     int age;
25     void say(){
26         System.out.println("我的名字是:"+name+",我的年龄是:"+age);
27     }
28 }
时间: 2024-10-19 21:18:05

面向对象_对象的内存体现的相关文章

Java面向对象_对象内存分析—值传递和引用传递

对象内存分析,我一直学的比较模糊,今天抽空整理一下,希望能理清. 先说一下,内存分析从何而来,这对于我们这些刚接触java的人来说都比较模糊,就从new关键字说起吧. new关键字表示创建一个对象或者说是实例化对象或者说是申请内存空间,所有程序运行都需要内存来存储数据,这样内存的概念就出来了.举个例子说明:定义一个类Person,属性:char a;int sge;那么创建一个对象申请的内存空间就是所有属性所占字节之和,为6个字节. 详细理一下对象在内存中的结构: Person p=new Pe

面向对象_对象建立时内存中的变化

建立一个对象在内存中会做什么事 1.因为new用到了Person.class所以会先找到Person.class文件并加载到内存中 2.执行该类中的static代码块,如果有的话,给Person.class类进行初始化 3.在堆内存中开辟空间,分配内存地址 4.在堆内存中建立对象的特有属性,并进行默认初始化 5.对属性进行显示初始化 6.对对象进行构造代码块初始化 7.对对象进行对应的构造函数初始化 8.将内存地址赋给内存中的p变量 对象初始化过程: 先是默认初始化-------显示初始化---

C++面向对象编程:对象的内存分配与静态成员

对象是类的实例,而内存分配发生在对象的声明之时,而非类的定义之时,然而每次内存分配并不会总是为每一个对象的成员函数分配内存空间,实际上一旦成为类的定义的一部分,成员函数就会在内存中一次性的建立,因为所有的相同类的对象都使用相同的成员函数,所以并没有必要为每一个对象的成员函数分配内存空间.而对于每一个对象来说其只有数据成员才会获得相应的内存空间. 如下图所示,略微有点粗糙 静态成员函数

Java面向对象_对象数组

今天学习了对象数组,写点东西总结一下.废话不多说,啥是对象数组呢? 对象数组的概念是这么讲的,对象数组就是数组里的每个元素都是类的对象,赋值时先定义对象,然后将对象直接赋给数组. 举个例子,使用对象数组实现多个Hero的管理 1 import java.util.Arrays; 2 import java.util.Scanner; 3 4 public class Test4 { 5 6 /** 7 * @param args 8 */ 9 public static void main(St

面向对象_对象的一对一关系

分别在两个类中定义对方的类类型变量          双向        如果只关联一方,就是单向 public class NinetyFour { public static void main(String[] args) { Husband h = new Husband("小白",'男'); Wife w = new Wife("星星",20); //关联对象 h.setWife(w); w.setHusband(h); //通过丈夫取妻子的东西 Syst

PHP面向对象(PHP对象在内存中的分配)

对 像在PHP 里面和整型.浮点型一样,也是一种数据类,都是存储不同类型数据用的, 在运行的时候都要加载到内存中去用,那么对象在内存里面是怎么体现的呢?内存从逻 辑上 说大体上是分为4 段,栈空间段.堆空间段.代码段.初始化静态段,程序里面不同的声明 放在不同的内存段里面,数据段(data segment)通常是指用来存放程序中已初始化且不为0的全局变量如:静态变量和常量:代码段(code segment / text segment)通常是指用来存放程序执行代码的一块内存区域,比如函数和方法:

Android学习第18天—— 面向对象测试, 对象输入流,输出流的使用

工作内容 面向对象测试 面向对象的自我梳理: 类 private(封装,能用的时候尽量用)[不可以用于修饰类] public protected (子类可用)[不能用于修饰类] 默认 成员变量,类变量(static) 成员方法,类方法(static)- static{ }最先执行,构造函数执行,static 返回类型 方法名(){ }需调用的时候才会执行 [类方法只能操作类变量] static修饰的属性和方法:属于类,最先拥有内存空间 构造方法:[修饰符] 类名 [同一个类中构造函数可以相互调用

面向对象---初识对象

<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title> 面向对象---初识对象 </title> <script type="text/javascript"> /* *表达一个人的完整信息 */ /*第一种,三个变量之间没有必然的联系----->这个变量属于谁? var

Delphi接口的底层实现(接口在内存中仍然有其布局,它依附在对象的内存空间中,有汇编解释)——接口的内存结构图,简单清楚,深刻 good

引言 接口是面向对象程序语言中一个很重要的元素,它被描述为一组服务的集合,对于客户端来说,我们关心的只是提供的服务,而不必关心服务是如何实现的:对于服务端的类来说,如果它想实现某种服务,实现与该服务相关的接口即可,它也不必与使用服务的客户端进行过多的交互.这种良好的设计方式已经受到很广泛的应用. 早在Delphi 3的时候就引入了接口的概念,当时完全是因为COM的出现而诞生的,但经过这么多版本的进化,Delphi的接口已经成为Object Pascal语言的一部分,我们完全可以用接口来完成我们的