Capitolo 7 Programmazione con metodi e classi Lucidi relativi al volume: Java – Guida alla programmazione James Cohoon, Jack Davidson Copyright © 2004.

Slides:



Advertisements
Presentazioni simili
Mostrare l'evoluzione dello stato (ambiente di classi, heap, pila, System.out) dopo ciascuna istruzione del main: public class Up extends Object { public.
Advertisements

1 Le s-espressioni. 2 Un nuovo esempio completo: le s-espressioni Sexpr 4 alberi binari (possibilmente vuoti) che hanno sulle foglie atomi (stringhe)
1 Progettazione gerarchica delle s- espressioni, utilizzando lereditarietà
Interfacce Java.
WSDL (Web Services Description Language) Laurea Magistrale in Informatica Reti 2 (2006/07) dott. Federico Paoloni
Capitolo 2 Nozioni fondamentali su Java Lucidi relativi al volume: Java – Guida alla programmazione James Cohoon, Jack Davidson Copyright © The McGraw-Hill.
Capitolo 4 Classi Lucidi relativi al volume: Java – Guida alla programmazione James Cohoon, Jack Davidson Copyright © The McGraw-Hill Companies.
Capitolo 2 Nozioni fondamentali su Java Lucidi relativi al volume: Java – Guida alla programmazione James Cohoon, Jack Davidson Copyright © The McGraw-Hill.
Capitolo 5 Decisioni Lucidi relativi al volume: Java – Guida alla programmazione James Cohoon, Jack Davidson Copyright © The McGraw-Hill Companies.
Capitolo 8 Array Lucidi relativi al volume: Java – Guida alla programmazione James Cohoon, Jack Davidson Copyright © The McGraw-Hill Companies srl.
Alcune Classi Standard Object, Vettori. Esercizio dellultima volta Superclasse Persona Sottoclasse Libro.
Esercizio 2. Mostrare l'evoluzione dello stato (ambiente di classi, heap, pila, System.out) durante la valutazione delle seguenti dichiarazioni di classe.
Esempio: Tombola! Parte seconda.
Unified Modeling Language class C {…} class B extends C {…} Esiste una notazione grafica per mostrare le relazioni di ereditarietà. Object StringC B Tutte.
J0 1 Marco Ronchetti Java Threads & Sincronizzazione.
Modificatori: static Variabili e metodi associati ad una Classe anziche ad un Oggetto sono definiti static. Le variabili statiche servono come singola.
Richiami di Java Multithreading. Threads (subclassing) public class A { public void a_method { C t = new C(); //C t = new C(String name); t.start(); …
Sezione: Costruttori Costruttori. Definizione dei costruttori Se per una classe A non scrivo nessun costruttore, il sistema automaticamente crea il costruttore.
prompt> java SumAverage
1 struct Pila { private: int size; int defaultGrowthSize; int marker; int * contenuto; void cresci(int increment); public: Pila(int initialSize) ; Pila();
Concetti di informatica e fondamenti di Java, 4 ed.Apogeo ©2007 Capitolo 7 Vettori e array Cay S. Horstmann Concetti di informatica e fondamenti di Java.
Costruzione di Interfacce Lezione 10 Dal Java al C++ parte 1
1 Corso di Laurea in Biotecnologie Informatica (Programmazione) Introduzione a JAVA Anno Accademico 2009/2010.
1 Corso di Informatica (Programmazione) Lezione 12 (19 novembre 2008) Programmazione in Java: i metodi statici.
Corso di Informatica (Programmazione)
1 Lezione XIII Lu 17-Nov-2005 Programmare le classi.
1. Conoscere luso delle collezioni in Java Comprendere le principali caratteristiche nelle varie classi di Collection disponibili Saper individuare quali.
JAVA C import java.util.*; #include <stdio.h>
Soluzione Esercizio - Classe Vettore
Programming with JXTA Hello World Peer discovery Peer Group discovery Creating Peer group Joining a Peer Group.
1 Implementazione di Linguaggi 2 PARTE 6 Implementazione di Linguaggi 2 PARTE 6 Massimo Ancona DISI Università di Genova Testo: A.V. Aho, R. Sethi, J.D.Ullman.
Selezione (=scelta) con “if-else”
2000 Prentice Hall, Inc. All rights reserved. 1 Capitolo 6: Classi e astrazione dati 1.Introduzione 2.Definizione delle strutture 3.Accedere ai membri.
Sottoprogrammi e Unità di Compilazione Nicola Fanizzi Laboratorio - Corso di Programmazione (B) C.d.L. in Informatica DIB - Università degli Studi di Bari.
1 laboratorio di calcolo II AA 2003/04 ottava settimana a cura di Domizia Orestano Dipartimento di Fisica Stanza tel. ( )
Packages. Package: insieme di classi e interfacce in relazione Per formare un package basta inserire la direttiva come prima istruzione nel file sorgente.
Gestione File System e I/O in Windows 2000 Implementazione del File System FAT-12, FAT-16, FAT-32 NTFS API relative al File System Gestione dei dispositivi.
Programmazione distribuita in Java
1 Funzioni e Procedure in C Corso di Informatica A Vito Perrone.
Componenti dell’architettura Oracle
Elementi di programmazione ad oggetti a. a. 2009/2010 Corso di Laurea Magistrale in Ingegneria Elettronica Docente: Mauro Mazzieri, Dipartimento di Ingegneria.
Lezione n° 05 Istituto Statale di Istruzione Superiore F. Enriques Corso JAVA.
Un esempio: Registrazione e lettura di dati in un file
JavaScript Lezione 5 Tipizzazione ed operazioni tra tipi diversi Istruzioni di input.
OUTPUT FORMATTATO La funzione printf consente di effettuare la stampa a video formattata. Sintassi: printf ( stringa_formato, arg0, arg1, … ); La stringa.
Moduli o Form I Moduli permettono all'utente di immettere informazioni...
Fondamenti di Informatica Corsi di Laurea in Ingegneria Gestionale Canale AL ESERCITAZIONE 6 ARGOMENTI: LAVORARE CON CLASSI METODI DELLISTANZA, COSTRUTTORI.
1 Lucidi delle esercitazioni di Sistemi di Elaborazione in Rete Università degli Studi della Calabria Corso di Laurea in Ingegneria Informatica A.A. 2003/2004.
24 aprile 2002 Avvisi: Risultati 1 o Esonero: (entro) lunedi 27 disponibili nella pag. WEB, ma anche esposti nella bacheca fuori dal corridoio 2 o dente,
Ese 2 (del 31 Marzo 2004). Mostrare l'evoluzione dello stato (ambiente di classi, heap, pila, System.out) durante la valutazione delle seguenti dichiarazioni.
Multiset. Progettare (specifica con identificazione delle eventuali astrazioni necessarie, incluse eccezioni, e implementazione) del tipo di dato Multiset,
Soluzioni 1.Struttura base soluzione 2.Lettura dei tasti 3.Identificazione dei tasti 4.Accensione dei LED 5.Rotazione dei LED 6.Rotazione dei tasti fino.
Test con JUnit. zJUnit è un ambiente di test per programmi Java ySviluppato da Kent Beck É possibile usare JUnit allinterno di Eclipse per eseguire i.
1 Simulated multiple inheritance Sandro Pedrazzini Approfondimento Simulated multiple inheritance in Java.
Appunti di Java (J2SDK 1.4.2, JDK 1.6.0) prof. Antonella Schiavon settembre 2009.
Introduzione al linguaggio C. Cos’e’ il C? Il C e’ un linguaggio ad alto livello Un compilatore C prende in input un file contenente codice sorgente C.
Collection & Generics in Java
Esercizi.
Fondamenti di informatica T-A Esercitazione 7 : Collezioni AA 2012/2013 Tutor : Domenico Di Carlo.
Stack Già visto l’altra volta senza gestione eccezioni, le prime tre slide servono solo come ripasso, dalla quarta argomento nuovo class Stack { int data[];
JDBC Java DataBase Connectivity SISTEMI ITIS B. CASTELLI Anno Scolastico
Definizione di classi Capitolo 18 febbraio 2004 Definizione di classi.
Fondamenti di informatica Oggetti e Java Luca Cabibbo Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies.
Capitolo 6 Iterazione Lucidi relativi al volume: Java – Guida alla programmazione James Cohoon, Jack Davidson Copyright © The McGraw-Hill Companies.
Fondamenti di informatica Oggetti e Java Luca Cabibbo Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies.
Capitolo 12 Thread Lucidi relativi al volume: Java – Guida alla programmazione James Cohoon, Jack Davidson Copyright © The McGraw-Hill Companies.
Ereditarietà Uno dei principi della programmazione orientata agli oggetti (OOP) è il riuso Le classi dovrebbero essere progettate come componenti riutilizzabili.
Esercitazioni di C++ 31 dicembre 2018 Claudio Rocchini IGMI.
Oggetti Java.
Ricorsione 16/01/2019 package.
Transcript della presentazione:

Capitolo 7 Programmazione con metodi e classi Lucidi relativi al volume: Java – Guida alla programmazione James Cohoon, Jack Davidson Copyright © The McGraw-Hill Companies srl

Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © The McGraw-Hill Companies srl Metodi Metodo istanza Opera su un oggetto (vale a dire un'istanza della classe) String s = new String("Help every cow reach its " + "potential!"); int n = s.length(); Metodo di classe Servizio fornito da una classe che non è associato a un particolare oggetto String t = String.valueOf(n); Metodo istanza Metodo di classe

Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © The McGraw-Hill Companies srl Campi dati Variabile istanza e costanti istanza Attributo di un particolare oggetto Solitamente una variabile Point p = new Point(5, 5); int px = p.x; Variabile e costanti di classe Informazioni collettive che non sono specifiche per i singoli oggetti della classe Solitamente una costante Color favoriteColor = Color.MAGENTA; double favoriteNumber = MATH.PI - MATH.E; Variabile istanza Costanti di classe

Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © The McGraw-Hill Companies srl Attività - Conversion.java Supporta la conversione tra valori anglosassoni e metrici d degrees Fahrenheit = (d -32)/1.8 degrees Celsius 1 mile = kilometers 1 gallon = liters 1 ounce (avdp) = grams 1 acre = square miles = hectares

Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © The McGraw-Hill Companies srl Implementazione della conversione public class Conversion // equivalenze per la conversione private static final double KILOMETERS_PER_MILE = ; private static final double LITERS_PER_GALLON = ; private static final double GRAMS_PER_OUNCE = ; private static final double HECTARES_PER_ACRE = ;

Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © The McGraw-Hill Companies srl Implementazione della conversione // metodi di conversione della temperatura public static double fahrenheitToCelsius(double f) return (f - 32) / 1.8; } public static double celsiusToFahrenheit(double c) return 1.8 * c + 32; } // metodi di conversione della lunghezza public static double kilometersToMiles(double km) return km / KILOMETERS_PER_MILE; }

Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © The McGraw-Hill Companies srl Implementazione della conversione Il modificatore public indica che altre classi possono utilizzare questo metodo Il modificatore static indica che questo metodo è un metodo di classe Si noti che il metodo non contiene un riferimento a un attributo di un oggetto Conversion implicito (ossia, manca la parola chiave "this"). Questa assenza è una caratteristica tipica dei metodi di classe, che vengono invocati senza far riferimento a un particolare oggetto

Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © The McGraw-Hill Companies srl Implementazione della conversione // metodi di conversione della massa public static double litersToGallons(double liters) return liters / LITERS_PER_GALLON; } public static double gallonsToLiters(double gallons) return gallons * LITERS_PER_GALLON; } public static double gramsToOunces(double grams) return grams / GRAMS_PER_OUNCE; } public static double ouncesToGrams(double ounces) return ounces * GRAMS_PER_OUNCE; }

Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © The McGraw-Hill Companies srl Implementazione della conversione // metodi di conversione dell'area public static double hectaresToAcres(double hectares) return hectares / HECTARES_PER_ACRE; } public static double acresToHectares(double acres) return acres * HECTARES_PER_ACRE; }

Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © The McGraw-Hill Companies srl Utilizzo della conversione BufferedReader stdin = new BufferedReader( new InputStreamReader(System.in)); System.out.print("Enter a length in kilometers: "); double kilometers = Double.parseDouble(stdin.readLine()); System.out.print("Enter a mass in liters: "); double liters = Double.parseDouble(stdin.readLine()); System.out.print("Enter a mass in grams: "); double grams = Double.parseDouble(stdin.readLine()); System.out.print("Enter an area in hectares: "); double hectares = Double.parseDouble(stdin.readLine()); double miles = Conversion.kilometersToMiles(kilometers); double gallons = Conversion.litersToGallons(liters); double ounces = Conversion.gramsToOunces(grams); double acres = Conversion.hectaresToAcres(hectares);

Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © The McGraw-Hill Companies srl Utilizzo della conversione System.out.println(kilometers + " kilometers = " + miles + " miles "); System.out.println(liters + " liters = " + gallons + " gallons"); System.out.println(grams + " grams = " + ounces + " ounces"); System.out.println(hectares + " hectares = " + acres + " acres"); 2.0 kilometers = miles 3.0 liters = gallons 4.0 grams = ounces 5.0 hectares = acres

Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © The McGraw-Hill Companies srl Utilizzo preferito della conversione NumberFormat style = NumberFormat.getNumberInstance(); style.setMaximumFractionDigits(2); style.setMinimumFractionDigits(2); System.out.println(kilometers + " kilometers = " + style.format(miles) + " miles "); System.out.println(liters + " liters = " + style.format(gallons) + " gallons"); System.out.println(grams + " grams = " + style.format(ounces) + " ounces"); System.out.println(hectares + " hectares = " + style.format(acres) + " acres"); 2.0 kilometers = 2,00 km 3.0 liters = 0,79 gallons 4.0 grams = 0,14 ounces 5.0 hectares = acres Parte di java.text

Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © The McGraw-Hill Companies srl Invocazioni dei metodi I parametri effettivi forniscono informazioni altrimenti non disponibili per un metodo Quando viene invocato un metodo Java riserva la memoria per quella particolare invocazione Viene chiamato il record di attivazione Il record di attivazione memorizza, tra le altre cose, i valori dei parametri formali I parametri formali inizializzati con i valori dei parametri effettivi Dopo l'inizializzazione, i parametri effettivi e i parametri formali sono indipendenti gli uni dagli altri Il flusso di controllo è trasferito temporaneamente a quel metodo

Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © The McGraw-Hill Companies srl Dimostrazione del passaggio di parametri per valore public class Demo public static double add(double x, double y) double result = x + y; return result; } public static double multiply(double x, double y) x = x * y; return x; } public static void main(String[] args) double a = 8, b = 11; double sum = add(a, b); System.out.println(a + " + " + b + " = " + sum); double product = multiply(a, b); System.out.println(a + " * " + b + " = " + product); }

Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © The McGraw-Hill Companies srl Dimostrazione del passaggio di parametri per valore multiply() non cambia il parametro effettivo

Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © The McGraw-Hill Companies srl Demo.java I valori iniziali dei parametri formali derivano dai parametri effettivi

Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © The McGraw-Hill Companies srl Demo.java I valori iniziali dei parametri formali derivano dai parametri effettivi

Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © The McGraw-Hill Companies srl PassingReferences.java public class PassingReferences public static void f(Point v) v = new Point(0, 0); } public static void g(Point v) v.setLocation(0, 0); } public static void main(String[] args) Point p = new Point(10, 10); System.out.println(p); f(p); System.out.println(p); g(p); System.out.println(p); }

Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © The McGraw-Hill Companies srl Esecuzione di PassingReferences.java g() può cambiare gli attributi delloggetto a cui p fa riferimento

Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © The McGraw-Hill Companies srl PassingReferences.java public static void main(String[] args){ Point p = new Point(10, 10); System.out.println(p); f(p); java.awt.Point[x=10,y=10 ] La variabile p del metodo main() e il parametro formale del metodo f() hanno lo stesso valore, che è un riferimento a un oggetto che rappresenta la posizione (10,10)

Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © The McGraw-Hill Companies srl PassingReferences.java public static void f(Point v) { v = new Point(0, 0); }

Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © The McGraw-Hill Companies srl PassingReferences.java public static void main(String[] args){ Point p = new Point(10, 10); System.out.println(p); f(p); System.out.println(p); g(p); java.awt.Point[x=10,y=10 ] La variabile p del metodo main() e il parametro formale del metodo f() hanno lo stesso valore, che è un riferimento a un oggetto che rappresenta la posizione (10,10)

Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © The McGraw-Hill Companies srl PassingReferences.java public static void g(Point v) { v.setLocation(0, 0); } La variabile p del metodo main() e il parametro formale del metodo f() hanno lo stesso valore, che è un riferimento a un oggetto che rappresenta la posizione (10,10)

Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © The McGraw-Hill Companies srl PassingReferences.java public static void main(String[] args){ Point p = new Point(10, 10); System.out.println(p); f(p); System.out.println(p); g(p); System.out.println(p); java.awt.Point[x=10,y=10 ] java.awt.Point[x=0,y=0]

Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © The McGraw-Hill Companies srl Attività - Triple.java Rappresenta gli oggetti con tre attributi interi public Triple() Costruisce un valore Triple predefinito che rappresenta tre zeri public Triple(int a, int b, int c) Costruisce una rappresentazione dei valori a, b e c public int getValue(int i) Restituisce l'iesimo elemento del Triple associato public void setValue(int i, int value) Imposta l'iesimo elemento del Triple associato sul valore

Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © The McGraw-Hill Companies srl Attività - Triple.java Rappresenta gli oggetti con tre attributi interi public String toString() Restituisce una rappresentazione di testo del Triple associato public Object clone() Restituisce un nuovo Triple la cui rappresentazione è la stessa del triple associato public boolean equals(Object v) Indica se v è equivalente al Triple associato Questi tre metodi sono prevalenze sui metodi ereditati

Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © The McGraw-Hill Companies srl Implementazione di Triple.java Il nuovo oggetto Triple (l'oggetto this) viene costruito invocando il costruttore Triple che si aspetta tre valori int come parametri effettivi Invocazione this() illegale. Un'invocazione this() deve essere all'inizio del corpo dell'istruzione

Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © The McGraw-Hill Companies srl Implementazione di Triple.java // Triple(): costruttore specifico public Triple(int a, int b, int c) setValue(1, a); setValue(2, b); setValue(3, c); } // Triple(): costruttore specifico - definizione alternativa public Triple(int a, int b, int c) this.setValue(1, a); this.setValue(2, b); this.setValue(3, c); }

Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © The McGraw-Hill Companies srl Implementazione di Triple.java La classe Triple è simile a ogni altra classe Java Automaticamente un'estensione della classe standard Object La classe Object specifica alcuni comportamenti di base comuni a tutti gli oggetti Questi comportamenti sono ereditati Tre dei metodi Object ereditati toString() clone() equals()

Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © The McGraw-Hill Companies srl Raccomandazione Le classi dovrebbero avere la prevalenza (fornire un'implementazione specifica per la classe) toString() clone() equals() In questo modo può essere fornito il comportamento previsto dal programmatore System.out.println(p); // versione stringa di // oggetto referenziato da p System.out.println(q); // versione stringa di // oggetto referenziato da q

Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © The McGraw-Hill Companies srl Implementazione di toString() per Triple.java public String toString(){ int a = getValue(1); int b = getValue(2); int c = getValue(3); return "Triple[" + a + ", " + b + ", " + c+ "]"); } Considerare Triple t1 = new Triple(10, 20, 30); System.out.println(t1); Triple t2 = new Triple(8, 88, 888); System.out.println(t2); Produce Triple[10, 20, 30] Triple[8, 88, 888]

Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © The McGraw-Hill Companies srl Implementazione di clone() per Triple.java public String clone() { int a = getValue(1); int b = getValue(2); int c = getValue(3); return new Triple(a, b, c); } Considerare Triple t1 = new Triple(9, 28, 29); Triple t2 = (Triple) t1.clone(); System.out.println("t1 = " + t1); System.out.println("t2 = " + t2); Produce Triple[9, 28, 29] Deve eseguire la conversione!

Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © The McGraw-Hill Companies srl Implementazione di equals() per Triple.java public boolean equals(Object v) if (v instanceof Triple) int a1 = getValue(1); int b1 = getValue(2); int c1 = getValue(3); Triple t = (Triple) v; int a2 = t.getValue(1); int b2 = t.getValue(2); int c2 = t.getValue(3); return (a1 == a2) && (b1 == b2) && (c1 == c2); } else return false; } Non può essere uguale a meno che sia un Triple Confronta gli attributi corrispondenti

Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © The McGraw-Hill Companies srl Triple.java - equals() Triple e = new Triple(4, 6, 10); Triple f = new Triple(4, 6, 11);, Triple g = new Triple(4, 6, 10); Triple h = new Triple(4, 5, 11); boolean flag1 = e.equals(f);

Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © The McGraw-Hill Companies srl Triple.java - equals() Triple e = new Triple(4, 6, 10); Triple f = new Triple(4, 6, 11);, Triple g = new Triple(4, 6, 10); Triple h = new Triple(4, 5, 11); boolean flag2 = e.equals(g);

Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © The McGraw-Hill Companies srl Triple.java - equals() Triple e = new Triple(4, 6, 10); Triple f = new Triple(4, 6, 11);, Triple g = new Triple(4, 6, 10); Triple h = new Triple(4, 5, 11); boolean flag3 = g.equals(h);

Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © The McGraw-Hill Companies srl Che cosa non va? class Scope { public static void f(int a) { int b = 1; // definizione locale System.out.println(a); // stampa 10 a = b; // aggiorna a System.out.println(a); // stampa 1 } public static void main(String[] args){ int i = 10; // definizione locale f(i); // invoca f() con i come parametro System.out.println(a); System.out.println(b); } Le variabili a e b non esistono nell'ambito del metodo main()

Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © The McGraw-Hill Companies srl Regole per blocchi e ambito Un blocco è un elenco di istruzioni nidificate all'interno di parentesi graffe Il corpo di un metodo è un blocco Un blocco può essere posto ovunque sia consentita un'istruzione Un blocco contenuto in un altro blocco è un blocco nidificato Un parametro formale deve essere definito all'inizio del corpo del metodo Una variabile locale può essere utilizzata solo in un'istruzione o nei blocchi nidificati che seguono la sua definizione Un nome di identificatore può essere riutilizzato finché i blocchi che contengono le dichiarazioni duplicate non sono nidificati l'uno nell'altro Il riutilizzo del nome all'interno di un metodo è consentito finché avviene in blocchi distinti

Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © The McGraw-Hill Companies srl Consentito class Scope2 { public static void main(String[] args){ int a = 10; f(a); System.out.println(a); } public static void f(int a) { System.out.println(a); a = 1; System.out.println(a); }

Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © The McGraw-Hill Companies srl Consentito, ma sconsigliato public void g() { { int j = 1; // definisce j System.out.println(j); // stampa 1 } { int j = 10; // definisce un j differente System.out.println(j); // stampa 10 } { char j = // definisce un j differente System.out.println(j); // stampa }

Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © The McGraw-Hill Companies srl Qual è l'output? for (int i = 0; i < 3; ++i) { int j = 0; ++j; System.out.println(j); } L'ambito della variabile j è il corpo del ciclo for j non è nell'ambito durante ++i j non è nell'ambito quando i < 3 viene valutato j viene ridefinito e reinizializzato ad ogni iterazione nel ciclo

Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © The McGraw-Hill Companies srl Overloading È stato visto spesso con gli operatori int i = ; double x = ; String s = "April " + "June"; Java supporta anche l'overloading dei metodi Diversi metodi possono avere lo stesso nome Utile quando occorre scrivere metodi che eseguono attività simili ma con elenchi di parametri diversi Il nome del metodo può subire l'overloading finché la sua firma è diversa dagli altri metodi della sua classe Differenza nei nomi, nei tipi, nel numero o nell'ordine dei parametri

Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © The McGraw-Hill Companies srl Consentito public static int min(int a, int b, int c) return Math.min(a, Math.min(b, c)); } public static int min(int a, int b, int c, int d) return Math.min(a, min(b, c, d)); }

Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © The McGraw-Hill Companies srl Consentito public static int power(int x, int n) int result = 1; for (int i = 1; i <= n; ++i) result *= x; } return result; } public static double power(double x, int n) double result = 1; for (int i = 1; i <= n; ++i) result *= x; } return result; }

Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © The McGraw-Hill Companies srl Qual è l'output? public static void f(int a, int b) { System.out.println(a + b); } public static void f(double a, double b) { System.out.println(a - b); } public static void main(String[] args){ int i = 19; double x = 54.0; f(i, x); }