小编One*_*ree的帖子

为什么Java编译器(特别是它的解析器)不能理解这个语句

我有以下两个类(在两个单独的文件中).

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

18
推荐指数
1
解决办法
704
查看次数

在同一个"for"循环中迭代多个集合?

我想知道是否有这样的方法通过扩展为java中的每个循环迭代多个集合.

所以类似于:

for (Object element : collection1, collection2, ....)
         // do something ...
Run Code Online (Sandbox Code Playgroud)

谢谢

java syntax iterator for-loop

16
推荐指数
1
解决办法
7744
查看次数

请参阅shell脚本中的当前目录

如何引用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脚本中引用的语法是什么?

shell

16
推荐指数
2
解决办法
3万
查看次数

在java中的静态块内声明的变量范围是什么?

是否在其他地方可以访问静态块内的变量?他们是什么样的"成员"(即,他们也是静态成员吗​​?)

java static static-members

15
推荐指数
2
解决办法
8407
查看次数

/ tmp安装只有1MB空间,100%使用,因为文件系统"溢出"

出于某种原因,/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)

ubuntu

14
推荐指数
1
解决办法
6885
查看次数

找不到$ {env.JAVA_HOME} - Ant

在我的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)

有谁知道这会导致什么?

谢谢

ant environment-variables java-home

14
推荐指数
2
解决办法
3万
查看次数

扫描仪与InputStreamReader

有没有人碰巧知道下面两种读取输入文件的方法之间的性能是否存在差异?谢谢.

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)

java file input

13
推荐指数
1
解决办法
2万
查看次数

ScheduledThreadPoolExecutor的构造函数中"核心池大小"的含义

我是新手ScheduledThreadPoolExecutor(因为我通常使用简单的Timer,但人们一直在建议反对它),我不太明白传递给ScheduledThreadPoolExecutor(int)构造函数的适当整数值是什么.

有人能解释一下吗?

谢谢

java threadpool threadpoolexecutor

13
推荐指数
2
解决办法
6480
查看次数

是否有可能追踪导致NPE的表达?

当我得到一个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)

java debugging jvm bytecode stack-trace

13
推荐指数
1
解决办法
332
查看次数

在java中为特定对象(而不是该类型的所有实例)设置(方法)断点

假设我有一堂课

public class Foo
{
     public void doThing() { ...}
}
Run Code Online (Sandbox Code Playgroud)

说我有很多实例Foo,但我只对其中一个特别感兴趣.

我将如何"标记"该实例并设置一个"条件断点",doThings仅对标记的实例停止?是否有一种"内置"方式,尤其是Eclipse调试器,才能做到这一点?

目前,我必须在Foo类中手动创建一个布尔标志,默认情况下将其设置为false,并根据其中创建一个条件断点doThings.然后当我遇到感兴趣的对象时,我会true通过在Display窗口中执行setter代码来设置标志.

但很明显,这需要修改代码并添加一些样板,这并不总是可行的或者是好事.

java eclipse debugging

11
推荐指数
1
解决办法
1274
查看次数