
JAVA ⮊ FONDAMENTALI
Conoscenze acquisite per la comprensione e lo sviluppo dei prototipi

Visione d'insieme ( coding in Java )

"Bias" cosa sono ?
- il termine euristica, indica il modo in cui il nostro cervello
può trovare una soluzione a problemi complessi ricorrendo a delle "scorciatoie"
- euristica della disponibilità: quando prendiamo una decisione, spesso ci basiamo su singoli episodi e non su statistiche oggettive
- euristica dell’ancoraggio: tendiamo a fare scelte e valutazioni in base a esperienze precedenti relative a quella stessa circostanza, trascurando dati e circostanze contingenti che potrebbero portare a conclusioni diverse
- euristica della rappresentatività: è una scorciatoia mentale che utilizza la somiglianza tra elementi o categorie ( stereotipi ) per formulare valutazioni
- i bias cognitivi sono valutazioni errate della realtà,
pensieri che formuliamo in automatico senza “razionalità”
- fattori d'amplificazione sulla valutazione : tempo, costi ( vincoli )
- fattori di classificazione sull'informazione : dare un senso, come filtrare, cosa ricordare, come agire
La peggiore pratica è iniziare i primi passi nell'arte della programmazione con un #bias d'ancoraggio offerto dal più elementare #snippets come codice d'esempio per il beginner
public class Gfg
{
public static void main ( String[] args ) {
System.out.println( "GFG!" );
}
}
L'attenzione viene dirottata sulla struttura di un linguaggio o meglio
su come e non sul cosa riesce a creare.
Sarebbe necessario invece porre un approccio meticoloso sullo stato e sul comportamento
del requisito da progettare.

- la struttura: strumenti elementari orientati alla modellazione di un flusso
- la generalizzazione: strumenti avanzati orientati alla modellazione delle parti di un processo ( comportamento , complessità , algoritmo )
- lo scenario: strumenti specializzati nella descrizione di un meccanismo inteso come insieme di processi
✓ Fallace logiche: macro-gruppi


✓ Strumenti di produttività : promuovere il
pensiero critico durante il brainstorming
( sticker telegram )





















































Concetti alla base del linguaggio
✓ Classe
E' un modello che descrive lo stato
e il comportamento associato alla sue istanze
( oggetti )
Un'automobile è un oggetto che ha:
- stato → marca, colore, targa
- comportamento → transitare nella corsia stradale

Il comportamento di un oggetto è codificato nei metodi
l'indicatore del carburante segnala autonomia rimasta nell'auto✓ Variabili d'istanza
Ogni oggetto ha il suo set unico di variabili. Lo stato di un oggetto corrisponde ai valori assegnati a queste variabili
✓ Progettazione
Osservando lo stato bisogna porre attenzione :
- Visibilità
"cosa" il progettista attribuisce a uno sviluppo privato , pubblico o protetto ( in fase di consolidamento )
- Tipo di dato
"come" le informazioni che codificano il nostro scenario sono rappresentate dal linguaggio. Sono thread-safe ? E' importante un ordine d'inserimento ? Devono soddisfare criteri di ricerca ?
- primitivo → spazio in memoria con n byte fissi
- classe ( tipo di dato strutturato )
→
spazio in memoria di * byte
dinamico
// private è la visibilità // String è un tipo di dato strutturato // docs.oracle.com - Class String // text è un identificatore // dichiarazione variabile d'istanza private String text;
- classe immutabile → lo stato dell'istanza non è modificabile, ma l'istanza può essere ri-assegnata
- classe mutabile → lo stato dell'istanza può essere modificato
// public è la visibilità // int è un tipo di dato primitivo // con valori da -231 a 231-1 ( incluso ) // count è un identificatore // dichiarazione variabile d'istanza public int count;
Trail: Learning the Java Language
Java® Platform, SE & JDK Version 15 API Specification

