构造器详解

定义:

是一种特殊类型的方法,用于创建对象时初始化对象的状态。

使用new关键字创建对象

构造器特点:


1.和类名相同
2.没有返回值

public class Person {
     String name;

    public  Person() {
       this.name="John";
    }



}

 


public class Test {
        public static void main(String[] args) {
        Person p = new Person();
        System.out.println(p.name);
    }
}

 


使用new关键字创建的时候,除了分配内存空间之外,还会给创建好的对象进行默认的初始化
以及对类中构造器的调用。

一且定义了有参构造,无参就必须显示定义

创建对象内存分析:

 

 

创建对象时,内存分配主要涉及到两个方面:

栈内存和堆内存。

1. **栈内存(Stack Memory)**:
   - 在栈内存中,存储的是对象的引用(或指针)以及基本数据类型的值。
   - 当你声明一个对象变量时,比如 `MyClass obj;`,栈内存中会为该变量分配一块空间来存储对象的引用。
   - 如果是基本数据类型的变量,比如 `int x;`,栈内存中直接存储变量的值。

2. **堆内存(Heap Memory)**:
   - 在堆内存中,存储的是对象的实际数据。
   - 当你使用 `new` 关键字创建一个对象时,会在堆内存中分配一块空间来存储对象的数据,并返回对应的引用。
   - 对象的方法和成员变量都存储在堆内存中。

下面是一个简单的示例,展示了创建对象时内存的分配情况:


public class ObjectMemoryAnalysis {
    public static void main(String[] args) {
        // 声明对象变量,在栈内存中分配空间
        MyClass obj;

        // 创建对象,并在堆内存中分配空间,返回对象的引用,将引用赋给对象变量
        obj = new MyClass();

        // 对象的方法和成员变量都存储在堆内存中
        obj.setX(10);
        obj.setY("Hello");
    }
}

class MyClass {
    private int x;
    private String y;

    public void setX(int x) {
        this.x = x;
    }

    public void setY(String y) {
        this.y = y;
    }
}

在这个示例中,`obj` 对象变量在栈内存中分配了空间,然后通过 `new` 关键字在堆内存中为 `MyClass` 对象分配了空间,并将对象的引用赋给了 `obj`。对象的方法和成员变量存储在堆内存中,通过对象的引用可以访问和操作对象的数据。

栈 stack:


1. 每个线程私有,线程间不能共享!
2. 局部变量放置栈中。
3. 栈是由系统自动分配,速度快!栈是一个连续的内存空间!


堆 heap:


1. 放置new出来的对象!
2. 堆是一个不连续的内存空间,分配灵活,速度慢!


方法区(也是堆):


1. 被所有线程共享!
2. 用来存放程序中永远是不变或唯一的内容。(类代码信息、静态变量、字符串常量)

  • 8
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值