dá pra fazer? algum exemplo simples?
Construtor static?
11 Respostas
public class Ponto {
private double x;
private double y;
public Ponto(int x, int y) {
this.x = x;
this.y = y;
}
public static Ponto porDistanciaDaOrigemEAngulo(double distancia, double angulo) {
return new Ponto(Math.cos(angulo) * tamanho, math.sin(angulo) * tamanho);
}
}
Ponto p1 = new Ponto(10, 10);
Ponto p2 = Ponto.porDistanciaDaOrigemEAngulo(10, Math.toRadians(45));
Construtor estático não existe, o construtor existe justamente para construir uma instância, o que existe são blocos estáticos de código:
static{
// seu código static aqui
}
que eu saiba não existem construtores estaticos em java, pois um construtor cria uma instancia da classe
Algumas pessoas chamam métodos fábrica (como o que demonstrei ali em cima) de construtores estáticos.
public class Ponto { private double x; private double y; public Ponto(int x, int y) { this.x = x; this.y = y; } public static Ponto porDistanciaDaOrigemEAngulo(double distancia, double angulo) { return new Ponto(Math.cos(angulo) * tamanho, math.sin(angulo) * tamanho); }
isso não é um construtor static?
Pode-se dizer que sim, mas é mais comum chamarmos esse tipo de construtor de método fábrica.
A única diferença é que, por mais que ele exista, ele ainda dependerá de um construtor para fazer seu trabalho.
Mesmo que esse construtor seja private.
Aliás, você não está limitado em criar um único objeto. Você poderia ter um método estático assim na classe ponto:
public List<Ponto> carregarDoSvg(File svg) {
//Aqui toda a lógica para carregar os pontos de um arquivo svg
}
Note que é um “construtor” que retorna uma lista, não um ponto só. 
Só complementando.
A API Java 2D está cheia de exemplos parecidos, no entanto lá são classes internas estáticas e a instanciação se dá por construtores normais das classes estáticas.
Exemplo:Point2D.Double pd = new Point2D.Double( 10, 10 );
Note que não são “construtores estáticos” na API Java 2D.
[]´s
Tem da forma que falei também:
InetAddress addr = InetAddress.getByName("www.google.com.br");
Outra vantagem dos “construtores” estáticos é que vc pode retornar não o próprio objeto, mas um filho dele. É o caso da InetAddress que as vezes retorna um Inet4Address e as vezes um Inet6Address.
agora fiquei meio confuso… Podemos dizer que existe de fato construtores estáticos ou é apenas uma forma aproximada de um construtor?
A rigor não é um construtor, mas um método que cria objetos da classe, atuando como um construtor.