我有以下两个类(在两个单独的文件中).
public class Foo
{
public static class A
{
public static final boolean FLAG = false;
}
public final A A = new A();
}
public class Bar
{
void method()
{
if (Foo.A.FLAG) <<<< this is giving "Cannot make static ref to non-static field
// do something
;
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题是,为什么编译器不能记录通过Foo.A,我的意思是类A,而不是成员,这也恰好被命名A?
我想知道是否有这样的方法通过扩展为java中的每个循环迭代多个集合.
所以类似于:
for (Object element : collection1, collection2, ....)
// do something ...
Run Code Online (Sandbox Code Playgroud)
谢谢
如何引用shell脚本中的当前目录?
所以我有这个脚本调用同一目录中的另一个脚本:
#! /bin/sh
#Call the other script
./foo.sh
# do something ...
Run Code Online (Sandbox Code Playgroud)
为此,我得到了 ./foo.sh: No such file or directory
所以我改成了:
#! /bin/sh
#Call the other script
foo.sh
# do something ...
Run Code Online (Sandbox Code Playgroud)
但是这会调用foo默认情况下在PATH中的脚本.这不是我想要的.
所以问题是,./在shell脚本中引用的语法是什么?
是否在其他地方可以访问静态块内的变量?他们是什么样的"成员"(即,他们也是静态成员吗?)
出于某种原因,/tmp据说我100%使用.
root$ df
Filesystem 1K-blocks Used Available Use% Mounted on
overflow 1024 1024 0 100% /tmp
... other stuff ...
Run Code Online (Sandbox Code Playgroud)
运行输出 df -h
$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 102G 72G 25G 75% /
none 4.0K 0 4.0K 0% /sys/fs/cgroup
udev 7.8G 4.0K 7.8G 1% /dev
tmpfs 1.6G 844K 1.6G 1% /run
none 5.0M 0 5.0M 0% /run/lock
none 7.8G 240K 7.8G 1% /run/shm
none 100M 16K 100M 1% /run/user
overflow 1.0M 1.0M …Run Code Online (Sandbox Code Playgroud) 在我的build.xml文件中,我有以下几行:
<property environment="env"/>
<echo message="JAVA_HOME is set to = ${env.JAVA_HOME}" />
Run Code Online (Sandbox Code Playgroud)
在某些机器上,这将打印出来
"JAVA_HOME is set to = /usr/jdk1.6"
Run Code Online (Sandbox Code Playgroud)
但在其他一些方面,它会打印出来
"JAVA_HOME is set to = ${env.JAVA_HOME}"
Run Code Online (Sandbox Code Playgroud)
有谁知道这会导致什么?
谢谢
有没有人碰巧知道下面两种读取输入文件的方法之间的性能是否存在差异?谢谢.
1)使用扫描仪和文件读取文件
Scanner input = new Scanner(new File("foo.txt"));
Run Code Online (Sandbox Code Playgroud)
2)使用InputStreamReader和FileInputStream读取文件
InputStreamReader input = new InputStreamReader(new FileInputStream("foo.txt"));
Run Code Online (Sandbox Code Playgroud) 我是新手ScheduledThreadPoolExecutor(因为我通常使用简单的Timer,但人们一直在建议反对它),我不太明白传递给ScheduledThreadPoolExecutor(int)构造函数的适当整数值是什么.
有人能解释一下吗?
谢谢
当我得到一个NPE时,我会得到一个带行号的堆栈跟踪.这很有用,但是如果行非常密集和/或包含嵌套表达式,那么仍然无法确定哪个引用为null.
当然,这些信息一定在某处可用.有没有办法解决这个问题?(如果不是java表达式,那么至少导致NPE的字节码指令也会有帮助)
编辑#1:我看过一些评论暗示分手等等,没有任何冒犯,实际上是非建设性和无关紧要的.如果我能做到这一点,我会的!我只想说修改源是不可能的.
编辑#2:apangin在下面发布了一个很好的答案,我接受了.但是,对于那些不想自己尝试的人来说,我必须将输出包含在这里!;)
假设我有这个驱动程序TestNPE.java
1 public class TestNPE {
2 public static void main(String[] args) {
3 int n = 0;
4 String st = null;
5
6 System.out.println("about to throw NPE");
7 if (n >= 0 && st.isEmpty()){
8 System.out.println("empty");
9 }
10 else {
11 System.out.println("othereise");
12 }
13 }
14
15 }
Run Code Online (Sandbox Code Playgroud)
字节码看起来像这样(仅显示main()方法并省略其他不相关的部分)
Code:
stack=2, locals=3, args_size=1
0: iconst_0
1: istore_1
2: aconst_null
3: astore_2
4: getstatic #2 // Field java/lang/System.out:Ljava/io/PrintStream;
7: ldc #3 // String …Run Code Online (Sandbox Code Playgroud) 假设我有一堂课
public class Foo
{
public void doThing() { ...}
}
Run Code Online (Sandbox Code Playgroud)
说我有很多实例Foo,但我只对其中一个特别感兴趣.
我将如何"标记"该实例并设置一个"条件断点",doThings仅对标记的实例停止?是否有一种"内置"方式,尤其是Eclipse调试器,才能做到这一点?
目前,我必须在Foo类中手动创建一个布尔标志,默认情况下将其设置为false,并根据其中创建一个条件断点doThings.然后当我遇到感兴趣的对象时,我会true通过在Display窗口中执行setter代码来设置标志.
但很明显,这需要修改代码并添加一些样板,这并不总是可行的或者是好事.