定义:
是一种特殊类型的方法,用于创建对象时初始化对象的状态。
使用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. 用来存放程序中永远是不变或唯一的内容。(类代码信息、静态变量、字符串常量)