Tag: 最终

应该在“大写”中声明“静态最终logging器”吗?

在Java中,静态最终variables是常量,惯例是它们应该是大写的。 但是,我看到大多数人都以小写字母的forms声明了违规发生在PMD中的logging器 。 例如: private static final Logger logger = Logger.getLogger(MyClass.class); 只要search谷歌或SO “静态最终logging器”,你会看到这一点。 我们应该使用LOGGER吗?

静态块和静态variables以什么顺序执行?

可能重复: Java静态类的初始化 为什么stringvariables在初始化块中更新,而不是整数(即使块先写入) class NewClass { static { System.out.println(NewClass.string+" "+NewClass.integer); } final static String string="static"; final static Integer integer=1; public static void main(String [] args)//throws Exception { } } 我的输出是 static null PS:还注意到stringvariables初始化发生在块之前,只有当我插入最后修改。 为什么呢?为什么不是整数?我也宣布它是最后的静态

为什么静态初始化块中不允许有一个合格的static finalvariables?

情况1 class Program { static final int var; static { Program.var = 8; // Compilation error } public static void main(String[] args) { int i; i = Program.var; System.out.println(Program.var); } } 案例2 class Program { static final int var; static { var = 8; //OK } public static void main(String[] args) { System.out.println(Program.var); } } […]

为什么我应该在Java的方法参数中使用关键字“final”?

当在方法参数上使用final关键字时,我无法理解final关键字在哪里。 如果我们排除匿名类的使用,可读性和意向声明,那么对我来说似乎几乎是毫无价值的。 强调一些数据保持不变并不像看起来那么强劲。 如果参数是一个基元,那么它将不起作用,因为该参数作为一个值传递给该方法,并且改变它将不会影响该范围。 如果我们通过引用传递一个参数,那么引用本身就是一个局部variables,如果引用是从方法内部改变的,那么在方法范围之外不会有任何影响。 考虑下面的简单testing例子。 虽然该方法改变了给定的参考值,但该testing通过,但是没有效果。 public void testNullify() { Collection<Integer> c = new ArrayList<Integer>(); nullify(c); assertNotNull(c); final Collection<Integer> c1 = c; assertTrue(c1.equals(c)); change(c); assertTrue(c1.equals(c)); } private void change(Collection<Integer> c) { c = new ArrayList<Integer>(); } public void nullify(Collection<?> t) { t = null; }

在ArrayBlockingQueue中,为什么要将最终成员字段复制到本地最终variables?

在ArrayBlockingQueue ,所有需要锁的方法在调用lock()之前将其复制到本地finalvariables中。 public boolean offer(E e) { if (e == null) throw new NullPointerException(); final ReentrantLock lock = this.lock; lock.lock(); try { if (count == items.length) return false; else { insert(e); return true; } } finally { lock.unlock(); } } 当字段this.lock是final时候,是否有任何理由将this.lock复制到局部variableslock final ? 此外,它还在使用E[]之前使用本地副本: private E extract() { final E[] items = this.items; E x […]