Есть ли разница между прямым назначением конечной переменной и назначением конечной переменной в конструкторе?

есть ли разница между этими двумя инициализациями конечной переменной value ?

class Test {
    final int value = 7;
    Test() {}
}

и

class Test {
    final int value;
    Test() {
        value = 7;
    }
}

-

EDIT: Более сложный пример, включающий подклассы. В этом случае на стандартный вывод выводится «0», но если я присваиваю значение напрямую, выводится 7.

import javax.swing.*;
import java.beans.PropertyChangeListener;

class TestBox extends JCheckBox {

    final int value;

    public TestBox() {
        value = 7;
    }

    public void addPropertyChangeListener(PropertyChangeListener l) {
        System.out.println(value);
        super.addPropertyChangeListener(l); 
    }

    public static void main(String... args) {
        JFrame frame = new JFrame();
        JPanel panel = new JPanel();
        frame.setContentPane(panel);
        panel.add(new TestBox());
        frame.pack();
        frame.setVisible(true);
    }
}
6
задан scravy 2 December 2011 в 11:54
поделиться