Java在new对象的时候加不加括号的区别

在Java中,当你使用new关键字创建一个对象时,你可以选择是否在类名后面加上括号。这是因为在Java中,可以省略括号来创建一个对象,只要没有任何参数需要传递给构造函数。

例如,假设有一个名为Person的类:

public class Person {
    private String name;

    public Person() {
        this.name = "John Doe";
    }

    public Person(String name) {
        this.name = name;
    }

    // 其他方法...
}

你可以使用以下两种方式来创建一个Person对象:

  1. 使用括号:

    Person person1 = new Person(); // 调用无参构造函数
    
  2. 不使用括号:

    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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王摇摆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值