Tag: 范围

Java中的本地范围

为什么大括号不在Java中定义单独的局部作用域? 我期待这是主要大括号语言(C,C ++,Java,C#)的共同特征。 class LocalScopeTester { public static void main(String… args) { Dog mine = new Dog(“fido”); if (mine.getName().equals(“ace”)) { Dog mine = new Dog(“spot”); // error: duplicate local } else { Dog mine = new Dog(“barkley”); // error: duplicate local { Dog mine = new Dog(“boy”); // error: duplicate local } } } }

为什么java要求在本地变量时初始化变量

请参阅下面的代码。 方法printTest()打印未初始化变量的默认值,但是当它涉及main方法时,java要求变量初始化。 任何人都可以解释原因吗? public class Test1 { public static void main(String[] args) { int j; String t; System.out.println(j); System.out.println(t); } } public class Test2 { int i; String test; public static void main(String[] args) { new Test().printTest(); } void printTest() { System.out.println(i); System.out.println(test); } }

索引范围的上限始终假定为独占?

所以在Java中,无论何时给出索引范围,上限几乎总是独占的。 来自java.lang.String : substring(int beginIndex, int endIndex) 返回一个新字符串,该字符串是此字符串的子字符串。 子字符串从指定的beginIndex开始,并扩展到索引endIndex – 1处的字符 来自java.util.Arrays : copyOfRange(T[] original, int from, int to) from – 要复制的范围的初始索引(包括) to – 要复制的范围的最终索引,不包括。 来自java.util.BitSet : set(int fromIndex, int toIndex) fromIndex – 要设置的第一个位的索引。 toIndex – 要设置的最后一位之后的索引。 正如您所看到的,它看起来像Java试图使其成为上限是独占的一致约定。 我的问题是: 这是官方权威推荐吗? 是否存在我们应该警惕的明显违规行为? 这个系统有名字吗? (ala“0-based”vs“1-based”) 澄清:我完全理解基于0的系统中的N对象的集合被索引为0..N-1 。 我的问题是,如果给定范围(2,4) ,它可以是3项或2,具体取决于系统。 你怎么称呼这些系统? 再次,问题不是“第一指数0最后指数N-1 ”与“第一指数1最后指数N ”系统; 这就是所谓的基于0和基于1的系统。 问题是“ (2,4) ”中有3个元素与“ […]

Java变量范围

当变量在本地范围和全局范围内初始化时,如何在不在同一个类中使用this关键字的情况下使用全局范围?

声明一个无用的局部变量

所以这是一个奇怪的,我知道代码本身是相当无用的,但我想知道为什么我得到错误: 我写了一些代码,我写了这个: if(scan.hasNextInt()) int row = scan.nextInt(); 当时没有考虑变量范围,显然这是没用的,因为我无论如何也不能使用row 。 我没有得到的是为什么我得到了错误: > javac hw.java hw.java:25: ‘.class’ expected int row = scan.nextInt(); ^ hw.java:25: not a statement int row = scan.nextInt(); ^ hw.java:25: illegal start of expression int row = scan.nextInt(); ^ hw.java:25: ‘;’ expected int row = scan.nextInt(); ^ 现在,如果我只是修改它,如果检查: if(scan.hasNextInt()) { int row = scan.nextInt(); […]

Input / OutputStreams在销毁时是否关闭?

Java中的InputStreams和OutputStreams是否在销毁时关闭()? 我完全理解这可能是糟糕的forms(特别是在C和C ++世界),但我很好奇。 另外,假设我有以下代码: private void foo() { final string file = “bar.txt”; Properties p = new Properties(); p.load( new FileInputStream(file) ); //… } 无名的FileInputStream是否在p.load()之后超出范围,因此被销毁,有点像C ++作用域规则? 我尝试在Google上搜索java的匿名变量范围,但这并没有出现我想象的那样。 谢谢。

为什么不能在if语句中声明变量?

以下Java代码无法编译。 int a = 0; if(a == 1) { int b = 0; } if(a == 1) { b = 1; } 为什么? 没有代码路径可以导致程序在不先声明的情况下分配1到b 。 在我看来, b的变量范围可能仅限于第一个if语句,但后来我不明白为什么。 如果我真的不想不必要地声明b ,以提高性能怎么办? 声明后,我不喜欢让变量闲置。 (你可能想争辩,但我可以简单地在第二个if语句中声明b,在这种情况下,想象一下它可能在其他地方的循环中。)

如何从Inner类访问阴影的外部类变量?

这不是直截了当的问题。 在我的例子中,外部类变量和内部类setter方法的参数名称是相同的。 喜欢: class Problem { String s; int p; class Inner { String testMethod() { return s = “Set from Inner”; } void setP(int p) { p=p; //it will do self assignment } } } 现在我无法使用this.p=p初始化外部类实例变量p,因为它表示内部类。 再一次我不能做问题Problem.p=p; 它出错了。 现在我如何分配外部p,保持内部类方法setP(int p)的参数名称为p?

do-while循环的范围?

在Java中, do-while循环的主体和循环条件不属于同一范围。 所以以下代码将无法编译: do { boolean b = false; } while (b); // b cannot be resolved to a variable 但是这段代码对我有意义。 而且,如果身体和状况在同一范围内,我找不到任何陷阱; 因为正文总是被执行,而Java没有Goto ,所以我不知道如何跳过最外层的do-while体范围中的变量声明。 即使有可能,编译器也总能检测到这种可能性,然后产生编译时错误。 这种行为是否有任何原因(除了将do-while循环保持为do-while相同的格式)? 我很好奇。 感谢您的任何投入!

JSF 2.0:为什么我的ViewScope Bean重新创建,即使仍然在同一个视图

在我的.xhtml页面中,我有以下表格: … … CustomerTemplate.xhtml是: … // import css, js files … // Other things on the page … 这是我的ManagedBean: @ManagedBean @ViewScoped public class MrBean { … private List items; … @PostConstruct public void prepareItemList() { … Map params = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap(); partnerID = Long.parseLong(params.get(“partnerID”)); … } } 如您所见,我的MrBean是一个ViewScoped ManagedBean。 我预计@PostContruct函数只会在第一次呈现页面时调用一次。 但是,当我单击Add To Cart按钮时,我在Long.parseLong(params.get(“partnerID”))行遇到了nullexception,即使我仍然在同一个View上。 如果有人能就如何解决这个问题给我一个建议,我将非常感激。 更新:我设法通过将commandButton包装在ajax标记内来使函数正常工作,如下所示: … […]