Java定义类须注意三件事:一是public类名必须与文件名完全一致;二是构造方法逻辑缺失或访问修饰符错误会导致对象无法创建;三是字段默认初始化值不可依赖,且new操作严格按内存分配→默认初始化→构造执行→引用返回顺序进行。

Java中定义类时必须注意的三件事
类不是模板,而是类型定义;写错访问修饰符或遗漏构造逻辑,对象根本创建不出来。
-
public类名必须与文件名完全一致,大小写敏感。比如类叫Person,文件就得是Person.java - 不写任何构造方法时,编译器会默认加一个无参
public Person() {};但只要写了带参构造,这个默认无参构造就没了——后续用new Person()会直接编译报错 - 字段(成员变量)如果不显式初始化,数值类型默认为
0或0.0,引用类型默认为null,但别依赖这个,该赋值就赋值
new Person() 背后到底发生了什么
执行 new 不只是分配内存,它是一串严格顺序的操作:内存分配 → 字段默认初始化 → 构造方法执行 → 引用返回。中间任一环节失败,对象就无法完成构建。
- 如果构造方法里调用了
this(...)或super(...),它们必须是第一行语句,否则编译不通过 - 构造方法里抛出异常(比如检查参数为
null并 throwIllegalArgumentException),会导致对象创建中途终止,引用变量仍为null - 静态字段在类加载时初始化,早于任何
new实例;而实例字段在每次new时才初始化
对象使用中最容易踩空的引用陷阱
Java只有值传递,但“值”可能是引用地址——误以为修改形参会影响实参,是新手高频错误。
本书全面介绍PHP脚本语言和MySOL数据库这两种目前最流行的开源软件,主要包括PHP和MySQL基本概念、PHP扩展与应用库、日期和时间功能、PHP数据对象扩展、PHP的mysqli扩展、MySQL 5的存储例程、解发器和视图等。本书帮助读者学习PHP编程语言和MySQL数据库服务器的最佳实践,了解如何创建数据库驱动的动态Web应用程序。
public class Example {
public static void main(String[] args) {
Person p = new Person("Alice");
changeName(p); // 这里传的是 p 的引用值的拷贝
System.out.println(p.getName()); // 输出仍是 "Alice",除非 changeName 内部改了 p.name
}
static void changeName(Person person) {
person = new Person("Bob"); // 只改变了形参 person 的指向,不影响外部 p
}
}
- 对对象字段赋值(如
person.name = "Bob")会影响原对象,因为两个引用指向同一块堆内存 - 把引用设为
null(如person = null)只影响当前变量,不影响其他持有该对象引用的地方 - 数组、
ArrayList、StringBuffer等容器类同理:改变容器内容会影响原对象,但让引用指向新容器不会
什么时候该用 static,什么时候必须 new
混淆 static 成员和实例成员,会导致状态错乱或 NullPointerException。
立即学习“Java免费学习笔记(深入)”;
-
static方法不能直接访问非static字段或方法,因为它们属于类,不依附于任何具体对象 -
工具类(如
Math、Arrays)全用static,不需要也不应该new;而有状态的实体(如BankAccount、HttpRequest)必须new出实例 - 内部类如果是
static的,就不能访问外部类的实例字段;非static内部类(即成员内部类)则隐含持有一个外部类引用,滥用会导致内存泄漏
static、某个方法该不该是 static、某个对象该复用还是每次都 new——这些决定藏在业务语义里,而不是语法书里。









