我们怎么可能在创建对象时初始化类的最终变量?谁能解释一下这怎么可能?... 最佳答案 您必须一次且仅一次初始化最终变量。对于实例变量,可以通过三种方式执行此操作:在构造函数中在实例初始化block中。当你申报的时候以下是这三者的示例:publicclassX{privatefinalinta;privatefinalintb;privatefinalintc=10;{b=20;}publicX(finalintval){a=val;}}在每种情况下,当您调用newX(...)时,代码将运行一次,并且无法再次调用其中任何一个,这满足了
为什么人们如此强调让类中的每个变量都成为“最终”变量?我不认为将final添加到私有(private)局部变量有任何真正的好处,或者真的将final用于常量以外的任何东西并将变量传递给匿名内部类。我无意挑起任何形式的口水战,我只是真诚地想知道为什么这对某些人来说如此重要。我错过了什么吗? 最佳答案 意图。修改您的代码的其他人不会更改他们不应该更改的值。如果编译器知道某个字段的值永远不会改变,则可以进行编译器优化。此外,如果类中的每个变量都是最终变量(如您在帖子中所指),那么您就有了一个不可变类(只要您不公开对可变属性的引用),这是实
我一般认为资源清理是在finallyblock中完成的,最近我在一个类中发现了这个特定的代码片段,它覆盖了Object类'finalize()方法。protectedvoidfinalize(){try{In.close();Out.close();socket.close();}catch(Exceptione){//loggercodehere}}这是个好主意吗?finalize()相对于finally的优缺点是什么? 最佳答案 finallyblock只是一个始终在tryblock之后执行的代码块,即使出现异常也是如此。即它在
我有一个Maven项目,它使用带有logback的slf4j作为记录器。我可以看到这两个Artifact都在我的Maven依赖项树项中。但是每当我尝试运行我的项目时,我都会收到提示:SLF4J:Failedtoloadclass"org.slf4j.impl.StaticLoggerBinder".SLF4J:Defaultingtono-operation(NOP)loggerimplementationSLF4J:Seehttp://www.slf4j.org/codes.html#StaticLoggerBinderforfurtherdetails.我查看了链接,上面写着:Pl
java背后是否有特殊原因?包装类(java.lang.Integer、java.lang.Boolean、...)没有共同的父类(superclass)型?我问是因为拥有(例如)WrapperType::getType会很方便沿袭经典功能Object::getClass这将返回原始类型的类。更具体地说,上下文是通过反射调用构造函数,而您只有Class。和参数Object[]例如:publicstaticTcreateInstance(Classclz,Object...params)throwsException为了获取构造函数,我可以通过以下方式获取参数类型:Class[]c=Ar
我的应用程序在Windows中运行,但在Linux中失败并出现Givenfinalblocknotproperlypadded异常。配置:JDK版本:1.6Windows:版本7Linux操作系统:CentOS5.864位我的代码如下:importjava.io.IOException;importjava.io.UnsupportedEncodingException;importjava.security.InvalidKeyException;importjava.security.Key;importjava.security.NoSuchAlgorithmException;
这是同一问题的稍微详细的版本。我们不能在子类中访问(父类(superclass)的)protected变量,子类在不同的包中。我们只能访问父类(superclass)的继承变量。但是,如果我们将修饰符更改为“protectedstatic”,那么我们也可以访问父类(superclass)的变量。为什么会这样?这是我试图解释的相同代码片段。packagefirstOne;publicclassFirst{**protected**inta=7;}packagesecondOne;importfirstOne.*;publicclassSecondextendsFirst{protecte
当我使用像java.util.Scanner或java.io.BufferedReader这样的IO类时,Eclipse显示警告Resourceleak:'suchAndSuch'is从未关闭。如何让Eclipse在未关闭时为我自己的类显示此警告?我想知道是否有一个接口(interface)或我需要实现的东西来使我的类像IO类一样被对待,以便它独立于任何一个IDE,例如当资源未关闭时,命令行javac也会显示警告。 最佳答案 Eclipse对任何实现了java.io.Closeable的类发出“永不关闭”的警告classXimple
publicclassJ{publicIntegermethod(Integerx){Integerval=x;try{returnval;}finally{val=x+x;}}publicstaticvoidmain(String[]args){JlittleFuzzy=newJ();System.out.println(littleFuzzy.method(newInteger(10)));}}它将返回“10”。现在我只是将ReturntypeInteger替换为StringBuilder并且Output已更改。publicclassI{publicStringBuildermet
在这段代码中,为什么类型不能声明为Class?publicclassFoo{publicvoiddoSomething(Bargument){Classtype=argument.getClass();}} 最佳答案 这个问题是Java的语法不允许getClass()说它返回的类型与其定义的类匹配,就编译器而言,这不是特例。所以你被迫转换结果。在许多情况下,您希望能够指定this类型,例如用于链接,所以我希望有一天他们会包含此功能。你可以写ClassgetClass();或publicthisclone();//mustreturn