logo

Classi e oggetti in Java

In Java le classi e gli oggetti costituiscono il fondamento della programmazione orientata agli oggetti (OOP). Aiutano a modellare entità del mondo reale e a organizzare il codice in modo strutturato.

  • Una classe è un modello utilizzato per creare oggetti che condividono proprietà e comportamenti comuni.
  • Un oggetto è un'istanza di una classe. Rappresenta un'entità specifica creata dal modello di classe.

Ad esempio Dog è una classe Tommy è un oggetto di quella classe.

Classe_Oggetto_esempio' title=Classi e oggetti (qui Dog è la classe e Bobby è l'oggetto)

Classe Java

Una classe è un progetto che definisce dati e comportamento per gli oggetti. Raggruppa campi e metodi correlati in una singola unità. La memoria per i suoi membri viene allocata solo quando viene creato un oggetto.



  • Funziona come un modello per creare oggetti con struttura condivisa.
  • Non occupa memoria per i campi fino all'istanziazione.
  • Può contenere campi, metodi, costruttori, classi e interfacce nidificate.
Java
class Student {  int id;  String n;  public Student(int id String n) {  this.id = id;  this.n = n;  } } public class Main {  public static void main(String[] args) {  Student s1 = new Student(10 'Alice');  System.out.println(s1.id);  System.out.println(s1.n);  } } 

Produzione
10 Alice 

Oggetti Java

Un oggetto è un'istanza di una classe creata per accedere ai suoi dati e alle sue operazioni. Ogni oggetto mantiene il proprio stato.

  • Stato : valori memorizzati nei campi.
  • Comportamento : Azioni definite attraverso metodi.
  • Identità : Distingue un oggetto da un altro.

Gli oggetti rispecchiano elementi del mondo reale come il prodotto o il cerchio del cliente. Gli oggetti non primitivi vengono archiviati nell'heap mentre i loro riferimenti rimangono nello stack.

Oggetti in Java' loading='lazy' title=Oggetti Java (esempio di cani)

Istanziazione di oggetti

La creazione di un oggetto è nota come istanziazione. Tutte le istanze di una classe condividono struttura e comportamento memorizzando valori di stato diversi.

Dichiarazione di oggetti in Java' loading='lazy' title=Dichiarazione di oggetti Java

Dichiarazione:

Ciuffo di cane;

Questo dichiara solo un riferimento. L'oggetto non viene creato e il riferimento è nullo.

Inizializzazione:

tuffy = new Dog('Tuffy' 'Papillon' 5 'Bianco');

Classi e oggetti in Java-3-768' loading='lazy' title=Inizializzazione

L'operatore new alloca memoria e invoca il costruttore.

Esempio: definizione e utilizzo di una classe

Java
public class Dog {  String name;  String breed;  int age;  String color;  public Dog(String name String breed int age String color) {  this.name = name;  this.breed = breed;  this.age = age;  this.color = color;  }  public String getName() { return name; }  public String getBreed() { return breed; }  public int getAge() { return age; }  public String getColor() { return color; }  @Override  public String toString() {  return 'Name is: ' + name  + 'nBreed age and color are: '  + breed + ' ' + age + ' ' + color;  }  public static void main(String[] args) {  Dog tuffy = new Dog('tuffy' 'papillon' 5 'white');  System.out.println(tuffy);  } } 

Produzione
Name is: tuffy Breed age and color are: papillon 5 white 

Nota: Ogni classe ha almeno un costruttore. Se non ne viene definito nessuno, Java fornisce un costruttore predefinito senza argomenti che chiama il costruttore genitore.

Inizializza l'oggetto utilizzando il metodo/funzione

Java
public class Geeks {  static String name;  static float price;  static void set(String n float p) {  name = n;  price = p;  }  static void get() {  System.out.println('Software name is: ' + name);  System.out.println('Software price is: ' + price);  }  public static void main(String[] args) {  Geeks.set('Visual Studio' 0.0f);  Geeks.get();  } } 

Produzione
Software name is: Visual Studio Software price is: 0.0 

Modi per creare oggetti in Java

Java supporta quattro approcci standard.

1. Utilizzo di una nuova parola chiave

Il modo più diretto per creare un oggetto.

Java
// creating object of class Test  Test t = new Test(); 

2. Utilizzo della riflessione

Utilizzato per il caricamento dinamico delle classi come visto in framework come Spring.

Java
class Student {  public Student() {} } public class Main {  public static void main(String[] args) {  try {  Class c = Class.forName('Student');  Student s = (Student) c.getDeclaredConstructor().newInstance();  System.out.println(s);  } catch (Exception e) {  e.printStackTrace();  }  } } 

Produzione
Student@1dbd16a6 

3. Utilizzo del metodo clone()

clone() crea una copia di un oggetto esistente. La classe deve implementare Cloneable.

Java
class Geeks implements Cloneable {  String name = 'GeeksForGeeks';  @Override  protected Object clone() throws CloneNotSupportedException {  return super.clone();  }  public static void main(String[] args) {  try {  Geeks g1 = new Geeks();  Geeks g2 = (Geeks) g1.clone();  System.out.println(g2.name);  } catch (Exception e) {  e.printStackTrace();  }  } } 

Produzione
GeeksForGeeks 

4. Utilizzo della deserializzazione

La deserializzazione è una tecnica per leggere un oggetto dallo stato salvato in un file. L'oggetto viene ricreato da un flusso di byte archiviato.

Fare riferimento a Serializzazione/Deserializzazione in Java .

Java
import java.io.*; class Student implements Serializable {  private String name;  public Student(String name) { this.name = name; }  public String toString() { return 'Student: ' + name; } } public class Main {  public static void main(String[] args) {  try (ObjectOutputStream out =  new ObjectOutputStream(new FileOutputStream('student.ser'))) {  out.writeObject(new Student('Alice'));  } catch (IOException e) { e.printStackTrace(); }  try (ObjectInputStream in =  new ObjectInputStream(new FileInputStream('student.ser'))) {  Student s = (Student) in.readObject();  System.out.println(s);  } catch (Exception e) { e.printStackTrace(); }  } } 

Produzione
Student: Alice 

Un singolo riferimento può puntare a oggetti diversi in momenti diversi.

javaxor
Java
Test test = new Test(); test = new Test(); 

Nell'ereditarietà è comune utilizzare un riferimento genitore per gli oggetti figli.

Java
Animal obj = new Dog(); obj = new Cat(); 

Gli oggetti senza riferimenti diventano idonei per la Garbage Collection.

Oggetti anonimi

Gli oggetti anonimi vengono creati senza riferimento e utilizzati immediatamente per operazioni una tantum.

  • Nessuna variabile di riferimento: non è possibile riutilizzare l'oggetto.
  • Creato e utilizzato consente di risparmiare immediatamente memoria per attività di breve durata.
  • Comune nella gestione degli eventi (ad esempio clic sui pulsanti).
Java
new Dog('Max' 'Labrador' 3 'Black').getName(); 

Comune nella gestione degli eventi dell'interfaccia utente.

Crea quiz