- Assegnazione di una variabile
"come" le informazioni che codificano il nostro scenario sono attraversate, modificate e copiate in profondità
// = è il simbolo di assegnazione // accesso fisico in memoria a una sequenza di byte fissa count = 1; // sequenza di valori ordinati per inserimento // accesso per riferimento int[] arrayOfPrimeNum = { 1, 2, 3 };
- Accesso a una variabile
- spazio fisico → l'identificatore punta a un indirizzo in memoria che contiene un tipo di dato primitivo ( a lunghezza fissa ) o strutturato ( a lunghezza dinamica )
- per riferimento
→
l'identificatore
punta all'indirizzo in memoria
di un identificatore dello stesso tipo
( copia del indirizzo puntato )
// accesso per riferimento int[] arrayOfPrimeNum = { 1, 2, 3 }; int[] arrayReference = arrayOfPrimeNum;
- Quando una variabile d'istanza viene passata a un metodo
come parametro:
- se il tipo di dato è primitivo → il parametro è una copia del contenuto dell'indirizzo puntato
- se il tipo di dato è strutturato → il parametro è una copia dell'indirizzo puntato ( passaggio per riferimento )
Se invece consideriamo OOP su concetti di astrazione, ereditarietà, incapsulamento e polimorfismo, spostiamo l'attenzione sul "cosa" è necessario orientare la progettazione per segmentare la complessità.
✓ Strumenti di produttività : promuovere
il pensiero critico durante la progettazione
( @carlottamondelli instagram )

Documentazione API
Era usata in passato per il controllo dei tipi in linguaggi poco tipizzati. Veniva aggiunto al nome dell'identificatore il tipo d'appartenenza nella dichiarazione della variabile.
String stringAccount; // irrilevante
Notazione standard
✓ Nome del file sorgente
→ corrisponde esattamente all'identificatore della classe pubblica con l'estensione .java
- Gfg.java // valido
- gfg.java // invalido
public class Gfg
{
public static void main ( String[] args ) {
System.out.println( "GFG!" );
}
}
✓ Identificatori
Sono nomi di:
- package
- classi
- attributi-membro di classe
- istanze
- variabili d'istanza
- variabili locali
- metodi-membro di classe
✓ Identificatori di classe
→ la prima lettera della classe deve essere in maiuscolo
( è permesso minuscolo, ma scoraggiato )
→ se si usano più parole per formare il nome della classe,
la prima lettera di ogni parola interna deve essere in maiuscolo.
Le sottolineature sono consentite, ma non raccomandate.
Sono ammessi anche
numeri e simboli di valuta, anche se quest'ultimi
sono scoraggiati,
perché sono utilizzati come notazione per le classi interne e anonime.
- MioJavaProgram // sintassi valida
- 1Program // sintassi invalida
- Mio1Program // sintassi valida
- $Program // sintassi valida, ma scoraggiata
- Mio$Program // sintassi valida, ma scoraggiata ( inner class )
- mioJavaProgram // sintassi valida, ma scoraggiata
→ tutti gli identificatori possono iniziare con una lettera, un simbolo di valuta o un segno di sottolineatura ( _ ). Secondo la convenzione, il primo carattere dovrebbe essere minuscolo.
→ il primo carattere di un identificatore può essere seguito da qualsiasi combinazione di:
- lettere
- cifre
- simboli di valuta
- sottolineatura
→ la sottolineatura non è raccomandata per i nomi delle variabili
→ una parola chiave non può essere usata come identificatore
- MinNumero // sintassi scoraggiata
- alphaNum // sintassi valida
- ciao_mondo // sintassi scoraggiata
- $importo // sintassi valida
- ak74 // sintassi valida
- _peso_valore // sintassi scoraggiata
- 67ak // sintassi invalida
- -importo // sintassi invalida
Pianificazione di un indicatore

