metodi java

Androidiano93

Utente Attivo
287
1
CPU
i5 3570k
Scheda Madre
Asus P8Z77-V LE PLUS
HDD
Ssd Samsung pro series 840 - Seagate Barracuda 1TB 7200rpm 64MB cache
RAM
Corsair Vengeance Blue 2X4GB CL9 1600MHz
GPU
Gigabyte nvidia GTX 670 OC 4GB
Monitor
Asus VE247H
PSU
Antec HCG-620m
Case
Thermaltake Armor Revo Nero
OS
Win7 x64
salve a tutti, il nostro professore universitario a mio parere lascia un po' a desiderare, nessuno ha capito i metodi java, e se qualcuno li conosce ve lo chiedo... so che tutti i metodi poi confluiscono nel main, ma come? come si richiamano? come si costruiscono e tutto? Grazie di cuore!
 
L

lock3r

Ospite
Scusami, la domanda pare poco chiara, quindi ti rispondo con una domanda per capire il tuo livello di ignoranza (perdona la battuta :)).

Cos'è un oggetto in Java?
 
  • Like
Reactions: Androidiano93

Androidiano93

Utente Attivo
287
1
CPU
i5 3570k
Scheda Madre
Asus P8Z77-V LE PLUS
HDD
Ssd Samsung pro series 840 - Seagate Barracuda 1TB 7200rpm 64MB cache
RAM
Corsair Vengeance Blue 2X4GB CL9 1600MHz
GPU
Gigabyte nvidia GTX 670 OC 4GB
Monitor
Asus VE247H
PSU
Antec HCG-620m
Case
Thermaltake Armor Revo Nero
OS
Win7 x64
un'entità che creiamo, ad esempio int [] x = new int [3], la parte prima dell'uguale è la dichiarazione, ancora astratta, mentre nella parte dopo l'uguale si crea l'oggetto, si definisce meglio ciò che prima era astratto, diciamo in questo caso che l'array avrà lunghezza 3 :/ (non mi picchiare:asd:)
 

matteoc91

Utente Attivo
158
17
In realtà non è corretto dire che tutti i metodi confluiscono nel main, alcuni possono essere semplicemente riutilizzati da altri metodi, o magari sono metodi di oggetti che vengono utilizzati da altri oggetti e che non vengono neanche visti dalla classe che contiene il main.
In sostanza puoi vedere un metodo come una sequenza di istruzioni. Esempi di metodi possono essere:
Codice:
public void metodo1(param_1,param_2,...){
   int ris=param_1+param_2+...;
   System.out.println(ris);
}

public int metodo2(param_1,param_2,...){
   int ris=param_1+param_2+...;
   return ris;
}
Nella OOP gli oggetti sono caratterizzati da variabili e costanti (definite come attributi) e metodi (ovvero procedure). I metodi di un oggetto definiscono le "azioni" che un oggetto può compiere. Per farti un esempio, supponiamo di creare un oggetto stampante con un metodo stampa; l'azione stampa mostrerà a video il valore di una stringa passata come argomento:
Codice:
public class Stampante{

   public void stampa(String str){
      System.out.println(str);
   }

}
Ora, se noi volessimo riutilizzare il metodo stampa di stampante in un main, potremmo fare come segue:
Codice:
public class Test{

   public static void main(String[]args){
      Stampante st=new Stampante();
     [B] st.stampa("Prova stampante");[/B]
   }

}
In questo modo creeremo in memoria un oggetto stampante e lanceremo un suo metodo (in questo caso stampa) nella pila di esecuzione.

Volendo possiamo anche utilizzare metodi senza fare esplicitamente riferimento ad un oggetto, ad esempio:
Codice:
public class Test{

   public static void main(String[]args){
      Stampante st=new Stampante();
      st.stampa("Prova stampante");
      [B]provaMetodo();[/B]
   }

   public static void provaMetodo(){
      System.out.println("Prova metodo interno");
   }

}
Ciò però implica che il metodo sia presente nella stessa classe in cui viene richiamato.

Come puoi notare provaMetodo è stato definito come statico; il motivo è che viene richiamato da un altro metodo statico (main); i metodi statici non possono accedere a proprietà non statiche, ma metodi non statici possono accedere a proprietà statiche. Altra cosa da notare sui metodi statici è la seguente: supponiamo che stampa sia definito come metodo statico; in questo caso avremo:
Codice:
public static void main(String[]args){
   [B]Stampante.stampa("Prova stampante");
[/B]}
Tralasciando la creazione di un nuovo oggetto. In questo caso infatti stampa viene visto come metodo della classe Stampante e non come "proprietà" di istanze della classe stessa (si può fare un discorso simile anche per le variabili).

