匿名对象 new Person() 创建后可立即调用 public 非静态方法,语法为 new Person().methodName(),仅能调用一次且不可复用,适用于一次性操作如打印或初始化。

匿名对象 new Person() 创建后可以立即调用方法,只要该方法不是 static 的,且对象创建成功(构造函数无异常)。
直接调用实例方法
匿名对象没有变量名,所以只能在创建的同时调用其非静态方法,语法是:new Person().methodName()。
- 方法必须是
public(或对当前作用域可见),否则编译报错 - 只能调用一次——因为没保存引用,后续无法再访问这个对象
- 适合一次性操作,比如打印信息、触发初始化逻辑等
常见写法示例
假设 Person 类定义如下:
class Person {
public Person() {
System.out.println("Person created");
}
public void sayHello() {
System.out.println("Hello!");
}
public String getName() {
return "Anonymous";
}
}
那么这些写法都是合法的:
立即学习“Java免费学习笔记(深入)”;
-
new Person().sayHello();→ 输出Hello! -
System.out.println(new Person().getName());→ 输出Anonymous -
if (new Person().getName().length() > 0) { ... }→ 可用于条件判断中
不能做的事
匿名对象有明确限制:
- ❌ 不能重复调用多个方法(如
new Person().sayHello().getName()),除非sayHello()返回this(即支持链式调用) - ❌ 不能访问
private或包外不可见的方法 - ❌ 不能在后续代码中再次使用该对象(没有引用变量)
- ❌ 不能调用静态方法(
new Person().staticMethod()语法虽能通过,但语义错误;应直接用Person.staticMethod())
和普通对象对比
下面两段代码效果类似,但用途不同:
-
Person p = new Person(); p.sayHello(); p.getName();→ 可多次使用,适合需要复用对象的场景 -
new Person().sayHello();→ 简洁、临时、无状态,适合“用完即弃”逻辑
注意:如果方法有副作用(如修改内部状态、发请求、写日志),匿名调用也会真实执行,不要误以为它“不生效”。


















