Sou super novato em Java e estou com uma dúvida simples.
Na classe principal de um programa, criei uma const no topo da classe:
private static final int BOX_WIDTH = 180;
E uma instance variable no final dessa classe:
private int programX = (getWidth() - BOX_WIDTH)/2;
Quando usei a variável no método main dessa classe, o comportamento não foi o que eu esperava. Então, tirei o assignment da instance variable, deixando apenas a declaração:
private int programX;
E joguei o assignment pra dentro do método. E aí funcionou.
Fiquei então em dúvida sobre a ordem em que as coisas aconteceram no programa. Declarei uma constante no topo da classe e uma instance variable no final da classe que usa essa constante. Aí no momento em que o método main é chamado, eu não deveria ter o valor consistente dessa instance variable?
Uma variável de instância é criada no momento em que crias a tua instância.
Se o teu método getWidth() devolve uma variável width que ainda não foi inicializada (default é 0 para valores números nativos em variáveis de instância), o valor que getWidth() vai devolver é 0 e programX fica com -90.
Mas se deres mais contexto/colocares mais código será mais fácil de explicar.
Não.
Eu estava a supor que simplesmente terias uma variavel que não estavas a inicializar antes de usar.
Neste caso, e “seguindo” o código vejo que esse getWidth() é herdado de outra classe e o seu valor depende de outros factores.
Teria de seguir tudo isto para perceber exatamente de onde vem. Mas, ao usares diretamente na declaração de instancia, ainda deveria ter aquele centerPanel a null e o initFinished a false.
Resumidamente, estavas a tentar obter a altura de um componente que ainda não havia sido completamente criado.