Introdução à Linguagem Java 1 Introdução à linguagem Java, Nuno Flores, FEUP, MIEIC, CAL, Fevereiro de 2010 2 Introdução à linguagem Java, Nuno Flores, FEUP, MIEIC, CAL, Fevereiro de 2010 Nuno Flores, FEUP, Fevereiro 2009 Introdução à Linguagem Java 3 Introdução à linguagem Java, Nuno Flores, FEUP, MIEIC, CAL, Fevereiro de 2010 4 Introdução à linguagem Java, Nuno Flores, FEUP, MIEIC, CAL, Fevereiro de 2010 Nuno Flores, FEUP, Fevereiro 2009 Introdução à Linguagem Java 5 Introdução à linguagem Java, Nuno Flores, FEUP, MIEIC, CAL, Fevereiro de 2010 6 inner class (non static nested class) Como SaldoInsuficiente não é static, cada instância está ligada a uma instância de Conta Introdução à linguagem Java, Nuno Flores, FEUP, MIEIC, CAL, Fevereiro de 2010 Nuno Flores, FEUP, Fevereiro 2009 Introdução à Linguagem Java 7 Saldo insuficiente: 0.0 < 1.0 Conta$SaldoInsuficiente: Saldo insuficiente: 0.0 < 1.0 at Conta.levantar(Conta.java:7) at TestConta.main(TestConta.java:6) finalmente... Introdução à linguagem Java, Nuno Flores, FEUP, MIEIC, CAL, Fevereiro de 2010 8 Introdução à linguagem Java, Nuno Flores, FEUP, MIEIC, CAL, Fevereiro de 2010 Nuno Flores, FEUP, Fevereiro 2009 Introdução à Linguagem Java 9 Ver mais métodos na Java API Introdução à linguagem Java, Nuno Flores, FEUP, MIEIC, CAL, Fevereiro de 2010 10 stack x boxing unboxing Introdução à linguagem Java, Nuno Flores, FEUP, MIEIC, CAL, Fevereiro de 2010 Nuno Flores, FEUP, Fevereiro 2009 y z heap Introdução à Linguagem Java 11 Introdução à linguagem Java, Nuno Flores, FEUP, MIEIC, CAL, Fevereiro de 2010 12 Introdução à linguagem Java, Nuno Flores, FEUP, MIEIC, CAL, Fevereiro de 2010 Nuno Flores, FEUP, Fevereiro 2009 Introdução à Linguagem Java 13 public class Pair <T> { Parâmetro formal private final T first, second; public Pair(T first, T second) { this.first = first; this.second = second; } public T getFirst() { return first; } public T getSecond() { return second; } public String toString() { return "(" + first + ", " + second + ")"; } } Introdução à linguagem Java, Nuno Flores, FEUP, MIEIC, CAL, Fevereiro de 2010 14 public class TestPair { Auto-boxing public static void main(String[] args) { Pair<Integer> p1 = new Pair<Integer>(1, 10); Pair<String> p2=new Pair<String>("Ana","Tó"); System.out.println(p1); System.out.println(p2); int n = p1.getFirst(); String s = p2.getFirst(); // ... } } (1, 10) (Ana, Tó) Introdução à linguagem Java, Nuno Flores, FEUP, MIEIC, CAL, Fevereiro de 2010 Nuno Flores, FEUP, Fevereiro 2009 Parâmetro actual Usa toString Auto-unboxing Introdução à Linguagem Java 15 public class Pair { private final Object first, second; public Pair(Object first, Object second) { this.first = first; this.second = second; } public Object getFirst() { return first; } public Object getSecond() { return second; } public String toString() { return "(" + first + ", " + second + ")"; } } Introdução à linguagem Java, Nuno Flores, FEUP, MIEIC, CAL, Fevereiro de 2010 16 public class TestPair { public static void main(String[] args) { Pair p1 = new Pair(1, 10); Pair p2 = new Pair("Ana", "Tó"); System.out.println(p1); System.out.println(p2); int n = (Integer)p1.getFirst(); String s = (String)p2.getFirst(); // ... } } Introdução à linguagem Java, Nuno Flores, FEUP, MIEIC, CAL, Fevereiro de 2010 Nuno Flores, FEUP, Fevereiro 2009 Introdução à Linguagem Java 17 Parâmetro formal public class TestGenericMethods { public static <T> int countNull(T[] a) { int n = 0; for (T x : a) if (x == null) T determinado com base n++; nos tipos dos argumentos return n; } public static void main(String[] args) { Integer[] a1 = {null, 1, 2}; String[] a2 = {"Ana", "Maria", null}; System.out.println(countNull(a1)); System.out.println(countNull(a2)); 1 } 1 } Introdução à linguagem Java, Nuno Flores, FEUP, MIEIC, CAL, Fevereiro de 2010 18 O tipo T tem de implementar a interface Comparable<T> (interface do Java que contém apenas o método int compareTo(T o)) public static <T extends Comparable<T>> void insertionSort(T[] a) { for(int i = 1; i < a.length; i++) { T x = a[i]; int j = i; for( ; j > 0 && a[j-1].compareTo(x) > 0; j--) a[j] = a[j-1]; a[j] = x; } Em Java não há apontadores para função, tem de se } passar um objecto que implementa o método pretendido! Introdução à linguagem Java, Nuno Flores, FEUP, MIEIC, CAL, Fevereiro de 2010 Nuno Flores, FEUP, Fevereiro 2009 Introdução à Linguagem Java 19 public class Person implements Comparable<Person> { private String name; public Person(String name) { this.name=name; } public int compareTo(Person p) { return this.name.compareTo(p.name); } public String toString() { return name; } public static void main(String args[]) { Person[] a={new Person("Tó"),new Person("Ana")}; ArrayUtils.insertionSort(a); System.out.println(java.util.Arrays.toString(a)); } [Ana, Tó] } Introdução à linguagem Java, Nuno Flores, FEUP, MIEIC, CAL, Fevereiro de 2010 20 Introdução à linguagem Java, Nuno Flores, FEUP, MIEIC, CAL, Fevereiro de 2010 Nuno Flores, FEUP, Fevereiro 2009 Introdução à Linguagem Java 21 Introdução à linguagem Java, Nuno Flores, FEUP, MIEIC, CAL, Fevereiro de 2010 Nuno Flores, FEUP, Fevereiro 2009