Java中类是模板,存于方法区,不占堆内存;new在堆中创建对象并返回栈中引用。类含字段与方法,构造方法初始化对象;字符串字面量等少数情况可复用对象,但底层仍分配堆内存。

Java中声明类与创建对象是面向对象编程的基础,new关键字负责在堆内存中为对象分配空间并返回引用,而类本身只是模板,不占堆内存。
声明一个Java类
类是对象的蓝图,用class关键字定义,包含属性(字段)和行为(方法)。它本身不占用堆内存,只在方法区(元空间)加载一次。
- 类名首字母通常大写,如
Person - 字段定义数据状态,如
private String name; - 构造方法用于初始化对象,名称与类名相同,无返回类型
示例:
public class Person {private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
}
使用new创建对象并分配堆内存
当执行new Person("张三", 25)时,JVM在堆中开辟一块连续内存,存储该对象的实例变量,并调用构造方法完成初始化。返回的是指向这块内存的引用(存放在栈中)。
立即学习“Java免费学习笔记(深入)”;
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 语法格式:
类名 引用名 = new 类名(参数); - 每调用一次
new,就在堆中新建一个独立对象,彼此互不影响 - 若未赋值给引用,对象仍被创建,但因无引用而立即变为垃圾,可能被GC回收
示例:
Person p1 = new Person("张三", 25); // 堆中新建对象,p1指向它Person p2 = new Person("李四", 30); // 另一个独立对象,地址不同
类、引用与内存分布的关系
理解三者关系有助于避免常见误区:
- 类:静态结构,加载到方法区,不占堆
-
引用变量(如
p1):存于栈中,本质是32位或64位内存地址 -
对象实体:由
new生成,真实数据存在堆中 - 多个引用可指向同一对象(如
p2 = p1;),此时修改会影响双方
不使用new也能获得对象吗?
绝大多数情况下必须用new,但有少数例外:
- 字符串字面量(如
"hello")可能从字符串常量池复用已有对象 - 基本类型包装类(如
Integer.valueOf(100))在小数值范围可能缓存复用 - 反射(
Class.newInstance(),已过时)或反序列化也可创建对象,但底层仍涉及堆分配
这些方式最终仍会触发堆内存分配,只是对开发者透明。

















