在Java中,当你使用new
关键字创建一个对象时,你可以选择是否在类名后面加上括号。这是因为在Java中,可以省略括号来创建一个对象,只要没有任何参数需要传递给构造函数。
例如,假设有一个名为Person
的类:
public class Person {
private String name;
public Person() {
this.name = "John Doe";
}
public Person(String name) {
this.name = name;
}
// 其他方法...
}
你可以使用以下两种方式来创建一个Person
对象:
-
使用括号:
Person person1 = new Person(); // 调用无参构造函数
-
不使用括号:
Person person2 = new Person; // 也会调用无参构造函数
在这两种情况下,都将调用Person
类中的无参构造函数来创建一个Person
对象。
然而,如果类中没有提供无参构造函数,并且你尝试在创建对象时省略括号,将会导致编译错误。因为Java需要知道应该调用哪个构造函数来初始化对象。
总结起来,你可以选择在Java中创建对象时是否使用括号,但要确保这不会导致编译错误并符合你的代码逻辑。
学习测试代码
import javax.jnlp.PersistenceService;
class Scratch {
public static void main(String[] args) {
Person person = null;
System.out.println(person.toString());
Person person1 = new Person();
System.out.println(person1);
/* Person person2 = new Person("王国炜");
System.out.println(person2);*/
}
}
class Person {
private String name;
public Person() {
this.name = "null";
}
/* public Person(String name) {
this.name = name;
}*/
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
'}';
}
}
运行结果
"C:\Program Files\Java\jdk1.8.0_60\bin\java.exe" "-javaagent:D:\IntelliJ IDEA Community Edition 2020.2.2\lib\idea_rt.jar=59668:D:\IntelliJ IDEA Community Edition 2020.2.2\bin" -Dfile.encoding=UTF-8 -classpath "C:\Users\Administrator\AppData\Local\JetBrains\IdeaIC2020.2\compile-server\liaoxuefeng_d23a989f\scratches\out;C:\Program Files\Java\jdk1.8.0_60\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_60\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_60\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_60\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_60\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_60\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_60\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_60\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_60\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_60\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_60\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_60\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_60\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_60\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.8.0_60\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_60\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_60\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_60\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_60\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_60\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_60\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_60\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_60\jre\lib\rt.jar;C:\Users\Administrator\Desktop\Code\Design_Mode\liaoxuefeng\out\production\组合模式];C:\Users\Administrator\Desktop\Code\Design_Mode\liaoxuefeng\out\production\桥接模式;C:\Users\Administrator\Desktop\Code\Design_Mode\liaoxuefeng\out\production\适配器模式;C:\Users\Administrator\Desktop\Code\Design_Mode\liaoxuefeng\out\production\单例模式;C:\Users\Administrator\Desktop\Code\Design_Mode\liaoxuefeng\out\production\迭代器模式;C:\Users\Administrator\Desktop\Code\Design_Mode\liaoxuefeng\out\production\责任链模式;C:\Users\Administrator\Desktop\Code\Design_Mode\liaoxuefeng\out\production\访问者模式;C:\Users\Administrator\Desktop\Code\Design_Mode\liaoxuefeng\out\production\解释器模式;C:\Users\Administrator\Desktop\Code\Design_Mode\liaoxuefeng\out\production\观察者模式;C:\Users\Administrator\Desktop\Code\Design_Mode\liaoxuefeng\out\production\策略模式;C:\Users\Administrator\Desktop\Code\Design_Mode\liaoxuefeng\out\production\生成器模式;C:\Users\Administrator\Desktop\Code\Design_Mode\liaoxuefeng\out\production\状态模式;C:\Users\Administrator\Desktop\Code\Design_Mode\liaoxuefeng\out\production\模板方法;C:\Users\Administrator\.m2\repository\io\lettuce\lettuce-core\5.2.1.RELEASE\lettuce-core-5.2.1.RELEASE.jar;C:\Users\Administrator\.m2\repository\io\netty\netty-buffer\4.1.43.Final\netty-buffer-4.1.43.Final.jar;C:\Users\Administrator\.m2\repository\io\netty\netty-codec\4.1.43.Final\netty-codec-4.1.43.Final.jar;C:\Users\Administrator\.m2\repository\io\netty\netty-common\4.1.43.Final\netty-common-4.1.43.Final.jar;C:\Users\Administrator\.m2\repository\io\netty\netty-handler\4.1.43.Final\netty-handler-4.1.43.Final.jar;C:\Users\Administrator\.m2\repository\io\netty\netty-resolver\4.1.43.Final\netty-resolver-4.1.43.Final.jar;C:\Users\Administrator\.m2\repository\io\netty\netty-transport\4.1.43.Final\netty-transport-4.1.43.Final.jar;C:\Users\Administrator\.m2\repository\io\projectreactor\reactor-core\3.3.0.RELEASE\reactor-core-3.3.0.RELEASE.jar;C:\Users\Administrator\.m2\repository\com\beust\jcommander\1.82\jcommander-1.82.jar;C:\Users\Administrator\.m2\repository\junit\junit\4.10\junit-4.10.jar;C:\Users\Administrator\.m2\repository\org\hamcrest\hamcrest-core\1.1\hamcrest-core-1.1.jar;C:\Users\Administrator\.m2\repository\org\reactivestreams\reactive-streams\1.0.3\reactive-streams-1.0.3.jar;C:\Users\Administrator\.m2\repository\org\slf4j\slf4j-api\1.7.36\slf4j-api-1.7.36.jar;C:\Users\Administrator\.m2\repository\org\springframework\spring-core\5.0.8.RELEASE\spring-core-5.0.8.RELEASE.jar;C:\Users\Administrator\.m2\repository\org\springframework\spring-jcl\5.0.8.RELEASE\spring-jcl-5.0.8.RELEASE.jar;C:\Users\Administrator\.m2\repository\org\springframework\spring-test\5.0.8.RELEASE\spring-test-5.0.8.RELEASE.jar;C:\Users\Administrator\.m2\repository\org\testng\testng\7.7.1\testng-7.7.1.jar;C:\Users\Administrator\.m2\repository\org\webjars\jquery\3.6.1\jquery-3.6.1.jar;C:\Users\Administrator\Desktop\Code\Design_Mode\liaoxuefeng\out\production\工厂模式;C:\Users\Administrator\Desktop\Code\Design_Mode\liaoxuefeng\out\production\备忘录模式;C:\Users\Administrator\Desktop\Code\Design_Mode\liaoxuefeng\out\production\命令模式;C:\Users\Administrator\Desktop\Code\Design_Mode\liaoxuefeng\out\production\原型模式;C:\Users\Administrator\Desktop\Code\Design_Mode\liaoxuefeng\out\production\中介模式;C:\Users\Administrator\Desktop\Code\Design_Mode\liaoxuefeng\target\test-classes;C:\Users\Administrator\Desktop\Code\Design_Mode\liaoxuefeng\target\classes" Scratch
Exception in thread "main" java.lang.NullPointerException
at Scratch.main(scratch_5.java:6)
Process finished with exit code 1