相关疑难解决方法(0)

Java内部类和静态嵌套类

Java中的内部类和静态嵌套类之间的主要区别是什么?设计/实施是否在选择其中一个方面发挥作用?

java inner-classes static-classes

1691
推荐指数
21
解决办法
70万
查看次数

Java中的"final"关键字如何工作?(我仍然可以修改一个对象.)

在Java中,我们使用final带变量的关键字来指定其值不被更改.但我发现你可以改变类的构造函数/方法中的值.同样,如果变量是,static那么它是编译错误.

这是代码:

import java.util.ArrayList;
import java.util.List;

class Test {
  private final List foo;

  public Test()
  {
      foo = new ArrayList();
      foo.add("foo"); // Modification-1
  }
  public static void main(String[] args) 
  {
      Test t = new Test();
      t.foo.add("bar"); // Modification-2
      System.out.println("print - " + t.foo);
  }
}
Run Code Online (Sandbox Code Playgroud)

上面的代码工作正常,没有错误.

现在将变量更改为static:

private static final List foo;
Run Code Online (Sandbox Code Playgroud)

现在是编译错误.这final真的有用吗?

java final

457
推荐指数
9
解决办法
45万
查看次数

为什么局部变量在Java中是安全的

我正在阅读Java中的多线程,我遇到了这个问题

局部变量在Java中是线程安全的.

从那时起,我一直在思考如何/为什么局部变量是线程安全的.

有人可以让我知道.

java thread-safety

86
推荐指数
6
解决办法
4万
查看次数

访问java中内部类中的变量

我正在尝试创建一个JLabel数组,所有这些都应该在单击时隐藏.当尝试通过需要访问用于声明标签的循环的迭代变量的内部类来设置鼠标侦听器时,会出现问题.代码不言自明:

    for(int i=1; i<label.length; i++) {
       label[i] = new JLabel("label " + i);
       label[i].addMouseListener(new MouseAdapter() {
          public void mouseClicked(MouseEvent me) {
             label[i].setVisible(false);   // compilation error here
          }
       });
       cpane.add(label[i]);
    }
Run Code Online (Sandbox Code Playgroud)

我认为我可以通过使用this或者super代替label[i]内部方法中的调用来克服这个问题,但我无法弄明白.

编译错误是:从内部类中访问局部变量i; 需要被宣布为最终的

我敢肯定答案肯定是我没想过的傻事,或者我犯了一些小错误.

任何帮助,将不胜感激

java variables jlabel event-handling inner-classes

17
推荐指数
1
解决办法
4万
查看次数

对内部类的本地变量访问需要声明为final

我遇到了一个局部变量访问内部类的问题需要被声明为final.它来自方法createGrids() - >" squares[i][j] = 0;",我是一个需要声明为final的局部变量.我不知道为什么和我在字段中添加了final,但它不能正常工作.

import java.util.ArrayList;
import java.util.Random;
Run Code Online (Sandbox Code Playgroud)

//省略

public class Minesweeper{
    private JFrame frame;
    private int cols = 9;
    private int rows = 9;
    public static final int GRID_HEIGHT = 9;
    public static final int GRID_WIDTH = 9;
    final JButton[][] grids = new JButton[GRID_WIDTH][GRID_HEIGHT];
    final int [][] squares = new int [GRID_WIDTH][GRID_HEIGHT];
    private static int width = 500;
    private static int heigth = 400;

    private JPanel s;
    private JPanel n;
    private JPanel w;
    private int mines …
Run Code Online (Sandbox Code Playgroud)

java scope anonymous-class

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