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