Classes static

9 respostas
W

Bom dia a totos

Qual o prejuízo em termos de desempelho da utilização das classes static?

9 Respostas

ateubh

a classe fica instanciada na memória durante toda a execução do programa

W

entao se eu tenho um servidor com bastante memoria, nao vou ter problemas, certo?

ateubh

depende, se for uma aplicação web, vc vai ter uma classe para cada usuário

esb

Opa wilsonjsp,

Você está falando de atributos com o modificador static ou classes aninhadas static?

W
eu tenho a seguinte classe:
package model;

import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;

import model.objeto.Objetos;
import atributo.PersAtributo;




public class Distancia {
	
	private static final int TOTALDETIPOSATRIBUTO = 4;
	private static final int BINARIO = 0;
	private static final int NOMINAL = 1;
	private static final int ORDINAL = 2;
	private static final int QUANTITATIVO = 3;
	
	private static List grupoK = null;
	
	private static HashMap listaDeDistancias = new HashMap();
	
	public static float variancia(List gruposK) {

		float variancia = 0f;
		
		float media = 0;
		
		grupoK = gruposK;

		calculoDasDistanciaDosObjetosDoGrupo();		
		
		media = mediaDasDistancias();	
		
		for(int i = 0; i < grupoK.size(); i ++){
			
			for(int j = i+1; j < grupoK.size(); j ++){
				variancia += Math.pow ( getDistanciaIJ(i,j) - media, 2); 
			}
		}
		
		variancia = variancia/(listaDeDistancias.size()-1);
		
		return variancia; 
		
	}
	
	
	private static float getDistanciaIJ(int i, int j) {
		
		String distanciaIJ = new String(i+"|"+j);
	
		return ((Float)listaDeDistancias.get(distanciaIJ)).floatValue();
	}


	private static void calculoDasDistanciaDosObjetosDoGrupo() {

		for (int i = 0; i < grupoK.size()-1; i++) 
			for (int j = i+1; j < grupoK.size(); j++) 				
				listaDeDistancias.put(i+"|"+j, distanciaEntreObjetosIJ(grupoK.get(i),grupoK.get(j)) );
		}

	private static float mediaDasDistancias() {

		Collection colecaoDeValores = listaDeDistancias.values(); 

		Iterator iteratorDeValores = colecaoDeValores.iterator(); 

		float media = 0;
		
		int m = 0;

		
		while ( iteratorDeValores.hasNext() ) {
			
			media +=  ((Float)iteratorDeValores.next()).floatValue();
			m++;
		}

		return media/m;
	}

	
	private static Float distanciaEntreObjetosIJ(
			Object objetoI, 
			Object objetoJ) {
			
		Float distancia = new Float(3);
		return distancia;
		
	}
	
}
marcelo_mococa

lembrando q naum existe classes static.
Não posso usar o modificador static para classe, somente para membros (variáveis de instancia e métodos) da mesma.

adriano.ferranti

marcelo_mococa:
lembrando q naum existe classes static.
Não posso usar o modificador static para classe, somente para membros (variáveis de instancia e métodos) da mesma.

Existem as classes aninhadas estáticas de nível superior

public class Outer {
   static private int CountStatic = 0;
   int CountNonStatic = 0;

   public static class Inner {
      public void doInner() {
         System.out.println( CountStatic );
      }
   }
}
W

entao eu nao vou ter problemas de desempelho.

T

cuidado com colecoes mantidas em campos estaticos, pois como eles nao sao coletados pelo gc, pode levar a um consumo de memoria grande…

Criado 19 de julho de 2006
Ultima resposta 19 de jul. de 2006
Respostas 9
Participantes 6