« Dobbiamo creare un ambiente evolutivo nel quale i paesi e le istituzioni possano crescere; in questo modo potremo risolvere i problemi a mano a mano che si presentano, unire attorno all'idea di come l'intelligenza collettiva possa trovare le soluzioni ai problemi del pianeta. Mettere insieme ! » [ Douglas Engelbart ]
✓ Come scelgo un nome per una variabile
- Usare nomi parlanti
→
esplicitano il contesto del codice
Perchè esiste ?
Cosa fà ?
Come viene usata ?
int i; // ambiguo int countAccount // parlante
- Usare distinzioni sensate:
- la denominazione numerica
( a1, a2, ... aN ) non solo è disinformativa,
ma è del tutto non informativa
public byte add( byte p1, byte p2 ) {...} // ambiguo public byte add( byte property, byte propertyOther ) {...} // parlante
- le parole di disurbo sono ridondanti
class Product // parlante class ProductData { ... } // ambiguo class ProductInfo { ... } // ambiguo
- la denominazione numerica
( a1, a2, ... aN ) non solo è disinformativa,
ma è del tutto non informativa
- Evitare
nomi dai significati ambigui
Account[] listAccount; // ambiguo ( l'identificatore non è una lista ) Account[] accountGroup // parlante
- Evitare nomi
con leggere differenze
String[] pathAccountInSystem; // ambiguo File[] pathAccountOutSystem; // ambiguo String[] physicalPathAccountSystem; // parlante File[] logicPathAccountSystem // parlante
- Usare nomi pronunciabili nel linguaggio naturale
String[] phyPathAccInSys; // ambiguo String[] physicalPathAccountSystem // parlante
- Usare nomi lunghi invece dei mono-lettera → sono facilmente ricercabili
- Usare nomi mono-lettera solo nei cicli → come variabile locale di servizio
- Aggiungere un contesto significativo
→
adottando l'uso di prefissi
String state // ambiguo String addrState // parlante

✓ Strumenti di produttività : promuovere
il pensiero critico durante la progettazione
( @carlottamondelli instagram )

