草庐IT

c# - 为什么在 "try"或 "catch"或 "finally"的范围内声明的变量没有?

在C#和Java(可能还有其他语言)中,在“try”block中声明的变量不在相应的“catch”或“finally”block的范围内。例如,以下代码无法编译:try{Strings="test";//(morecode...)}catch{Console.Out.WriteLine(s);//Javafans:think"System.out.println"hereinstead}在此代码中,catchblock中对s的引用会发生编译时错误,因为s仅在tryblock的范围内。(在Java中,编译错误是“scannotberesolved”;在C#中,是“Thename's'do

java - 为什么在 finally block 中更改返回的变量不会更改返回值?

我有一个简单的Java类,如下所示:publicclassTest{privateStrings;publicStringfoo(){try{s="dev";returns;}finally{s="overridevariables";System.out.println("EntryinfinallyBlock");}}publicstaticvoidmain(String[]xyz){Testobj=newTest();System.out.println(obj.foo());}}这段代码的输出是这样的:EntryinfinallyBlockdev为什么s没有在finallybl

java - 什么时候应该使用 final 作为方法参数和局部变量?

我发现了一些建议尽可能使用final的引用资料(forexample),我想知道这有多重要。这主要是在方法参数和局部变量的上下文中,而不是final方法或类。对于常量,这显然是有意义的。一方面,编译器可以进行一些优化,让程序员的意图更加清晰。另一方面,它增加了冗长,优化可能是微不足道的。这是我应该努力记住的吗? 最佳答案 沉迷于:Final字段-将字段标记为final会强制它们在构造结束时设置,使该字段引用不可变。这允许安全地发布字段,并且可以避免在以后读取时需要同步。(请注意,对于对象引用,只有字段引用是不可变的-对象引用所引用的

java - 从 Java 中的 finally block 返回

我最近惊讶地发现,在Java的finallyblock中可以有一个return语句。似乎很多人认为按照“Don'treturninafinallyclause”中所述的那样做是一件坏事。'。再深入一点,我还发现了'Java'sreturndoesn'talways'展示了finallyblock中其他类型的流控制的一些非常可怕的例子。所以,我的问题是,谁能给我一个示例,让finallyblock中的return语句(或其他流控制)产生更好/更易读的代码? 最佳答案 几年前我很难找到一个由此引起的错误。代码类似于:Objectprob

java - : The serializable class does not declare a static final serialVersionUID field?是什么意思

这个问题在这里已经有了答案:WhatisaserialVersionUIDandwhyshouldIuseit?(25个回答)关闭4年前。我有标题中给出的警告信息。我想了解并删除它。我已经找到了关于这个问题的一些答案,但由于技术术语过多,我不理解这些答案。能不能用简单的话来解释这个问题?附:我知道OOP是什么。我知道什么是对象、类、方法、字段和实例化。附言如果有人需要我的代码,就在这里:importjava.awt.*;importjavax.swing.*;publicclassHelloWorldSwingextendsJFrame{JTextAream_resultArea=ne

python - 为什么我们需要 Python 中的 "finally"子句?

我不确定为什么我们在try...except...finally语句中需要finally。在我看来,这个代码块try:run_code1()exceptTypeError:run_code2()other_code()使用finally与这个相同:try:run_code1()exceptTypeError:run_code2()finally:other_code()我错过了什么吗? 最佳答案 如果你早点回来会有所不同:try:run_code1()exceptTypeError:run_code2()returnNone#The

c++ - C++11 中的 "final"关键字用于函数的目的是什么?

C++11中final关键字的作用是什么?我知道它可以防止派生类覆盖函数,但如果是这种情况,那么将final函数声明为非虚拟还不够吗?我还有什么遗漏的吗? 最佳答案 正如idljarn在评论中已经提到的那样,您缺少的是,如果您从基类中覆盖一个函数,那么您不可能将其标记为非虚拟:structbase{virtualvoidf();};structderived:base{voidf()final;//virtualasitoverridesbase::f};structmostderived:derived{//voidf();//e

java - 是否应该以大写形式声明 "static final Logger"?

在Java中,静态最终变量是常量,并且约定它们应该大写。但是,我看到大多数人以小写形式声明记录器,这在PMD中被视为违规。.例如:privatestaticfinalLoggerlogger=Logger.getLogger(MyClass.class);只需搜索google或SO对于“静态最终记录器”,您将自己看到。我们应该改用LOGGER吗? 最佳答案 记录器引用不是常量,而是最终引用,不应大写。常量VALUE应为大写。privatestaticfinalLoggerlogger=Logger.getLogger(MyClass

java - Java 什么时候调用 finalize() 方法?

我需要知道finalize()方法在JVM中调用。我创建了一个测试类,该类在通过覆盖调用finalize()方法时写入文件。它不被执行。谁能告诉我它没有执行的原因吗? 最佳答案 finalize方法在对象即将被垃圾回收时调用。这可以在它符合垃圾收集条件后的任何时间。请注意,一个对象完全有可能永远不会被垃圾收集(因此永远不会调用finalize)。这可能发生在对象永远不符合gc条件(因为它在JVM的整个生命周期内都可以访问)或者在对象变得符合条件和JVM停止运行之间实际上没有运行垃圾收集时(这通常发生在简单的测试程序)。有一些方法可以

java - 为什么 Java 8 接口(interface)方法中不允许出现 "final"?

Java8最有用的特性之一是接口(interface)上的新default方法。引入它们的原因主要有两个(可能还有其他原因):提供实际的默认实现。示例:Iterator.remove()允许JDKAPI演进。示例:Iterable.forEach()从API设计者的角度来看,我希望能够在接口(interface)方法上使用其他修饰符,例如最终。这在添加便捷方法时很有用,可以防止在实现类中“意外”覆盖:interfaceSender{//Conveniencemethodtosendanemptymessagedefaultfinalvoidsend(){send(null);}//Im