Quantas variaveis de classes há aqui?

10 respostas
diegofss11

How many class variables does the following class has?

public class MyClass{
	public static int x = 1;
	public char y = 'S';
}

A resposta é 1 … gostaria de saber, porque ?

E somente mais uma duvida =D

What is the output of the following class:

public class  MyClass{
	public static void main(String[] args) {
		String strMsg = "Welcome";
		strMsg += " to SCJA";
		strMsg.concat(" Certificate");
		System.out.println(strMsg);
	}
}

Muito obrigado!

10 Respostas

italons

a variável y, é uma variável de instancia, cada objeto dessa classe vai ter uma. Mas a variável x, por ser estatica, sera compartilhada por todos os membros dessa classe.

diegofss11

Pode ser considerada variavel estatica = variavel de classe (“variavel global”) ?

italons

Quanto a segunda duvida, o método concat da classe String retorna um valor, vc tem q fazer assim:

String strMsg = "Welcome";  
		strMsg += " to SCJA";  
		String msg = strMsg.concat(" Certificate");		
		System.out.println(strMsg);
		System.out.println(msg);

A saída é:

Welcome to SCJA
Welcome to SCJA Certificate

sacou?

flw

italons

Acho q não Diego, pois pense só: variáveis podem ser globais ao codigo de uma classe sem serem estáticas, como a varivel de instancia do código q vc mostrou. Variaveis globais existem mesmo em linguagens q nao sao orientadas à objetos.

A questao é q numa varivel estatica todas as instancias da classe enxergarão o mesmo valor.

Numa variável de instancia, cada instancia da classe terá seu valor lá, q poderá ou nao ser igual.

R

Acho q não Diego, pois pense só: variáveis podem ser globais ao codigo de uma classe sem serem estáticas, como a varivel de instancia do código q vc mostrou. Variaveis globais existem mesmo em linguagens q nao sao orientadas à objetos.

Exato.
A variável “estática” no Java seria aquela marcada como ‘final’

ViniGodoy

Variáveis estáticas são consideradas variáveis globais sim, exceto se forem privadas.
Qualquer classe dentro do escopo daquela variável a enxergará. Criar variáveis estáticas é uma péssima prática. Quase sempre é inútil e ela sempre causa muitas dores de cabeça.

No java, uma variável estática é marcada como static. O final é usado para definir constantes.

adriano_si

Fala Viny,

Como assim Dores de cabeca ??? To perguntando porque procuro evitar ao maximo o uso de Variaveis estaticas, mas sei la, algumas vezes nao consigo enxergar outra solucao, assim como metodos, (Principalmente alguns utils da vida)

Por exemplo, em nosso Sistema temos um Framework interno que contem alguns Utils (todos com metodos static). So que um amigo e eu precisamos de metodos que serao Utils da vida so que nao estao no Framework. Logo criamos o nosso Util e sempre que precisamos, colocamos um novo metodo static pra ser acessado direto pela classe sem precisar criar um objeto… Fizemos isso, pq no sistema eh usado o Spring e se tivermos um Objeto, vamos ter que Mapea-lo pra cada instancia que precisar desse util, ou seja, quase todas… Logo pensei que o static deixaria mais “simples”… Voce acha melhor eu criar um Objeto entao ?? Qual seria a vantagem ?? O Spring tem alguma forma de fzer com que eu mapeie uma classe para um contexto inteiro ao inves de ficar criando de Bean por Bean ???

Valews…

R

ViniGodoy:
Variáveis estáticas são consideradas variáveis globais sim, exceto se forem privadas.
Qualquer classe dentro do escopo daquela variável a enxergará. Criar variáveis estáticas é uma péssima prática. Quase sempre é inútil e ela sempre causa muitas dores de cabeça.

No java, uma variável estática é marcada como static. O final é usado para definir constantes.


Quis dizer estática no sentido de não ter seu valor modificado… :wink:

ViniGodoy

As variáveis estáticas sofrem dos seguintes problemas:
a) Nunca saem de escopo. Portanto, a menos que você as nulifique explicitamente, elas nunca serão coletadas pelo Garbage Collector. Isso é especialmente problemático se sua variável estática apontar para uma lista e boa parte dos memory leaks surgem daí.
b) Elas são péssimas quando você precisa garantir thread-safety, pois elas sempre são compartilhadas. Variáveis não estáticas diferentes podem habitar threads diferentes sem necessidade de sincronização. Elas são a principal causa de código thread-hostile (que nem com sincronização se resolve);
c) Dependendo do uso que você faça dessa variável, ela pode ter os mesmos problemas das variáveis globais.

Eu não falei em métodos estáticos. Métodos estáticos que recebem parâmetros de fora (como os seus Utils) são perfeitamente aceitáveis. Assim como métodos fábrica estáticos.

Essas observações também não valem para constantes estáticas.

adriano_si

Blz Viny… Saquei…

So fiquei preocupado porque tbm procuro evitar Variaveis static e realmente me surgiu essa duvida em relacao a componentes static como um todo… Valew pela explicaco, anotado…

Criado 2 de agosto de 2010
Ultima resposta 2 de ago. de 2010
Respostas 10
Participantes 5