Porque final e não public static?

Ae galera…estou fazendo uma aplicação e não estou conseguindo deixar o objeto clientSocket uma public static, segundo o Java, apenas Final é permitido , eu sei que final são para variaveis que não podem ser alteradas(ME corrigem se estiver errado) mas porque eu não posso deixar public, se eu usar final os outros métodos não enxergam ela.

Seguem o código abaixo:

Obrigado.

import java.io.; // classes para input e output streams
import java.net.
; // classes para socket, serversocket e clientsocket

class TCPClient {
public static void CriaSocket() throws Exception{

	// cria o stream do teclado
	//BufferedReader inFromUser = new BufferedReader( new
	//InputStreamReader(System.in));

	// cria o socket de acesso ao server hostname na porta 6789
	[b]final Socket clientSocket= new Socket("LocalHost", 6789);[/b]

}
public static void EnviaMensagem(String mensagem){
	// cria os streams (encadeamentos) de saida com o servidor
	DataOutputStream outToServer =
		new DataOutputStream([b]clientSocket.[/b]getOutputStream());


	// le uma linha do teclado e coloca em sentence
	mensagem = "Sidney";

	// envia a linha para o server
	outToServer.writeBytes(mensagem + '\n');
}
public static String RecebeMensagem(){
	// cria os streams (encadeamentos) entrada com o servidor

	BufferedReader inFromServer =
		new BufferedReader(new InputStreamReader(
				[b]clientSocket[/b].getInputStream()));
	// lê uma linha do server
	String modifiedSentence = inFromServer.readLine();

	// apresenta a linha do server no vídeo
	System.out.println("FROM SERVER " + modifiedSentence);

}
public static void FechaConexao(){
	// fecha o cliente
	//clientSocket.close();

}
public static void main(String args[]){
}

}

Isso acontece porque dentro de um método não pode haver modificadores de acesso. Os modificadores só podem ser usados nas propriedades da classe. Assim:

[code]
import java.io.; // classes para input e output streams
import java.net.
; // classes para socket, serversocket e clientsocket

class TCPClient {

public static final Socket clientSocket = new Socket(“LocalHost”, 6789);

//MÉTODOS…[/code]

Boa sorte!

Mas eu tenho que colocar essa linha dentro de um bloco try catch e não estou conseguindo colocar o try la no inicio da minha classe…

class TCPClient {
try{
public static final Socket clientSocket = new Socket(“LocalHost”, 6789);
}Catch(IOException e){
//
}

Tente assim:

[code]class TCPClient {
public static final Socket clientSocket;

static {
try{
clientSocket = new Socket(“LocalHost”, 6789)
}Catch(IOException e){
//
}

// outros métodos…
}[/code]

fw

bom…quase…mas ele esta reclamando no public static final Socket clientSocket;, ele diz “O campo final em branco clientSocket pode não ter sido inicializado;”

class TCPClient { 
   [b]public static final Socket clientSocket; [/b]
 
   static {
      try{ 
         clientSocket = new Socket("LocalHost", 6789)
      }Catch(IOException e){ 
    // 
     } 
 
    // outros métodos....
 }

Valeu!!!

Então, este não é caso de se utilizar constantes (public static final). Utilize variável de instância para inicializar esse socket. Você poderia utilizar constantes para o host e a porta. Assim:

[code]
class TCPClient {

private Socket clientSocket;
public static final String HOST = “localhost”;
public static final int PORT = 6789;

//No seu método criaSocket() você inicializa o socket.
public static void CriaSocket() throws Exception{
this.clientSocket = new Socket(HOST, PORT);
}

//Nos outros métodos, você chama o socket por
//this.clientSocket, ou simplesmente clientSocket.
//Se você quiser que clientSocket seja visível em
//outras classes, implemente o método getClientSocket().
//Assim, outras classes podem invocar tal método a partir
//instância da classe TCPClient.
public Socket getClientSocket() {
return this.clientSocket;
}[/code]
Boa sorte!

[quote=Dieval Guizelini]Tente assim:

[code]class TCPClient {
public static final Socket clientSocket;

static {
try{
clientSocket = new Socket(“LocalHost”, 6789)
}Catch(IOException e){
//
}

// outros métodos…
}[/code]

fw[/quote]

Teria como explicar como funciona essa implementação “static { … }”?