JavaDoc
E' un tool generatore di documentazione standard in
formato HTML.
Genera documentazione
API,
risultato del parser su speciali tag,
contenuti nei commenti del codice sorgente, a corredo di:
- Package
- Classi
- Attributi-Membro di classe
- Interfacce
- Costruttori
- Metodi-Membro di classe
✓ Ordine dei tag
- @author
- @version
- @param
- @return
- @throws
- @see
- @since
- @serial
- @deprecated
Esempio: documentazione di una classe
/**
* La classe genera degli identificatori casuali.
* Ulteriori informazioni {@link org.buscati.knowledge.example}
*
* @author itammb ( Italia Massimiliano Buscati )
* @version JDK 1.15
*/
public class Example_001_JavaDoc { ... }
Esempio: documentazione di un attributo-membro di classe
/**
* Formato: anno-mese-giorno.ora.minuti.secondi.millisecondi
*/
public final static String PATTERN_DATETIME = "yyyy-MM-dd.hh.mm.ss.SSS";
Esempio: documentazione di un metodo
/**
* @return Sequenza temporale alfanumerica
*
* @throws InterruptedException
*
* @see Locale
* @see SimpleDateFormat
* @see buscati.org
*
* @since JDK 1.15
*/
public synchronized String timeUnique() throws InterruptedException {
... }
Tag | Visibilità | Descrizione |
---|---|---|
@author name-text | package, classi, interfacce | identifica → l'autore del codice sorgente |
@version version-text | package, classi, interfacce |
|
@since since-text | package, classi, interfacce, costruttori, metodi-membro di classe, attributi-membro di classe |
descrive
→
quando una modifica o una funzionalità
viene codificata
per la prima volta
si deve specificare un tag @since:
|
@param
|
costruttori, metodi-membro di classe | identifica → uno dei parametri di un metodo |
@return description-text | metodo | descrivere → il tipo di ritorno e la gamma di valori consentiti |
{@value package.class#field} | package, classi, interfacce, costruttori, metodi-membro di classe, attributi-membro di classe | visualizza → il valore di una costante |
@throws
|
costruttori, metodi-membro di classe | è usato per spiegare ulteriormente, i casi in cui il codice genera un'eccezione |
@see
|
package, classi, interfacce, costruttori, metodi-membro di classe, attributi-membro di classe | fornisce → un riferimento nella sezione "vedi anche" |
{@link} | package, classi, interfacce, costruttori, metodi-membro di classe, attributi-membro di classe | fornisce → un link simile al tag @see. Entrambi i tag richiedono gli stessi riferimenti e accettano la stessa sintassi e label. La differenza principale è che il tag {@link}, genera un collegamento in linea, anziché inserire il collegamento nella sezione "vedi anche" |
@serial
|
package, classi, interfacce, attributi-membro di classe |
|
@SuppressWarnings
|
classi, interfacce, costruttori, metodi-membro di classe, attributi-membro di classe | specifica → che gli avvisi del compilatore devono essere soppressi |
@deprecated deprecated-text | classi, interfacce, costruttori, metodi-membro di classe, attributi-membro di classe | specifica → che il codice sorgente particolare non deve essere utilizzato ( anche se può continuare a funzionare ) |
{@code text } | package, classi, interfacce, costruttori, metodi-membro di classe, attributi-membro di classe | visualizza → un codice sorgente senza interpretare il testo come markup HTML o tag Javadoc. Non mantiene la formattazione del testo |
✓ Requisiti di un un commento performante
- Essere esplicativi nel codice
è preferibile a qualsiasi commento
// controlla se un dipendente ha diritto al bonus per intero if (employee.flagBonus && employee.yearsOfWork > 10 ); // ambiguo if (employee.isEligibleForFullBenefits()); // parlante
- Adoperare commenti informativi:
/** * Formato: anno-mese-giorno.ora.minuti.secondi.millisecondi */ public final static String PATTERN_DATETIME = "yyyy-MM-dd.hh.mm.ss.SSS";
- Lasciare commenti su sezioni di codice in divenire nello sviluppo
- Adoperare commenti
descrittivi
public synchronized static int isAvailableBufferMemory() { RUNTIME.gc(); double jvmFM = Long.valueOf(RUNTIME.freeMemory()).doubleValue(); double bufSize = jvmFM * PERC_USAGE_MEMORY; // data una %_ di utilizzo della memoria // restituisce la dimensione del buffer allocabile più grande return Double.valueOf(bufSize).intValue(); }
- Usare commenti
per amplificantare o chiarire l'importanza del codice
public synchronized static long jvmFreeMemory() { long jvmUM = jvmUsedMemory(); // memoria disponibile in bytes return RUNTIME.maxMemory() - jvmUM; }
Esempio: documentazione API di un programma
naviga API
compila il codice
Workaround: come configurare
l'ambiente Eclipse IDE
per generare documentazione API
Workaround: come creare
una documentazione API in ambiente Eclipse IDE
Annotations
Le annotazioni
vengono utilizzate per fornire
informazioni supplementari
dentro il codice sorgente:
- iniziano con '@'
- non modificano la logica del codice
- associano metadati (informazioni) a → variabili d'istanza, costruttori, metodi e classi
- possono modificare il modo in cui un programma viene trattato dal compilatore
- servono a fornire informazioni aggiuntive in alternativa a XML e ai marker Java
- marcano una dichiarazione
- non contengono parametri e non consistono in alcun dato
- è sufficiente determinare se il marcatore è presente o assente
@Override
public String toString()
{
Print print = new Print();
print.add("absolute path", absolute_path);
print.add("time to log ", getWishSCHEDULE_AT_FIXED_RATE_LOG());
return print.toString( Log.class.getName() );
}
docs.oracle.com - Annotations
✓ Meta-Annotations ( con parametri )
- @Target
→
specifica il tipo d'elemento
a cui applicare l'annotazione
Parametro Visibilità TYPE Classe, interfaccia, tipo-enumerazione FIELD Attributo-membro di classe METHOD Metodo-membro di classe CONSTRUCTOR Costuttore LOCAL_VARIABLE Variabile locale ANNOTATION_TYPE Tipo-annotazione PARAMETER Parametri
- @Retention
→
specifica a quale livello
sarà disponibile l'annotazione
Parametro Visibilità SOURCE solo nel codice sorgente CLASS solo nel *.class RUNTIME disponibile nel *.class e alla JVM ( in fase di run-time )
- @Inherited → indica che l'annotazione può essere ereditata dalle sotto-classi. Per impostazione predefinita, le annotazioni non lo sono
- @Documented → contrassegna l'annotazione per l'inclusione nella documentazione
docs.oracle.com - Package java.lang.annotation
docs.oracle.com - Package java.lang.reflect
✓ Custom-Annotations
( personalizzate )
- @interface viene utilizzato per dichiarare un'annotazione
- non ha clausole throws
- deve restituire un tipo → primitivo, String, Class, enum o array di questi tipi
- non ha alcun parametro
- è possibile assegnare un valore predefinito
// marker Annotation
@interface MyAnnotation{ ... }
// dichiarazione di un annotazione
public @interface Source {
String autore() default "Pinco Pallino"; // valori predefiniti
double versione() default 0;
}
// assegnazione valori
@Source( autore = "Massimiliano Buscati", versione = 1.1 )
public class TestClass { ... }
Esempio: dichiarazione,
assegnazione e
navigazione di custom-annotations
docs.oracle.com - Package java.lang.annotation
docs.oracle.com - Package java.lang.reflect
compila il codice
Struttura di un programma
✓ Case-sensitivity
Java è un linguaggio case-sensitive
→
l'identificatore con nome AB,
per la JVM, è diverso
dal identificatore contrassegnato come Ab,
aB o ab
System.out.println("Alice"); // sintassi valida
system.out.println("Alice"); // sintassi con errore
Il metodo main() →
è il punto d'ingresso principale, in un programma.E' il punto dove inizia l'elaborazione.
public static void main(String [] args)
✓ Keywords
- vengono utilizzate per processi interni o azioni predefinite
- non possono essere usate come nome d'identificatore o di classe
package | import | |||||||
const | boolean | enum | byte | long | char | float | short | double |
final | static | abstract | synchronized | default | ||||
private | public | protected | transient | volatile | ||||
interface | class | extends | implements | |||||
instanceof | new | this | super | |||||
if | else | switch | for | do | while | continue | break | return |
assert | try | finally | catch | throw | throws |
Formattazione di una classe ( dove metti cosa )
La variabile deve essere dichiarata:
- se d'istanza → in cima alla classe
- se costante o enumerazione → in cima alla classe
- se locale
→
vicino al codice che la manipola
- se di controllo → nell'istruzione del ciclo
- se subordinata → in cima a un blocco
- se principale → sopra le subordinate
- se affine ad altre → raggruppate nello stesso posto
- se costruttore → sotto le variabili d'istanza
Quando si sviluppa un codice:
- le variabili d'istanza sono inizialmente private ( anche final ) ma possono passare a protected
- le costanti e le enumerazioni sono sempre static e public
- le funzioni principali sono sempre public o protected e static ( se appartenenti alla classe )
- le funzioni subbordinate sono sempre private e static ( se appartenenti alla classe )
public class Skeleton {
// → costanti ed enumerazioni
// → variabili d'istanza
// → metodi cotruttore
// → funzioni principali
// → funzioni subordinate
// → funzioni affini principali o subordinate
}
Esempio: formattazione
di una classe -dove metto cosa-
( eliminazione spazzi bianchi duplicati da un testo )
Disegnare uno scenario aumenta
la visione delle possibili soluzioni
in fase di progettazione
e migliora il codice che descrive la soluzione, durante lo sviluppo.
docs.oracle.com - Class Character
docs.oracle.com - Class String
docs.oracle.com - Class StringBuffer
compila il codice
Esempio: formattazione di una classe
-dove metto cosa- ( ricerca di una parola )
docs.oracle.com - Interface Comparable
docs.oracle.com - Class AbstractMap.SimpleEntry<K,V>
compila il codice
Dichiarazione di variabili: locali, d'istanza, statiche
✓ Variabili locali
Sono definite all'interno
di un blocco,
di un metodo
o un costruttore.
- vengono create quando si entra nel blocco o quando il metodo viene chiamato
- sono distrutte dopo l'uscita dal blocco o quando la chiamata ritorna dal metodo
- lo scope di queste variabili esiste solo all'interno del blocco in cui vengono dichiarate
- l'inizializzazione è obbligatoria
Sono variabili non statiche e sono dichiarate in una classe, al di fuori di qualsiasi metodo, costruttore o blocco.
- vengono create quando si istanzia una classe
- vengono distrutte quando l'istanza viene distrutta
- a differenza delle variabili locali, si può assegnare un access-specifier ( se non esplicito per default ne viene associato uno predefinito )
- l'inizializzazione non è obbligatoria
- hanno valore predefinito 0 o null
- è possibile accedervi, solo creando un oggetto
Object-Type obj = new Object-Type();
✓ Variabili statiche
Sono anche conosciute come attributi-membro di classe.
- sono dichiarate usando la parola chiave static all'interno di una classe, al di fuori di qualsiasi costruttore o blocco di metodo
- vengono create durante la compilazione e distrutte automaticamente al termine dell'esecuzione
- l'inizializzazione non è obbligatoria
- hanno valore predefinito 0 o null
- se si accede alla variabile statica senza il nome della classe, il compilatore aggiungerà automaticamente il riferimento alla classe
✓ Differenze tra variabile d'istanza e variabili statiche
- le modifiche apportate a una variabile d'istanza, non saranno riflesse in altri oggetti, poiché ogni oggetto ha la propria copia della variabile
- le modifiche apportate a una variabile statica, saranno riflesse in altri oggetti, poiché le variabili statiche sono comuni a tutti gli oggetti di una classe
- possiamo accedere alle variabili d'istanza tramite riferimenti ad oggetti
- possiamo accedere alle variabili statiche direttamente usando il nome della classe
Visibilità e modificatori d'acceso ( scope )

✓ Accesso a un metodo
Classe-padre | Package | Classe-figlia |
---|---|---|
public | Yes | Yes |
protected | No | Yes |
private | No | No |
- le parentesi graffe { ... } definiscono un ambito
- l'accesso a una variabile è subordinato al codice definito in quel ambito
- qualsiasi variabile definita in una classe, al di fuori di qualsiasi metodo, può essere utilizzata da tutti i metodi membro di quella classe
- la parola chiave this,
può essere usata per fare
riferimento a una variabile d'istanza
public class Scope { private int primitiveNum; public Scope(int primitiveNum) { this.primitiveNum = primitiveNum; } }
- la variabile a cui si accede, all'interno di un ciclo, deve essere dichiarata e inizializzata prima del corpo del ciclo
Esempio: visibilità di una variabile
d'istanza e locale ( dentro un metodo )
compila il codice
Esempio: visibilità di
una variabile d'istanza e locale
( dentro un blocco )
compila il codice
Esempio: visibilità ( implicita ) di
una variabile d'istanza attraverso i metodi get / set
compila il codice

Riferimenti
Protocolli
IEEE 754 Character Sets datatracker.ietf.org - RFC 4647 "Matching of Language Tags" datatracker.ietf.org - RFC 5646 "Tags for Identifying Languages"Java documentazione
bugs.java.com - Java Bug Database JDK 15 Documentation Version 15 API Specification Java Core Libraries Java Tutorials Learning Paths docs.oracle.com - Documentation Comment Specification for the Standard Doclet ( JDK 15 ) docs.oracle.com - How to Write Doc Comments for the Javadoc Tool docs.oracle.com - Documentation Comment Specification for the Standard Doclet ( JDK 15 ) docs.oracle.com - The Java API Documentation Generator docs.oracle.com - How to Write Doc Comments for the Javadoc Tool oracle.com - Requirements for Writing Java API Specifications docs.oracle.com - Package java.lang.annotation docs.oracle.com - Package java.lang.reflectModulo → java.base : : Package → java.lang
docs.oracle.com - Class Character docs.oracle.com - Class String docs.oracle.com - Class StringBuffer docs.oracle.com - Interface Comparable docs.oracle.com - Class Math docs.oracle.com - Class Integer docs.oracle.com - Class Long docs.oracle.com - Class Float docs.oracle.com - Class Double docs.oracle.com - Class Array docs.oracle.com - Interface Cloneable docs.oracle.com - Class Exception docs.oracle.com - Class AssertionErrorModulo → java.base : : Package → java.util
docs.oracle.com - Class AbstractMap.SimpleEntry<K,V> docs.oracle.com - Class ArraysUML slide
dmi.unict.it - Emiliano TramontanaBias
unobravo.com - bias cognitivi: cosa sono valerio.it - bias cognitivi: cosa sono efficacemente.com - bias cognitivi: cosa sono rentalblog.it - effetto ancoraggio rentalblog.it - euristica della disponibilita rentalblog.it - effetto gregge rentalblog.it - errore di rinforzo delle scelte rentalblog.it - pregiudizio di conferma rentalblog.it - fallacia dello scommettitore rentalblog.it - pregiudizio sullo status-quo rentalblog.it - effetto dotazione medicinaonline.co - clustering illusion rentalblog.it - effetto framingAlgoritmi
Funzione di hashTutorial
docs.oracle.com - The Java™ Tutorial - Annotations docs.oracle.com - Arrays and Enumerated Types docs.oracle.com - The Java™ Tutorial - Operators docs.oracle.com - The Java™ Tutorial - Control Flow Statements geeksforgeeks.org - Java Programming Language geeksforgeeks.org - java.lang package in Java geeksforgeeks.org - Annotations in Java geeksforgeeks.org - Static class in Java geeksforgeeks.org - final Keyword in Java geeksforgeeks.org - Access and Non Access Modifiers in Java geeksforgeeks.org - Java Basic Syntax geeksforgeeks.org - Variables in Java geeksforgeeks.org - Scope of Variables In Java geeksforgeeks.org - Data types in Java geeksforgeeks.org - Rounding off errors in Java geeksforgeeks.org - Operators in Java geeksforgeeks.org - foreach() loop vs Stream foreach() geeksforgeeks.org - Exceptions in Java geeksforgeeks.org - Object Oriented Programming geeksforgeeks.org - Private Constructors and Singleton Classes geeksforgeeks.org - Inner Class geeksforgeeks.org - Functional Interfaces geeksforgeeks.org - Comparator Interface careydevelopment.us - Java 8: How to Use forEach With Lambda Expressions java2s.com - java.lang java2s.com - String Example lia.disi.unibo.it - Una Rapida Parentesi su Java 5 e Annotazioni demo2s.com - Java / Annotations stackoverflow.com - Arrays.asList() of an array baeldung.com - How to Round a Number to N Decimal Places in Java baeldung.com - Using Java Assertions w3schools.com - Java Data Types howtodoinjava.com - Java Data Types tabnine.com - How to use java.math.BigDecimalBibliografia
docstore.mik.ua - The java.lang Package docstore.mik.ua - The java.text Package
Acquisto consigliato → Titolo: Clean Code, Autore: Robert C. Martin, Casa Editrice: Apogeo
© Buscati Caminiti Massimiliano Patrizio. All rights reserved. office@buscati.org