boa tarde galera
alguem pode me explicar como funciona isso
static {
.
.
.
.
}
eu não entendo o que isso faz, parece um metodo chamado static sei lá
abs a todos
boa tarde galera
alguem pode me explicar como funciona isso
static {
.
.
.
.
}
eu não entendo o que isso faz, parece um metodo chamado static sei lá
abs a todos
Não é um método.
Isso vai fazer que logo quando java “ler” (não sei se é bem essa expressão) a classe (não necessariamente instanciar) vai executar esse trecho de código.
Isso não é um método e sim um bloco contendo instruções que serão executadas apenas uma vez (quando a classe for carregada).
Essas instruções só podem referenciar membros estáticos da classe a que pertence.
ele vai executar mesmo que a classe não seja instanciada neh?
Essas instruções só podem referenciar membros estáticos da classe a que pertence.
não entendi o que vc quis dizer com isso???
att
Essas instruções só podem referenciar membros estáticos da classe a que pertence.não entendi o que vc quis dizer com isso???
Vou dar um exemplo.
class Jaraqui {
public int x;
public static double y;
static {
x = 0; // dá erro de compilação porque x não é estática
y = 1.0; // esta linha está OK
}
}
Mass então eu posso executar normalmente chamando mtodos dentro contanto que eu não uso atributos não estaticos
exemplo
static {
ElementDesc elemField = new ElementDesc();
elemField.setFieldName("logradouro");
elemField.setXmlName(new QName("bean-mappings.xml", "logradouro"));
elemField.setXmlType(new QName("http://www.w3.org/2001/XMLSchema", "string"));
elemField.setNillable(true);
typeDesc.addFieldDesc(elemField);
elemField = new ElementDesc();
elemField.setFieldName("bairro");
elemField.setXmlName(new QName("bean-mappings.xml", "bairro"));
elemField.setXmlType(new QName("http://www.w3.org/2001/XMLSchema", "string"));
elemField.setNillable(true);
typeDesc.addFieldDesc(elemField);
}
ele vai executar mesmo que a classe não seja instanciada neh?Essas instruções só podem referenciar membros estáticos da classe a que pertence.
não entendi o que vc quis dizer com isso???
att
Sim, não precisa instanciar uma classe. No momento que a classe for chamada(de qualquer forma) pela primeira vez, esses atribuições inline à variáveis static e os blocos static serão executados na ordem que se encontram no código.
E métodos static só podem acessar variáveis static, e variáveis locais (contando também aquelas passadas como argumento para o parâmetro do método).
Exemplopublic class StaticTestMain
{
static int i = 1;
int j = 2;
public static void main(String[] args)
{
System.out.println(i);
System.out.println(j);
}
}
StaticTestMain.java:11: non-static variable j cannot be referenced from a static context
System.out.println(j);
1 error
public class StaticTestMain
{
static int i = 1;
int j = 2;
public static void main(String[] args)
{
System.out.println(i);
StaticTestMain main = new StaticTestMain();
System.out.println(main.j);
}
}
CONSTRUÍDO COM SUCESSO (tempo total: 0 segundos)
Mass então eu posso executar normalmente chamando mtodos dentro contanto que eu não uso atributos não estaticosO único atributo static aí é typeDesc. O resto é variável local, que não são atributos.exemplo
static { ElementDesc elemField = new ElementDesc(); elemField.setFieldName("logradouro"); elemField.setXmlName(new QName("bean-mappings.xml", "logradouro")); elemField.setXmlType(new QName("http://www.w3.org/2001/XMLSchema", "string")); elemField.setNillable(true); typeDesc.addFieldDesc(elemField); elemField = new ElementDesc(); elemField.setFieldName("bairro"); elemField.setXmlName(new QName("bean-mappings.xml", "bairro")); elemField.setXmlType(new QName("http://www.w3.org/2001/XMLSchema", "string")); elemField.setNillable(true); typeDesc.addFieldDesc(elemField); }