jjzjj

java - Java中的默认构造函数和继承

我有一个关于Java中的默认构造函数和继承的问题。一般来说,如果你写一个类并且不包含任何构造函数,Java会自动为你提供一个默认构造函数(一个不带参数的),它用一些默认值(如果有的话)初始化类的所有实例变量(如果有的话)0、null或false)。但是,如果您编写带有一些参数的构造函数,并且不编写任何默认构造函数,则Java不提供默认构造函数。我的问题是:从其他类继承的类是什么情况-如果我编写一个带有一些参数的构造函数,但不包含默认构造函数,它们是否继承了父类(superclass)的默认构造函数? 最佳答案 如果不做构造函数,th

java - 如何创建已知类型 : Class<List<String>> 的类文字

采取以下措施:publicClass>getObjectType(){//whatcanIreturnhere?}我可以从这个方法返回什么类文字表达式来满足泛型并编译?List.class不会编译,List.class也不会.如果您想知道“为什么”,我正在编写Spring的FactoryBean>的实现。,这需要我实现Class>getObjectType().但是,这不是Spring问题。编辑:SpringSource的权力已经听到了我的哀求,因此Spring3.0.1的返回类型将是getObjectType()改为Class,巧妙地避免了这个问题。 最佳

java - 如何创建已知类型 : Class<List<String>> 的类文字

采取以下措施:publicClass>getObjectType(){//whatcanIreturnhere?}我可以从这个方法返回什么类文字表达式来满足泛型并编译?List.class不会编译,List.class也不会.如果您想知道“为什么”,我正在编写Spring的FactoryBean>的实现。,这需要我实现Class>getObjectType().但是,这不是Spring问题。编辑:SpringSource的权力已经听到了我的哀求,因此Spring3.0.1的返回类型将是getObjectType()改为Class,巧妙地避免了这个问题。 最佳

java - 为什么Java在编译时绑定(bind)变量?

考虑以下示例代码classMyClass{publicStringvar="base";publicvoidprintVar(){System.out.println(var);}}classMyDerivedClassextendsMyClass{publicStringvar="derived";publicvoidprintVar(){System.out.println(var);}}publicclassBinding{publicstaticvoidmain(String[]args){MyClassbase=newMyClass();MyClassderived=newM

java - 为什么Java在编译时绑定(bind)变量?

考虑以下示例代码classMyClass{publicStringvar="base";publicvoidprintVar(){System.out.println(var);}}classMyDerivedClassextendsMyClass{publicStringvar="derived";publicvoidprintVar(){System.out.println(var);}}publicclassBinding{publicstaticvoidmain(String[]args){MyClassbase=newMyClass();MyClassderived=newM

java - JLS 是否需要内联最终字符串常量?

我在处理一些字节码时遇到了一个问题,其中某个finalString常量没有被java编译器(Java8)内联,请参见下面的示例:publicclassMyTest{privatestaticfinalStringENABLED="Y";privatestaticfinalStringDISABLED="N";privatestaticbooleanisEnabled(Stringkey){returnkey.equals("A");}privatestaticStringgetString(Stringkey,Stringvalue){returnkey+value;}publicst

java - JLS哪一部分说匿名类不能有public/protected/private成员类

考虑这段代码:publicclassTopLevelClass{Cloneablec=newCloneable(){privateintprivateField;privatevoidprivateMethod(){};};}有一个匿名类有一个private成员字段和一个private成员方法。编译成功。然后考虑这个:publicclassTopLevelClass{Cloneablec=newCloneable(){privateclassPrivateInnerClass{}};}有一个匿名类有一个private成员(member)类。然而……javac说:error:modifi

java - 捕获 Java 中的转换问题、JLS 的 WRT 协调和实际的 JDK 行为

给定以下两个类定义:classC1>{}classC2extendsC1>{}考虑以下类型声明:C1>c;这在JDK-8u45中编译得很好,但如果我们检查specificationforcaptureconversion,(在我看来)这个声明应该导致编译时错误。特别是新类型变量捕获的上界T#1由glb(Bi,Ui[A1:=S1,...,An:=Sn])给出,在这种情况下Bi解析为通配符绑定(bind)C2和Ui[A1:=S1,...,An:=Sn]解析为C1.由此,glb(C2,C1)解析为交集类型C2&C1,这是无效的,因为C2和C1都是类类型,不是接口(interface)类型,但

java - 'T.super' 是 JLS 的合法表达吗?

考虑以下一组表达式:classT{{/*1*/Objecto=T.super;//error:'.'expected/*2*/o.toString();}}尝试编译它会在/*1*/行失败并出现错误:error:'.'expectedo=T.super;^同时使用OpenJDK1.8.0(Ubuntu)或OracleJDK1.8(Windows)。但是,Eclipse4.5.0(Mars)编译没有任何错误,结果是:classT{T();0aload_0[this]1invokespecialjava.lang.Object()[8]//super()4aload_0[this]5asto

java - JLS 的哪些部分证明能够像未经检查一样抛出已检查异常?

我有recentlydiscoveredandbloggedaboutthefact可以通过javac编译器偷偷检查异常并将其抛出到不应抛出的地方。这在Java6和7中编译并运行,抛出SQLException没有throws或catch子句:publicclassTest{//Nothrowsclauseherepublicstaticvoidmain(String[]args){doThrow(newSQLException());}staticvoiddoThrow(Exceptione){Test.doThrow0(e);}staticvoiddoThrow0(Exception