Visualizzazione dei risultati da 1 a 4 su 4

Discussione: inizio con java...

  1. #1

    inizio con java...

    Ciao,
    sto cercando di fare i primi esperimenti con java e dopo i primi esempi (riusciti) cerco di inventarmi qualcosa, ma subito ho dei priblemi:

    classe Main:
    codice:
    public class Main {
    	
    	private Network net1 = new Network();
    	
    	public static void main(String [] args) {
    		net1.setPort = 80;
    	}
    
    }
    classe Metwork:
    codice:
    import java.net.InetAddress;
    
    public class Network {
    	
    	private String localIp;
    	private String remoteIp;
    	private int port;
    
    	Network() {
    		try {
    			InetAddress thisIp = InetAddress.getLocalHost();
    			localIp = thisIp.getHostAddress();
            }
    		catch(Exception e) {
            	e.printStackTrace();
            }
    	}
    	
    	public void setLocalIp(String localIp) {
    		this.localIp = localIp;
    	}
    	public String getLocalIp() {
    		return localIp;
    	}
    	
    	public void setRemoteIp(String remoteIp) {
    		this.remoteIp = remoteIp;
    	}
    	public String getRemoteIp() {
    		return remoteIp;
    	}
    	
    	public void setPort(int port) {
    		this.port = port;
    	}
    	public int getPort() {
    		return port;
    	}
    }
    Eclipse mi da l'errore sulla riga net1.setPort = 80; della classe Main:
    Cannot make a static reference to the non-static field net1

    eppure il metodo setPort della classe Network è pubblico, perché non lo riconosce?

    Scusate se è banale ma non ne esco...

  2. #2
    Utente di HTML.it
    Registrato dal
    Jun 2011
    Messaggi
    10
    infatti devi portare dentro il main
    private Network net1 = new Network();
    perchè non è static

    codice:
    public class Main {
    	
    	public static void main(String [] args) {
                    Network net1 = new Network();
    		net1.setPort = 80;
    	}
    
    }

  3. #3

    Re: inizio con java...

    Originariamente inviato da daniele50
    codice:
    public class Main {
    	
    	private Network net1 = new Network();
    	
    	public static void main(String [] args) {
    		net1.setPort = 80;
    	}
    
    }
    Così facendo hai reso net1 un campo di istanza della classe Main e dal momento che lo hai reso tale puoi accedere solo con un metodo di istanza e non di classe (statico).

    Poi, setPort è un metodo, non è un campo/proprietà. La corretta sintassi per invocare un metodo di istanza è questa:
    codice:
    net1.setPort(80);

  4. #4
    Grazie ad entrambi, net1.setPort = 80 mi era scappato e l'ho corretto come indicato.
    Ma se creo l'oggetto net1 dentro al metodo main (della classe Main) non lo vedo più al di fuori di quel metodo, mentre l'oggetto net1 mi serve anche da altre parti...

    In sostanza mi serve l'oggetto net1 nell'intero progetto e voglio che quando viene caricata la classe Main assegni alla variabile port (dell'oggetto net1) un valore tramite il metodo setPort (sempre dell'oggetto net1).

    Come si può fare?

    EDIT

    Mi rispondo da solo:
    creo l'oggetto net1 fuori dal metodo main e di tipo statico
    codice:
    private static Network net1 = new Network();
    funziona, ma se non è logicamente corretto fatemelo sapere...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.