Un esempio di utilizzo di variabili statiche è il conteggio di oggetti; se infatti volessimo sapere quanti oggetti di un certo tipo sono stati creati, non potremo utilizzare metodi o variabili non statiche, perché essi sono proprietà dell'istanza che viene generata e quindi distinti per ogni oggetto creato. Se invece sfruttassimo una variabile statica, questa è proprietà della classe di appartenenza, quindi comune alle istanze create.
 

Androidiano93

Utente Attivo
287
1
CPU
i5 3570k
Scheda Madre
Asus P8Z77-V LE PLUS
HDD
Ssd Samsung pro series 840 - Seagate Barracuda 1TB 7200rpm 64MB cache
RAM
Corsair Vengeance Blue 2X4GB CL9 1600MHz
GPU
Gigabyte nvidia GTX 670 OC 4GB
Monitor
Asus VE247H
PSU
Antec HCG-620m
Case
Thermaltake Armor Revo Nero
OS
Win7 x64
Grazie molto utile :) comunque sul mio libro usa jbook.util.input, all'università e io stesso preferiamo usare java.util.Scanner, va bene uguale? perchè se creo un oggetto riferito a quello scanner poi a seconda che io metta ad esempio scannerprova.nextLine(); o .nextInt(); lavora bene lo stesso. Il mio dubbio è uno ora: per i numeri a seconda della grandezza e del tipo ci sono int float, etc. etc., ma per le stringhe, cioè per le "frasi" chiamiamole così con abuso di linguaggio, devo dichiarare char o String? che differenza c'è trai due? :/
 
L

lock3r

Ospite
Char è un singolo carattere ed è un tipo fondamentale, String è una "stringa" (scusa il gioco di parole) e cioé una qualsiasi sequenza finita di simboli dell'alfabeto che usi. Insomma, char contiene UNA lettera od un carattere qualsiasi e String contiene "frasi". Ricordati che String crea oggetti eh :)
 
  • Like
Reactions: Androidiano93

Androidiano93

Utente Attivo
287
1
CPU
i5 3570k
Scheda Madre
Asus P8Z77-V LE PLUS
HDD
Ssd Samsung pro series 840 - Seagate Barracuda 1TB 7200rpm 64MB cache
RAM
Corsair Vengeance Blue 2X4GB CL9 1600MHz
GPU
Gigabyte nvidia GTX 670 OC 4GB
Monitor
Asus VE247H
PSU
Antec HCG-620m
Case
Thermaltake Armor Revo Nero
OS
Win7 x64
Mmm quindi per poter creare una variabile stringa che contenga la frase "Stringa di prova " e poi usarla, è la stessa cosa di per esempio creare un int e poi usarlo?
 
L

lock3r

Ospite
Guarda, sostanzialmente la differenza fra char e String è solo che String offre metodi ad alto livello per il trattamento delle stringhe. Cioé, un oggetto di tipo String in Java non è altro che un array di char a lunghezza variabile (vector); in più ti da la possibilità di maneggiare le stringhe con molta facilità.
 
  • Like
Reactions: Androidiano93

1nd33d

Utente Attivo
653
279
CPU
Intel i5 3570K @ 4,5Ghz
Dissipatore
Scythe Mugen 2
Scheda Madre
Gigabyte Z77X-UD3H
HDD
Samsung 840 PRO 256GB + Sandisk Ultra 250GB + Sandisk Plus 960GB
RAM
2x8GB Crucial Ballistix Tactical @2000Mhz CL9
GPU
XFX RX480 GTR Black Edition
Audio
Auzentech X-Fi Forte
Monitor
AOC i2369VW
PSU
Seasonic P660
Case
eh?
Periferiche
Razer Naga HEX v2
OS
Windows 10 64bit - Linux Mint 18
Mmm quindi per poter creare una variabile stringa che contenga la frase "Stringa di prova " e poi usarla, è la stessa cosa di per esempio creare un int e poi usarlo?
Non esattamente.
Non so a che livello questo professore (non) ti abbia insegnato le basi del Java, ma in Java, come in praticamente tutti gli altri linguaggi, esistono i tipi primitivi: char, int, long, float, double... ma esistono anche le classi adibite a contenerli: Character, String, Integer, Long, Double... definite anche classi "wrapper".
Qual è la differenza tra un tipo primitivo (o un array di primitivi, come un vettore di char) e una classe wrapper?
Una variabile di tipo primitivo contiene in memoria l'effettivo valore binario dell'informazione (il codice ascii di un char, un valore binario in complemento a 2 di un int...) mentre una variabile di una classe wrapper contiene, come tutte le variabili che si riferiscono a istanze di classe, l'indirizzo in memoria dell'oggetto.
Una classe wrapper mette a disposizione molti metodi di utilità, un valore primitivo no, perchè è solo il valore in se.
Su un oggetto puoi richiamare i metodi che sono definiti nella classe di cui è istanza, su un tipo primitivo (per esempio int) no, perchè non è un oggetto, è un primitivo.
Una stringa in Java è un vettore di primitivi char wrappato in una classe String.
 
  • Like
