Delucidazione sui metodi java

di il
14 risposte

Delucidazione sui metodi java

Salve,è un paio di mesi che per esigenze professionali mi sono dovuto avvicinare al java.Sto studiando su un libro "mattone dopo mattone" e riesco fin ora a fare i primi programmini come somma tra numeri fattoriale ecc..
uno degli argomenti però dove ho più dubbi sono i metodi e i costruttori.
mi sapete dare qualche chiarimento in tal proposito?anche pratico magari con un esempio di sorgente.

14 Risposte

  • Re: Delucidazione sui metodi java

    In pratica vi propongo un banale codice che dovrebbe mostrare a video la scritta CIAO.

    public class saluti {

    public static void main(String[] args) {
    {
    public void stampaSaluto()
    {
    System.out.println("Ciao");
    }
    }

    usando netbeans però non capisco perchè mi da errore quando inserisco il metodo stampasaluto().
  • Re: Delucidazione sui metodi java

    Ciao, i metodi sono proprietà di una classe, non puoi dichiarare metodi all'interno di metodi.
    I metodi sono fondamentalmente di 2 tipologie: statici e non statici. I metodi statici sono legati alla classe, nel senso che per invocarli non è necassario avere un'istanza della classe(oggetto) , basta scrivere <nome della classe>.<metodo da invocare>, mentre quelli non statici esistono solo se vi è un'istanza sulla quale invocarli.Inoltre non puoi invocare un metodo non statico all'interno di uno statico proprio perchè i metodi statici per essere invocati non necessitano di istanze della classe, il compilatore ti segnalerebbe un errore.

    Es di errore:
    public class Saluti{

    public static void main(String[] args) {
    stampaSaluto();
    }
    public void stampaSaluto()
    {
    System.out.println("Ciao");
    }
    }

    Es corretto:

    public class Saluti{

    public static void main(String[] args) {
    stampaSaluto();
    }
    public static void stampaSaluto(){
    System.out.println("Ciao");
    }
    }

    oppure

    public class Saluti{

    public static void main(String[] args) {

    Saluti s = new Saluti();
    s.stampaSaluto();
    }
    public void stampaSaluto(){
    System.out.println("Ciao");
    }
    }
  • Re: Delucidazione sui metodi java

    Capisco..comunque ho copiato i codici da te proposti e non me li compila,dovrebbe apparire Ciao ma non appare niente,quindi da quanto ho capito per usare i metodi non statici devo creare degli oggetti e comunque vengono usati nelle classi estese dato che non si possono dichiarare all'interno di uno statico come il main,giusto?potresti farmi un esempio proprio di quest'ultime?cioè una classe estesa contenente ad esempio un metodo somma cosi che possa compilarla ed ordinarmi le idee.
  • Re: Delucidazione sui metodi java

    Il codice è corretto forse perchè ho rinominato la classe in Saluti, ognuna delle classi che ti ho scritto di esempio deve risiedere da sola in un file chiamato Saluti.java . Il primo esempio non compila, è un esempio di errore,i secondi si.Non ho capito tanto l'esempio di cui hai bisogno, puoi spiegarmi più in dettaglio?
  • Re: Delucidazione sui metodi java

    Ad esempio se avessi bisogno di un banale programma che sommi due numeri interi,farei cosi:

    class UsoClasse{
    public static void main(String[] args) {
    int a=5;
    int b=3;
    int somma;
    {somma=a+b;

    }
    { System.out.println(somma);
    }
    }
    }


    se volessi mettergli il metodo somma invece,

    class UsoClasse{
    public static void main(String[] args) {
    int a=5;
    int b=3;
    int somma;
    static int somma (int a, int b)
    {somma=a+b;

    }
    {System.out.println(somma);
    }
    }
    }

    giusto?
    e se volessi inserire un'altro metodo non statico dovrei creare un altra classe?
  • Re: Delucidazione sui metodi java

    Ciao,no vedo un pò di confusione ma è normale hai appena iniziato con il linguaggio.Allora la prima cosa che secondo me devi puntalizzare è il concetto di classe, metodi e campi (variabili di istanza) e modificatori di accesso (public,protected,default e private).
    Quando fai un programma standalone c'e' sempre una classe con il metodo main per l'avvio del programma stesso, poi puoi avere diversi package e classi in essi contenute.Facciamo un esempio per la somma di numeri (due classi nello stesso package):

    File Main.java

    package demo;

    public class Main{

    public static void main(String[] args){
    Somma s = new Somma(4,5);
    s.stampaSomma();
    }

    }

    File Somma.java:

    package demo;

    public class Somma{

    int x;
    int y;

    public Somma(int xv,int yv){
    x=xv;
    y=yv;
    }

    public void stampaSomma(){
    System.out.println("Somma:"+(x+y));
    }

    }

    Devo andare, ma se hai altre domande poi chiedi pure , quando mi collego ti rispondo sperando di esserti di aiuto.Ciao e buono studio.
  • Re: Delucidazione sui metodi java

    Ok l'esempio mi è stato d'aiuto,dimmi se ho ben compreso,in questa riga "Somma s = new Somma(4,5);" creo un oggetto somma con valori 4e5,successivamente uso un metodo non statico dato che ho creato l'oggetto,s.stampaSomma().
    In seguito ho qualche dubbio nella classe somma,nelle righe:public Somma(int xv,int yv){
    x=xv;
    y=yv;
    sarebbe un costruttore?che ruolo ha?inoltre aggiungo la "v"dopo le variabili x e y, per chè non posso ripeterle?scusa la confusione ma sto accumulando informazioni da diversi manuali e anche in rete ma questi metodi e costruttori mi confondono non poco..sai dove posso reperire esercizi su cui "allenarmi"?
  • Re: Delucidazione sui metodi java

    Ciao,si ok crei l'oggetto con l'operatore new e poi lo usi invocando su esso il metodo stampaSomma().Si public Somma(int xv,int yv){..} è un costruttore, non far caso ai nomi dei parametri potevi chiamarli come desideri. Un costruttore è un metodo che ha lo stesso nome della classe e che non ritorna nulla. Ogni classe java ha almeno un costruttore, se tu non ne dichiari nessuno automaticamente gli viene assegnato un costruttore di default che non ha argomenti e che non esegue nessun codice ma che permette di avere istanze della classe.I costruttori in generale vengono utilizzati per inizializzare le variabili di istanza della classe ( campi della classe) e per altre operazioni di inizializzazione necessarie alla classe.Come libri online gratuiti posso consigliarti quello scaricabile dal sito http://www.claudiodesio.com è ben fatto.
  • Re: Delucidazione sui metodi java

    Si il libro gia l'avevo scaricato,insieme a mattone dopo mattone si stanno rivelando molto utili.
    Sto facendo un pò di pratica prendendo spunto dall'esercizio fatto da te ho provato delle varianti inizializzando le variabili col this penso di aver agito correttamente,cioè public Somma(int x,int y){
    this.x=x;
    this.y=y;
    }

    mi era venuta ora l'idea di fare un programma simile ma estendendo la classe principale"Main",anche per mettere alla pratica la teoria fin ora appresa.Ho creato una nuova classe con NetBeans scrivendo public class Somma extends Main,a questo punto ho trovato non poche difficoltà,ho provato a inizializzare le variabile nella prima classe principale(Main)ma mi dà sempre errore,puoi suggerirmi come comportarmi?
  • Re: Delucidazione sui metodi java

    Ciao,si hai fatto bene,usare this è il metodo che ritengo più corretto anche io, non l'ho usato prima per non complicarti subito le cose, this rappresenta il puntatore all'oggetto corrente.
    Puoi postare le classi che hai scritto? Cosi cerco di aiutarti
  • Re: Delucidazione sui metodi java

    Allora ho creato una prima classe chiamata "ciao" :

    public class ciao {
    public static void main(String[] args) {
    somma s=new somma(5,7);
    s.stampaSomma();
    divisione d=new divisione (5,7);
    d.stampaDivisione();
    moltiplicazione m=new moltiplicazione(5,8);
    m.stampamoltiplicazione();
    }
    }
    e poi ho creato altre 3 classi rispettivamente somma,divisione e moltiplicazione.
    public class somma {
    int x;
    int y;

    public somma(int x,int y){
    this. x=x;
    this.y=y;
    }
    public void stampaSomma(){
    System.out.println("Somma:"+(x+y));
    }

    }

    public class divisione {
    double b;
    double a;

    public divisione(double a,double b){
    this.a=a;
    this.b=b;
    }
    public void stampaDivisione(){
    System.out.println("divisione:"+(a/b));
    }

    }


    public class moltiplicazione {
    int a;
    int b;
    public moltiplicazione(int a,int b){
    this.a=a;
    this.b=b;
    }
    public void stampamoltiplicazione(){

    System.out.println("la moltiplicazione viene " +(a*b));

    }
    }

    credo di essere sulla buona strada anche se con qualche dubbio che sto cercando di colmare con un pò di pratica.Tutto sembra funzionare,a questo punto mi è venuta una curiosità se puoi aiutarmi per completare il programma e renderlo anche piu utile diciamo.Come posso inserire l 'input da tastiera per esempio nella classe divisione se volessi inserire io i numeri da dividere?
  • Re: Delucidazione sui metodi java

    Ciao, si utilizza la classe System ottenendo un InputStream (System.in) per lo standard di input(tastiera) , un possibile modo è questo, ti posto un frammento di codice per l'input :

    InputStream in = System.in;
    InputStreamReader inR = new InputStreamReader(in);
    BufferedReader buff = new BufferedReader(inR);

    double num1 = 0;
    double num2 = 0;

    try {
    System.out.print("Primo numero:");

    num1=Double.valueOf(buff.readLine());


    System.out.print("Secondo numero:");

    num2=Double.valueOf(buff.readLine());

    System.out.println("Divisione:"+num1/num2);
    } catch (IOException ex) {
    ex.printStackTrace();
    }

    le classi da importare:

    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;

    Buono studio
  • Re: Delucidazione sui metodi java

    Salve,scusa,stavo provando a fare un esercizio che ho trovato su un libro di java,dice di definire un oggetto chiamato Set che rappresenti un insiemi di interi.Insieme che deve avere tre metodi:
    boolean isMember(int);
    void addMember(int);
    void showSet();
    a questo punto(ti porgo un esempio basato utilizzando solo il primo metodo) ho creato una classe principale contenente il metodo main e ho creato l'oggetto Set
    Set i=new Set;
    e continuando ho chiamato il primo metodo i.addMember(int);
    nello stesso package ho creato un altra classe Set dove ho dichiarato una variabile di array 'numeri[100]' e un'altra 'numeroinserito'.Uso il costruttore
    public Set(int numero,int numeroinserito)
    {
    this.numero=numero;
    this.numeroinserito=numeroinserito;
    }
    e poi uso il metodo
    public boolean isMember()
    seguito dalla condizione :
    if (numeroinserito<100)
    return true;
    else
    return false;
    al momento di compilare mi da errore con NetBeans.Volevo sapere dove sbaglio e se sono sulla buona strada o meno,sia a livello di logica del linguaggio che di procedure.grazie.
  • Re: Delucidazione sui metodi java

    Ciao, penso di aver capito che l'esercizio voglia che si crei una classe insieme di interi facendo uso di array. Mi sento di consigliarti una soluzione di questo tipo: rappresentare ,all'interno della classe Set da te creata, gli interi con un array di boolean.Gli indici dell'array (0,1,2,3,..n) rappresentano gli interi appartenenti all'insieme mentre il valore boolean in corrispondenza degli indici indica l'appartenenza all'insieme o meno del numero, ad esempio se l'elemento di indice 5 ha il valore true allora appartiene all'insieme false altrimenti.

    public class Set {

    private boolean[] set;

    public Set(int dim){
    set = new boolean[dim];
    }

    boolean isMember(int elem){
    if(elem>=0 && elem<set.length){
    return set[elem];
    }else{
    throw new IllegalArgumentException("Invalid argument:"+elem);
    }
    }
    void addMember(int elem){
    if(elem>=0 && elem<set.length){
    set[elem]=true;
    }else{
    throw new IllegalArgumentException("Invalid argument:"+elem);
    }
    }
    void showSet(){
    for(int i=0;i<set.length;i++){
    if(set){
    System.out.print(i+" ");
    }
    }
    }
    }

    codice di esempio all'interno del metodo main della tua classe:

    Set set = new Set(30);
    set.showSet();

    set.addMember(3);
    set.addMember(8);
    set.addMember(22);
    set.addMember(29);

    System.out.println(set.isMember(10));
    System.out.println(set.isMember(3));

    set.showSet();
Devi accedere o registrarti per scrivere nel forum
14 risposte