2013-08-28 13 views
10

Java consente di creare un metodo che ha il nome della classe e del tipo void (Like void constructor). Il costruttore non ha tipo e svolge la funzione del costruttore. Ma esiste un metodo di utilizzo sopra menzionato. Puoi dare esempi di questi usiPerché java consente il metodo che ha nome classe e tipo void

codice di esempio:

//my class 
class MyClass{ 

    //constructor 
    public MyClass(.....){ 
    } 

    //What is the use of the below method 
    public void MyClass(....){ 
    } 
} 
+0

questo potrebbe essere quello che cercate http://stackoverflow.com/questions/3401444/methods-with-same-name- as-constructor-why –

+0

Un 'costruttore 'è un tipo di metodo" speciale ". È trattato in modo diverso dal compilatore e dalla lingua. Restituisce esplicitamente un'istanza della classe (ad es. 'Public MyClass MyClass (...) {...}'), pertanto evita le normali restrizioni di denominazione del metodo. Detto questo, violerebbe le [convenzioni di denominazione Java] (http://www.oracle.com/technetwork/java/codeconv-138413.html) per creare un metodo che inizi con un carattere maiuscolo;) – MadProgrammer

+0

Il costruttore ha un nome di '' e un tipo di ritorno di 'void' a livello di codice byte, quindi non c'è conflitto. L'inizializzatore della classe statica è chiamato "" –

risposta

10

Per rispondere alla tua domanda: No, non ha un uso speciale. In realtà, è contro intuitivo e confuso. Alcuni compilatori genereranno persino un avviso "Questo metodo ha un nome costruttore".

Ma perché tecnicamente è possibile che sia non un errore di compilazione, consiglierei di stare lontano da esso. Esistono diversi nomi di metodi che possono essere più descrittivi e avere lo stesso scopo.

+2

Non penso che tutti i compilatori Java ti avviseranno di questo ... –

+0

Questa è un'ipotesi sicura. Fisso. – rocketboy

1

L'uso è identico a quello di qualsiasi altro metodo. E il tipo di reso non deve essere void. Può essere spesso fonte di confusione, ma è perfettamente legale denominare metodi come il nome della classe. Di solito causerà più confusione di quanto tu voglia, ma è un comportamento legale. I metodi non hanno proprietà speciali oltre a qualsiasi altro metodo di classe.

2

Sì, un più fresco di Java può confondere con questo. Il costruttore non può avere un tipo di ritorno. Ma alcune persone fraintendono che il "no return type" e "void" sono alcuni che sono uguali ma non lo è. Il costruttore è una storia diversa e il metodo che ha il nome della classe e qualsiasi altro tipo di ritorno (void, String, int, .......) è diverso. Ma è più confuso.

2

Non c'è sensibile utilizzo di un metodo coloro nome è lo stesso del nome della classe.

  • Si tratta di una violazione di stile. Secondo la guida in stile Java ufficiale, i nomi dei metodi Java dovrebbero iniziare con una lettera minuscola.

  • È confuso perché sembra superficialmente come un costruttore.

  • È confuso perché quando si utilizza tale metodo sembra che si stia utilizzando il nome della classe in modo errato.

  • È possibile che ciò comporti un comportamento imprevisto e/o errori di compilazione imprevisti dovuti all'ambiguità nome-classe vs nome-metodo.


Perché Java permette metodo che ha il nome della classe e il tipo di vuoto?

Fondamentalmente perché il linguaggio Java non vuol far rispettare le regole di stile identificatore. (IMO, sarebbe stato meglio se avesse applicato le regole ... ma la decisione è stata presa molto tempo fa e non può essere modificata per ragioni di compatibilità.)

2

No Non ha speciale utilizzo, sarà trattato come simile ad altri metodi all'interno della classe.

Sarà la pena di leggere qui di seguito l'articolo:

http://docs.oracle.com/javase/tutorial/java/javaOO/methods.html

Se il nome del metodo è uguale a nome della classe e non ha alcun tipo di ritorno quindi il suo noto come constructor che ha usi specialistici in oops.

mantenendo tali nomi come metodo creerà solo confusione e leggibilità del codice.

sottostante link viene potrebbe aiutare perché le questioni leggibilità: http://java.dzone.com/articles/why-code-readability-matters

Problemi correlati