Domanda Qual è la differenza funzionale tra un'istanza e un oggetto?


Lo so che in OOP, instance = object. Quindi se abbiamo una classe come questa:

public class something
{
    public static void main(String args[])
    {
    }
}

Questa riga nel metodo principale creerebbe un nuovo oggetto instance?

something instance=new something();

La mia seconda domanda è simile: se creiamo Thread oggetto - Thread t1=new Thread(); significa in realtà che abbiamo creato un'istanza di classe Thread, da cui possiamo chiamare staticamente metodi? (per esempio sleep()).


10
2017-08-07 14:36


origine


risposte:


se creiamo oggetto Thread - Thread t1 = new Thread (); vuol dire che abbiamo creato un'istanza di Thread della classe, da cui possiamo chiamare i metodi in modo statico? (ad esempio, sonno ()).

Quando chiami un metodo statico, non lo chiami dall'oggetto. Ecco perché è statico. Non è necessario che un'istanza esegua un metodo statico.

 Esempio

Thread t1 = new Thread();
t1.checkAccess();  // <--- This is an instance method.

Thread.activeCount(); // <-- This is a static method.

Quando vedi il new parola chiave, significa che viene creato un nuovo oggetto. In questo caso, era un'istanza di classe Thread, come hai giustamente detto.

 Come li distinguete?

Bene, è semplice. Se si tratta di un metodo di istanza, verrà chiamato dal contesto di a oggetto.

String str = new String("hello");
str = str.replaceAll("o", "");

Come puoi vedere, devi creare un esempio usare un metodo di istanza.

Con un statico metodo, è ancora più facile. Saranno chiamati con nient'altro che il nome della classe.

String.copyValueOf(new char[] {'a', 'b', 'c'});

Non è necessario crearne uno nuovo String esempio. Basta usare il nome della classe.

NOTA: Come sottolineato nei commenti, un metodo statico può essere chiamato da un oggetto istanza, ma questa non è una pratica comune. Se non sei mai sicuro, la documentazione è la tua migliore amica. Oppure puoi semplicemente provare provando a chiamare lo stesso metodo da un contesto statico.

 Quando utilizzare un metodo statico invece di un metodo di istanza?

Bene, questa è una risposta, molto bene, qui: Java: quando utilizzare i metodi statici e non ho senso a ripeterlo :)


12
2017-08-07 14:37



Viene creato un oggetto in entrambi i casi che citi:

something instance=new something();
Thread t1=new Thread();

Tuttavia, nel secondo caso, sebbene venga creato un oggetto Thread, un thread non viene avviato finché non lo si avvia.

vuol dire che abbiamo creato un'istanza di Thread della classe, da cui possiamo chiamare i metodi in modo statico? (ad esempio, sonno ()).

Non hai bisogno di un oggetto per chiamare metodi statici. Un metodo statico si applica all'intera classe, piuttosto che a un'istanza specifica. Puoi chiamare Thread.sleep () in questo modo:

Thread.sleep( 500 );

2
2017-08-07 14:37



Alla tua prima domanda, sì, ciò creerebbe un'istanza di something nella variabile instance (non un grande nome variabile, comunque).

Alla tua seconda domanda, sì, quel codice creerebbe un'istanza di Thread. Tuttavia, non chiameresti metodi statici con esso (come t1.sleep()). I metodi statici sono chiamati con il nome della classe, ad es. Thread.sleep. Non devi creare un'istanza per quelli.


1
2017-08-07 14:39



l'istanza non è altro che un'allocazione di memoria dinamica. In Java l'operatore 'new' viene usato per creare un'istanza ma l'oggetto è l'allocazione dinamica della memoria per i membri della classe o si può dire object è l'istanza della classe. per esempio malloc (), calloc () sono funzioni di allocazione della memoria dinamica, quindi possiamo dire che stanno creando istanza ma non possiamo dire che stiano creando oggetti.


0
2017-11-20 04:47