当我在java类中编写构造函数时,我通常不会在其中调用super()。当我从eclipse源代码编辑器生成构造函数时,为什么它总是在其中添加super()?在我编写的构造函数中没有默认添加它是我错了吗?如果我决定使用eclipse代码生成器,那么在构造函数中保留super()调用有什么问题吗? 最佳答案 正如@Kon正确指出的那样,无论如何都存在对默认super构造函数的隐式调用(这可以通过使用javap-c检查字节码轻松验证)。如果您不希望Eclipse使其显式化,只需选中构造函数创建GUI底部的“省略对默认构造函数super()
请引用以下Java代码:classBase{Base(){System.out.println("BaseConstructor");method();}voidmethod(){}}classDerivedextendsBase{intvar=2;Derived(){System.out.println("DerivedConstructor");}@Overridevoidmethod(){System.out.println("var="+var);}}classTest2{publicstaticvoidmain(String[]args){Derivedb=newDerive
我的代码中有内部类。我想公开访问它的实例,但只有外部类才能创建这个实例,就像在“私有(private)”访问中一样。是否可以不制作适当的小包(或为每个此类内部类创建公共(public)接口(interface))?(对不起,如果我的英语不好:P) 最佳答案 这是可能的。将您的内部类声明为公开的,但将其构造函数声明为私有(private)的。这样,您只能在封闭类及其自身内部创建它,而不能从外部创建它。 关于Java-内部类构造函数-仅允许外部类,我们在StackOverflow上找到一个类
我一直觉得一般来说一个类的主要工作应该在它的实例方法中完成,而构造函数应该只是让实例进入可用的初始状态。但我发现在实践中,有些情况下将基本上所有实际工作都放入构造函数似乎更有意义。一个例子:我需要从数据库中检索一些特定于DBMS的信息。对我来说最自然的方法似乎是有一个带有构造函数的类DBMSSpecInfo:publicDBMSSpecInfo(java.sql.Connectionconn)throwsSQLException{//...retrieveinfofromDBMS}/**@returnsmaxsizeoftableinkiB*/publicintgetMaxTableS
Bellow是我在TutorialsPoints上找到的一个例子,一个构造函数的例子。我得到了其中的大部分,但我只是不明白为什么您需要一个构造函数和一个方法。publicPuppy(Stringname){System.out.println("PassedNameis:"+name);}我的问题是,是什么阻止了您这样做?publicstaticvoidPuppy(Stringname){System.out.println("PassedNameis:"+name);}这两个调用一次不是做同样的事情吗?完整程序供引用:publicclassPuppy{intpuppyAge;publ
假设您有以下代码classA{inti=4;A(){print();}voidprint(){System.out.println("A");}}classBextendsA{inti=2;//"thisline"publicstaticvoidmain(String[]args){Aa=newB();a.print();}voidprint(){System.out.println(i);}}这将打印02现在,如果您删除标记为“此行”的行代码将打印44我明白如果没有inti=2;行,Aa=newB();将调用类A,将i初始化为4,调用构造函数,它将控制权交给classB中的print
考虑这两个类:publicabstractclassBar{protectedBar(){System.out.println(getValue());}protectedabstractintgetValue();}publicclassFooextendsBar{privatefinalinti=20;publicFoo(){}@OverrideprotectedintgetValue(){returni;}publicstaticvoidmain(String[]args){newFoo();}}如果我执行Foo,输出是20。如果我将字段设置为非最终字段,或者如果我在Foo构造函
我有一些难看的代码,想重构它:publicclassUdpTransportextendsAbstractLayer{privatefinalDatagramSocketsocket;privatefinalInetAddressaddress;privatefinalintport;/*booleandeadisprovidedbysuperclass*/publicUdpTransport(Stringhost,intport){this.port=port;InetAddresstmp_address=null;try{tmp_address=InetAddress.getByN
我想制作一个处理格式化的帮助程序类(即具有删除标点符号和类型之间转换的方法,以及重新格式化名称等)。这似乎不需要任何字段-它的唯一目的是让传递的东西转换并返回它们,重新格式化。遗漏构造函数是不好的做法吗?如果是这样,我的构造函数应该做什么?我在看thislink并注意到它描述的类缺少构造函数。 最佳答案 Isitbadpracticetoleaveoutaconstructor?是的-因为除非您指定任何构造函数,否则Java编译器将为您提供一个与类本身具有相同可见性的构造函数。假设你所有的方法都是静态的——除非你想要多态性,否则这似
我正在尝试在非最终字段的对象初始化不足的情况下重现内存可见性问题(JLS17.5FinalFieldSemantics,FinalFieldExample类示例)。它指出“但是,f.y不是最终的;因此不能保证reader()方法看到它的值4”我试过这段代码:publicclassReorderingTest2{publicstaticvoidmain(String[]args){for(inti=0;i如previousmysimilartopic-我已经在装有Windows的不同PC(从2核到8核)上尝试过,甚至在我们的服务器端Solaris32核心盒上尝试过-我无法重现它:f.x和