public class Person private String name private int
public class Person { private String name; private int number; public Person(String init. Name, int init. Number){ name = init. Name; number = init. Number; } public void set(String new. Name, int new. Number){ name = new. Name; number = new. Number; } public String to. String( ){ return (name + " " + number); } }
Παράδειγμα Person var. P = new Person(“Bob”, 1); var. P Διεύθυνση μνήμης Περιεχόμενο μνήμης 0000 0010 0001 0010 0011 “Bob” 0100 0101 0110 0111 1
Αναθέσεις μεταξύ αντικειμένων var. P 1 Διεύθυνση μνήμης Περιεχόμενο μνήμης 0000 0010 0001 0010 0011 Person var. P 1 = new Person(“Bob”, 1); Person var. P 2; var. P 2 = var. P 1; var. P 2. set(“Ann”, 2); System. out. println(var. P 1); “Bob” 0100 0101 0110 0111 1
Αναθέσεις μεταξύ αντικειμένων Διεύθυνση μνήμης Περιεχόμενο μνήμης var. P 1 0000 0010 var. P 2 0001 null 0010 0011 Person var. P 1 = new Person(“Bob”, 1); Person var. P 2; var. P 2 = var. P 1; var. P 2. set(“Ann”, 2); System. out. println(var. P 1); “Bob” 0100 0101 0110 0111 1
Αναθέσεις μεταξύ αντικειμένων Διεύθυνση μνήμης Περιεχόμενο μνήμης var. P 1 0000 0010 var. P 2 0001 0010 0011 Person var. P 1 = new Person(“Bob”, 1); Person var. P 2; var. P 2 = var. P 1; var. P 2. set(“Ann”, 2); System. out. println(var. P 1); “Bob” 0100 0101 0110 0111 1
Παράδειγμα public class Class. Parameter. Demo { public static void main(String[] args) { Person a. Person = new Person(“Mr. White", 1); System. out. println(a. Person); Person anotherperson = new Person(“Heisnberg", 2); System. out. println( "Now we call copier with a. Person as argument. "); another. Person. copier(a. Person); System. out. println(a. Person); } Τι } public class Person { private String name; private int number; public void copier(Person other) { other. name = name; other. number = number; } } θα τυπώσει? Heisenberg 2
Εξήγηση a. Person another. Person Διεύθυνση μνήμης Περιεχόμενο μνήμης 0010 0200 0011 0300 0100 Person a. Person = new Person(“Mr. White", 1); Person another. Person = new Person(“Heisenberg", 2); … 0200 “Mr. White” 1 0300 “Heisenberg” 2 0110 0111
Εξήγηση a. Person another. Person other another. Person. copier(a. Person); public class Person { private String name; private int number; public void copier(Person other) { other. name = name; other. number = number; } } other = a. Person Διεύθυνση μνήμης Περιεχόμενο μνήμης 0010 0200 0011 0300 0100 0200 … 0200 “Mr. White” 1 0300 “Heisenberg” 2 0110 0111
Εξήγηση a. Person another. Person other another. Person. copier(a. Person); public class Person { private String name; private int number; public void copier(Person other) { other. name = name; other. number = number; } } Διεύθυνση μνήμης Περιεχόμενο μνήμης 0010 0200 0011 0300 0100 0200 … 0200 “Heisenberg” 2 0300 “Heisenberg” 2 0110 0111
Παράδειγμα public void method 1(){ int x = 10; method 2(x); } method 1 x 10
Παράδειγμα public void method 1(){ int x = 10; method 2(x); } public void method 2(int b){ boolean x = true; method 3(); } method 2 b 10 x true method 1 x 10
Παράδειγμα method 3 public void method 1(){ int x = 10; method 2(x); } public void method 2(int b){ boolean x = true; method 3(); } public void method 3() {…} method 2 b 10 x true method 1 x 10
Παράδειγμα public void method 1(){ int x = 10; method 2(x); method 3(); } method 1 x 10
Παράδειγμα public void method 1(){ int x = 10; method 2(x); method 3() } public void method 2(int b){ boolean x = (b==10); . . . } method 2 b 10 x true method 1 x 10
Παράδειγμα public void method 1(){ int x = 10; method 2(x); } method 3 public void method 3() {…} method 1 x 10
Παράδειγμα public void method 3() { Person x = new Person(“bob”, 1) } method 3 x 0 x 0010 method 2 b 10 x true method 1 x 10 name “bob” number 1
Παράδειγμα public class Class. Parameter. Demo { public static void main(String[] args) { Person p 1 = new Person(“Bob", 1); Person p 2 = new Person(“Ann", 2); p 2. copier(p 1); System. out. println(p 1); } }
Εξέλιξη του προγράμματος name Bob number 1 name Ann number 2 main p 1 0 x 0010 p 2 0 x 0020
Εξέλιξη του προγράμματος p 2. copier(p 1); public void copier( Person other) { other. name = this. name; other. number = this. number; } copier other 0 x 0010 this 0 x 0020 main p 1 0 x 0010 p 2 0 x 0020 name Bob number 1 name Ann number 2 Η παράμετρος this περνιέται αυτόματα σε κάθε κλήση μεθόδου του αντικειμένου
Εξέλιξη του προγράμματος p 2. copier(p 1); public void copier( Person other) { other. name = this. name; other. number = this. number; } copier other 0 x 0010 this 0 x 0020 main p 1 0 x 0010 p 2 0 x 0020 name Ann number 2 Η παράμετρος this περνιέται αυτόματα σε κάθε κλήση μεθόδου του αντικειμένου
Εξέλιξη του προγράμματος H main τυπώνει “Ann 2” main p 1 0 x 0010 p 2 0 x 0020 name Ann number 2
Μια άλλη υλοποίηση της copier public void copier( Person other) { other = this; } public class Class. Parameter. Demo { public static void main(String[] args) { Person p 1 = new Person(“Bob", 1); Person p 2 = new Person(“Ann", 2); p 2. copier(p 1); System. out. println(p 1); } Τι } θα τυπώσει?
Εξέλιξη του προγράμματος p 2. copier(p 1); public void copier( Person other) { other = this; } copier other 0 x 0010 this 0 x 0020 main p 1 0 x 0010 p 2 0 x 0020 name Bob number 1 name Ann number 2
Εξέλιξη του προγράμματος p 2. copier(p 1); public void copier( Person other) { other = this; } copier other 0 x 0020 this 0 x 0020 main p 1 0 x 0010 p 2 0 x 0020 name Bob number 1 name Ann number 2
Εξέλιξη του προγράμματος H main τυπώνει “Bob 1” main p 1 0 x 0010 p 2 0 x 0020 name Bob number 1 name Ann number 2
Μια ακόμη υλοποίηση της copier public void copier( Person other) { other = new Person(this. name, this. number); } public class Class. Parameter. Demo { public static void main(String[] args) { Person p 1 = new Person(“Bob", 1); Person p 2 = new Person(“Ann", 2); p 2. copier(p 1); System. out. println(p 1); } Τι } θα τυπώσει?
Εξέλιξη του προγράμματος p 2. copier(p 1); public void copier( Person other) { other = new Person(this. name, this. number); } copier other 0 x 0010 this 0 x 0020 main p 1 0 x 0010 p 2 0 x 0020 name Bob number 1 name Ann number 2
Εξέλιξη του προγράμματος p 2. copier(p 1); public void copier( Person other) { other = new Person(this. name, this. number); } copier other 0 x 0030 this 0 x 0020 main p 1 0 x 0010 p 2 0 x 0020 name Ann number 2 name Bob number 1 name Ann number 2
Εξέλιξη του προγράμματος H main τυπώνει “Bob 1” main p 1 0 x 0010 p 2 0 x 0020 name Bob number 1 name Ann number 2
Άλλο ένα παράδειγμα public class String. Parameter. Demo { public static void main(String[] args) { String s = “Bob“; change. String(s); System. out. println(s); } public static void change. String(String param) { System. out. println(param); param = param + “ + Ann”; System. out. println(param); } } Τι θα τυπώσει?
Εξέλιξη του προγράμματος public static void change. String(Strin { System. out. println(param); param = param + “ + Ann”; System. out. println(param); } copier param 0 x 0010 main s 0 x 0010 “Bob”
Εξέλιξη του προγράμματος public static void change. String(Strin { System. out. println(param); param = param + “ + Ann”; System. out. println(param); } Τα Strings είναι μη μεταλλάξιμα αντικείμενα (immutable objects) copier param 0 x 0020 “Bob + Ann” 0 x 0010 “Bob” main s H αλλαγή σε ένα String έχει ως αποτέλεσμα τη δημιουργία ενός καινούριου αντικειμένου
- Slides: 56