Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    [Java] Niubbo e le prime classi...

    Allora devo ammettere che se di C++ ne so abbastanza, di Java nn so quasi una cippa! :P

    cmq

    Ho iniziato da pochissimo a programmare in Java, praticamente da ieri pomeriggio e mi sono già bloccato su un errore che nn so come risolvere!!! Allora: ho 2 file Gatto.java e Gatti.java (w la fantasia del prof per il progetto!!!)

    codice:
    // Classe Gatto in Gatto.java
    public class GattoGerardo {
        
        /** Creates a new instance of GattoGerardo */
        public GattoGerardo() {
        }
        
        public int getDna(){
            System.out.print("Eccoti il dna\n");
            return 0;
        }
        
        
    }
    
    // Classe GATTI in Gatti.java
    
    public class Gatti {
     
        public Gatti()
        {
            primo = new GattoGerardo();
            secondo = new GattoGerardo();
        }
        
    static public void main(String args[])
        {
         primo.getDna();
         secondo.getDna();
        }
    
     private GattoGerardo primo;
     private GattoGerardo secondo;
    }
    Quando compilo ottengo questo errore per le chiamate ai metodi:

    /ProgettiJava/GattoGerardo/src/Gatti.java:27: non-static variable primo cannot be referenced from a static context

    Come si risolve sta cosa??? Penso che sia pazzesca la cose che il main possa invocare solo metodi static!!! Help!!!

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2004
    Messaggi
    724
    i metodi static possono maneggiare solo var static quindi deve essere

    codice:
    private static GattoGerardo primo;
     private static GattoGerardo secondo;

  3. #3
    Originariamente inviato da perzem
    i metodi static possono maneggiare solo var static quindi deve essere

    codice:
    private static GattoGerardo primo;
     private static GattoGerardo secondo;
    Cioè mi dici che il main deve invocare SOLO metodi static??? Ma che cavolo di linguaggio è allora!!! BHA!!!

  4. #4
    penso che c sia una ragione plausibile per questo! oppure si può risolvere in un altro modo!

  5. #5
    ...e il niubbo che si risponde da solo...


    allora tutto sta nel fatto che Gatti nel main nn viene proprio visto, dato che "main" non è un metodo di Gatti! :P

    Quindi bisogna instanziare un oggetto Gatti per porterne invocare i metodi! :P

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2004
    Messaggi
    724
    il main è un metodo di gatti mica è dichiarato fuori dalla classe

  7. #7
    Originariamente inviato da perzem
    il main è un metodo di gatti mica è dichiarato fuori dalla classe
    Nel senso che non è metodo della classe Gatti che può operare sugli attributi di Gatti! è SOLO contenuto in Gatti!!!

  8. #8
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Allora... io direi che prima di iniziare così bisognerebbe prendere un libro di teoria e guardarselo un po'.

    Non static variabile <cheneso> cannot be referenced from a static context
    La variabile non statica <cheneso> non può essere referenziata all'interno di un contesto statico.

    Stiamo parlando di variabili e non di metodi (prima pecca teorica)

    Mi pare più che logico che una variabile non statica (quindi legata all'esistenza di un'istanza di un oggetto) non possa essere referenziata all'interno di un contesto statico (che per definizione non è legato a nessuna istanza, ma solo alla classe).

    Questo significa che un contesto statico (come il main) non può utilizzare variabili (e sottolineo variabili) non statiche. Ciò non toglie che al suo interno si possano dichiarare e valorizzare viariabili di qualsiasi tipo (quindi anche oggetti) ed utilizzarli tranquillamente (quindi utilizzarne qualsiasi metodo non statico).


    A questo aggiungiamoci che in qualsiasi linguaggio di programmazione (C++ compreso) prima di poter utilizzare qualsiasi oggetto è necessario crearlo utilizzando l'apposita parola chiave new e scopriamo che nel tuo codice manca anche questo.

    Ora, va bene la dichiarazione statica degli oggetti (non sono dichiarati nel main, ma fuori), prima di poterli usare sobbiamo prima crearli.


    Lo stesso discorso fatto per le variabili, ora lo possiamo applicare anche ai metodi: non si possono utilizzare metodi non statici all'interno di contesti statici (per lo stesso motivo). Li si può utilizzare se applicati a oggetti statici (come tutti quelli creati nel contesto statico).


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

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 © 2024 vBulletin Solutions, Inc. All rights reserved.