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

建立一个对象在内存中会做什么事

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

对象初始化过程:
  先是默认初始化-------显示初始化------构造代码块-------构造函数

 1 public class PersonDemo6 {
 2     public static void main(String[] args) {
 3         Person p = new Person("zhangsan",21);
 4         p.setName("lishi");
 5
 6     }
 7 }
 8 class Person{
 9     private int age;
10     private String name;
11
12     {
13         System.out.println("我:name="+name+",,age="+age);
14     }
15     Person(String name,int age){
16         System.out.println("C:name="+name+",,age="+age);
17     }
18
19
20     public void setName(String name){
21         this.name = name;
22     }
23     public String getName(){
24         return name;
25     }
26
27     public void speak(){
28         System.out.println("name="+name+",,age="+age);
29     }
30     public void cry(){
31         System.out.println("cry.......");
32     }
33 }
时间: 2024-10-10 00:34:16

面向对象_对象建立时内存中的变化的相关文章

对象类型在内存中的分配

今天,我们来讲讲对象类型在内存中的分配! 对象类型和整型.字符串等类型一样,也是PHP中的一种数据类型,在程序中存储不同类型的数据,在程序运行时它的每一部分内容都要加载到内存中再被使用.那么对象类型的数据在内存中是如何分配的呢?咱们先来了解下内存结构,逻辑上内存大体被分为四段,分别为:栈.堆.数据段和代码段,程序中不同类型数据的声明将会被存放在不同的内存段里面,每段内存的特点是这样的: 1.栈 栈的特点就是空间小但被CPU访问的速度快,适合存放程序中临时创建的变量.由于栈的先进后出的特点,所以栈

PHP对象类型在内存中的分配

对象类型和整型.字符串等类型一样,也是PHP中的一种数据类型.都是在程序中用于存储不同类型数据使用的,在程序运行时它的每部分内容都要先加载到内存中再被使用.那么对象类型的数据在内存中是如何分配的呢?先来了解一下内存结构.逻辑上内存大体被分为四段,分别为栈空间段.堆空间段.初始化数据段和代码段,程序中不同类型数据的声明将会被存在不同的内存段里面.每段内存的特点如下.①.栈空间段栈的特点是空间小但被CPU访问的速度快,是用户存放程序中临时创建的变量.由于栈的后进先出特点,所以栈特别方便用来保存和恢复

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

对象与内存的分析: 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

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

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

Java千百问_06数据结构(016)_引用类型数组在内存中如何储存

点击进入_更多_Java千百问 1.存放基本类型数组在内存中如何储存 java的数组中可以存放引用类型. 存放引用类型的内存分布相比存放基本类型相对复杂.来看一段存储基本类型的程序: 了解什么是数组看这里:java中的数组是什么 了解数组在内存中的储存看这里:java数组如何存储在内存中 public class TestPrimitiveArray { public static void main(String[] args) { //1.定义数组 int[] numbers; //2.分配

Java千百问_06数据结构(023)_基本数据类型在内存中如何存放

点击进入_更多_Java千百问 1.基本数据类型在内存中如何存放 了解基本数据类型看这里:java有哪8种基本数据类型 对于java中的8种基本数据类型,可以通过如下方式赋值给变量赋值. int a = 3; float b = 4.0f; a = a + 2; 8中基本数据是将具体值直接存放在栈中,在发生变更时,将具体值替换为新的值.具体如下: 了解java如何管理内存看这里:jvm是如何管理内存的 了解java堆和栈的区别看这里:java堆和栈有什么区别 对于基本数据类型,并没有基本数据池的

python中对象初始化放在内存中什么位置

截屏自<Python源码剖析>正文第一页. 也即: 当在其他class中使用 时,node是在堆中的.相当于在C中调用malloc. 不仅仅是对于像Node这样的class 的对象是存在于堆中的,在Python中就连int类型的数值同样是存在在堆中的.因为在Python中就连基本数据类型同样是对象. 让我们思考下Node中的value和self.value这两个变量: 为什么在Node中其他的方法能够调用self.value而不能够调用value? 以前我使用C/C++的思维方法来理解这个问题

动态代理 -- 不用手动编写一个代理对象,不需要编写与目标对象相同的方法,在运行时内存中动态生成代理对象。

动态代理创建的核心代码: TargetInterface objProxy = (TargetInterface) Proxy.newProxyInstance( Target.class.getClassLoader(),//与目标对象相同的类加载器 new Class[]{TargetInterface.class}, new InvocationHandler() { @Override //proxy 即该代理对象 //method 代理对象的方法,里面封装这接口中的所有方法 //arg

java对象在堆内存中的分配原则

1.对象优先分配在Eden区,如果Eden区没有足够的空间时,虚拟机执行一次Minor GC. 2.大对象直接进入老年代(大对象是指需要大量连续内存空间的对象).这样做的目的是避免在Eden区和两个 Survivor区之间发生大量的内存拷贝(新生代采用复制算法收集内存). 3.长期存活的对象进入老年代.虚拟机为每个对象定义了一个年龄计数器,如果对象经过了1次Minor GC那么对象会进入Survivor区,之后每经过一次Minor GC那么对象的年龄加1,知道达到阀值对象进入老年区. 4.动态判