Reactions: Androidiano93

Androidiano93

Utente Attivo
287
1
CPU
i5 3570k
Scheda Madre
Asus P8Z77-V LE PLUS
HDD
Ssd Samsung pro series 840 - Seagate Barracuda 1TB 7200rpm 64MB cache
RAM
Corsair Vengeance Blue 2X4GB CL9 1600MHz
GPU
Gigabyte nvidia GTX 670 OC 4GB
Monitor
Asus VE247H
PSU
Antec HCG-620m
Case
Thermaltake Armor Revo Nero
OS
Win7 x64
Quelle guide sono troppo matematicamente astruse per me... Tutti ci lamentiamo del nostro professore.. Io sono arrivato a capire che una classe contiene diversi oggetti atti ad eseguire uno o più metodi... Stop. So che quando si crea un oggetto non si crea solo il suo riferimento in memoria, ma viene memorizzato proprio l'oggetto stesso.. però proprio non riesco a capire la differenza pratica tra ad esempio int a = 100; ed int a = new int(); a=100, perchè anche se non creo l'oggetto, poi nel codice a me lo fa usare ugualmente come voglio! Quella spiegazione di 1nd33d intuisco che è buona, ma purtroppo non riesco a capirla... Vi giuro, quando mi soffermo a pensare che nonostante il mio Q.I. sia alto non capisco determinate cose mi prendo a pugni solo. So che se ad esempio ho un int (come detto sopra non so la differenza pratica tra dichiararlo e crearne l'oggetto) chiamato ad esempio numero, poi posso fare numero++, numero*numero e altro, a patto che io rimanga in valori accettabili da int, char è un solo carattere quindi non saprei cosa farci, personalmente non scriverò "char" in java nemmeno con un fucile puntato contro, ma il mio cruccio è se usando String che differisce in quanto tipo non primitivo potrò comunque fare concatenazione, stampe a schermo e altro

[P.S. ho capito solo che se ad esempio creo due oggetti uguali con nomi diversi, ovviamente la modifica di uno non influirà sull'altro; se invece creo un oggetto, e poi una variabile ad esso riferita, ma senza oggetto, alla modifica di uno verrà modificato anche l'altro.. l'essere oggetto garantisce una certa indipendenza in pratica]
 
Ultima modifica:
L

lock3r

Ospite
Quelle guide sono troppo matematicamente astruse per me... Tutti ci lamentiamo del nostro professore.. Io sono arrivato a capire che una classe contiene diversi oggetti atti ad eseguire uno o più metodi... Stop. So che quando si crea un oggetto non si crea solo il suo riferimento in memoria, ma viene memorizzato proprio l'oggetto stesso.. però proprio non riesco a capire la differenza pratica tra ad esempio int a = 100; ed int a = new int(); a=100, perchè anche se non creo l'oggetto, poi nel codice a me lo fa usare ugualmente come voglio! Quella spiegazione di 1nd33d intuisco che è buona, ma purtroppo non riesco a capirla... Vi giuro, quando mi soffermo a pensare che nonostante il mio Q.I. sia alto non capisco determinate cose mi prendo a pugni solo. So che se ad esempio ho un int (come detto sopra non so la differenza pratica tra dichiararlo e crearne l'oggetto) chiamato ad esempio numero, poi posso fare numero++, numero*numero e altro, a patto che io rimanga in valori accettabili da int, char è un solo carattere quindi non saprei cosa farci, personalmente non scriverò "char" in java nemmeno con un fucile puntato contro, ma il mio cruccio è se usando String che differisce in quanto tipo non primitivo potrò comunque fare concatenazione, stampe a schermo e altro

[P.S. ho capito solo che se ad esempio creo due oggetti uguali con nomi diversi, ovviamente la modifica di uno non influirà sull'altro; se invece creo un oggetto, e poi una variabile ad esso riferita, ma senza oggetto, alla modifica di uno verrà modificato anche l'altro.. l'essere oggetto garantisce una certa indipendenza in pratica]


Capisco.Io ho fatto il classico, al primo anno di università, appena iniziato a fare programmazione, ho passato tre mesi sentendomi un idiota senza capire cosa realmente fosse un oggetto. Però, caro amico, così mi fai incacchiare. Prima mi dici che non vuoi leggere i manuali (cosa che abbiamo fatto TUTTI) perché non capisci, poi ti dimentichi quello che ti è stato scritto due post fa. Ma soprattutto I MANUALI sono molto meglio di qualsiasi utente perché spiegano passo passo e con precisione tutto ciò che devi fare, i perché ed i percome. Sia io che indeed ti abbiamo spiegato per filo e per segno la differenza fra char e String, almeno ricordati quello che ti diciamo cavolo.

Guarda, sostanzialmente la differenza fra char e String è solo che String offre metodi ad alto livello per il trattamento delle stringhe. Cioé, un oggetto di tipo String in Java non è altro che un array di char a lunghezza variabile (vector); in più ti da la possibilità di maneggiare le stringhe con molta facilità.

Non esattamente.
Non so a che livello questo professore (non) ti abbia insegnato le basi del Java, ma in Java, come in praticamente tutti gli altri linguaggi, esistono i tipi primitivi: char, int, long, float, double... ma esistono anche le classi adibite a contenerli: Character, String, Integer, Long, Double... definite anche classi "wrapper".
Qual è la differenza tra un tipo primitivo (o un array di primitivi, come un vettore di char) e una classe wrapper?
Una variabile di tipo primitivo contiene in memoria l'effettivo valore binario dell'informazione (il codice ascii di un char, un valore binario in complemento a 2 di un int...) mentre una variabile di una classe wrapper contiene, come tutte le variabili che si riferiscono a istanze di classe, l'indirizzo in memoria dell'oggetto.
Una classe wrapper mette a disposizione molti metodi di utilità, un valore primitivo no, perchè è solo il valore in se.
Su un oggetto puoi richiamare i metodi che sono definiti nella classe di cui è istanza, su un tipo primitivo (per esempio int) no, perchè non è un oggetto, è un primitivo.
Una stringa in Java è un vettore di primitivi char wrappato in una classe String.


Comunque, andiamo con ordine.
Le variabili in Java possono essere di due tipi:
1. Tipo base del linguaggio: int, double, char,...
2. Tipo riferimento o Tipo oggetto
Le variabili del tipo 1 contengono i valori caratteristici del tipo (esempio int interi): cioé la porzione di codice
Codice:
int number = 15;
ha come effetto di salvare in una cella di memoria (stiamo semplificando eh :) ) la traduzione in binario del numero intero con segno "15". Cioé, quella variabile contiene proprio il valore numerico "15", che verrà appunto interpretato come un numero perché la variabile è di tipo "int".
Le variabili del tipo 2 contengono riferimenti ad oggetti. Un oggetto è un aggregato complesso di informazioni. Cioé serve a racchiudere al suo interno altri oggetti e variabili. Ogni oggetto è definito da una classe.
Le classi non sono contenitori, è un esempio del caxxo dire che sono contenitori. Sono definizioni. In una classe definisci come è fatto un oggetto di quella classe (quindi se contiene altri oggetti o variabili) e che cosa può fare (metodi della classe).
Ricapitolando:
Una classe è, idealmente, la collezione di tutti i possibili oggetti che hanno le caratteristiche da lei definite.
Una classe è la definizione di un tipo a cui tutti gli oggetti della classe sono uniformati.
Una classe è una mera definizione.
La JVM utilizza questa definizione per creare e usare oggetti di quella classe.
Ogni oggetto della classe è diverso dagli altri oggetti della stessa classe, ma tutti hanno la stessa struttura (o tipo).

Ad esempio:
Codice:
public class Persona {

String nome;
int età;

public Persona(int e, String n){//prende come parametri l'età e il nome
this.nome=n;
this.età = e;
}

public void unMetodoQualunque(){

//Corpo del metodo omesso....
}
}

la classe Persona ci dice che nel nostro programma, delle persone, ci interessano solo il nome e l'età. Pensa a questa cosa: tutte le persone hanno un nome ed un'età, ma sono tutte persone diverse, anche se hanno lo stesso nome e la stessa età. Ecco che le classi sono diciamo il metodo più naturale di rappresentare queste informazioni: la classe Persona in questo caso specifica come è fatta una persona e che cosa può fare (unMetodoQualsiasi!!!).
Invece il codice:
Codice:
Persona p = new Persona(23, "Paperino");
Persona t = new Persona(24, "Pluto");

Sta creando due persone, una riferita dalla variabile "p" ed una riferita dalla variabile "t". Ora, prendi un manuale per principianti e leggitelo. Ciao :)
 
  • Like
Reactions: Androidiano93

Androidiano93

Utente Attivo
287
1
CPU
i5 3570k
Scheda Madre
Asus P8Z77-V LE PLUS
HDD
Ssd Samsung pro series 840 - Seagate Barracuda 1TB 7200rpm 64MB cache
RAM
Corsair Vengeance Blue 2X4GB CL9 1600MHz
GPU
Gigabyte nvidia GTX 670 OC 4GB
Monitor
Asus VE247H
PSU
Antec HCG-620m
Case
Thermaltake Armor Revo Nero
OS
Win7 x64
Si, hai ragione... Però se possibile potrei avere un esempio completo: cioè riga per riga una classe dove ci sono due metodi, uno che presi per esempio due numeri rende uno la potenza dell'altro e il main che da tastiera mi chiede quali sono questi due e usufruisce del metodo precedente? Grazie :) Se poi creando oggetti è meglio :D
 

matteoc91

Utente Attivo
158
17
Questo è un esempio di codice di ciò che hai chiesto:
Codice:
import java.lang.*;
import java.util.*;


public class Potenza{


    int a,b;


    public Potenza(int a, int b){
        this.a=a;
        this.b=b;
    }
    
    public double calcola(){
        return Math.pow(a,b);
    }
    
    public static void main(String[]args){
        
        Potenza p;   // <- dichiarazione dell'oggetto
        int a,b;
        
        Scanner scan=new Scanner(System.in);
        System.out.print("Digita la base: ");
        a=scan.nextInt();
        System.out.print("Digita l'esponente: ");
        b=scan.nextInt();
        
        p=new Potenza(a,b);   // <- inizializzazione dell'oggetto
        
        double ris=p.calcola();
        System.out.println("Risultato: "+ris);
    }


}
Puoi tranquillamente provarlo e vedrai che funziona ;)
 
  • Like
Reactions: Androidiano93

Androidiano93

Utente Attivo
287
1
CPU
i5 3570k
Scheda Madre
Asus P8Z77-V LE PLUS
HDD
Ssd Samsung pro series 840 - Seagate Barracuda 1TB 7200rpm 64MB cache
RAM
Corsair Vengeance Blue 2X4GB CL9 1600MHz
GPU
Gigabyte nvidia GTX 670 OC 4GB
Monitor
Asus VE247H
PSU
Antec HCG-620m
Case
Thermaltake Armor Revo Nero
OS
Win7 x64
Grazie a tutti, ho passato questi giorni a leggere guide su guide e ora finalmente ho capito, per esempio ho capito che per richiamare un metodo nel main devo fare <nomeclasse> <nomevariabile> = new <nomeclasse()> e poi <nomevariabile>.<metodo(argomenti)>, per esempio solo sono riuscito a fare questa classe che risolve equazioni di secondo grado (ho tascurato il caso b^2 -4ac = 0, ma con un semplice if credo si possa fare)
Codice:
import java.util.Scanner;import java.lang.Math.*;
public class Provametodi{
	public void risolviequazione(double a, double b, double c){
		double sol1 = ((-1*b)+ Math.sqrt((b*b) - (4*a*c)))/2*a;
		double sol2 = ((-1*b)- Math.sqrt((b*b) - (4*a*c)))/2*a;
		System.out.println(sol1);
		System.out.println(sol2);
	}
	public static void main(String[] args){
		Scanner param = new Scanner(System.in);
		System.out.println("Digitare coefficiente incognita secondo grado");
		double coeff2 = param.nextDouble();
		System.out.println("Digitare coefficiente incognita primo grado");
		double coeff1 = param.nextDouble();
		System.out.println("Digitare termine noto");
		double terminenoto = param.nextDouble();
		System.out.println("Le soluzioni sono: ");
		Provametodi solfinale = new Provametodi();
		solfinale.risolviequazione(coeff2, coeff1, terminenoto);
	}
}
 

Entra

oppure Accedi utilizzando

Hot: E3 2021, chi ti è piaciuto di più?

  • Ubisoft

    Voti: 36 22.8%
  • Gearbox

    Voti: 3 1.9%
  • Xbox & Bethesda

    Voti: 101 63.9%
  • Square Enix

    Voti: 13 8.2%
  • Capcom

    Voti: 7 4.4%
  • Nintendo

    Voti: 21 13.3%
  • Altro (Specificare)

    Voti: 15 9.5%