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
Παράδειγμα 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 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
Αναθέσεις μεταξύ αντικειμένων Person var 1 = new Person(“Bob”, 1); Person var 2; var 2 = var 1; var 2. set(“Ann”, 2); System. out. println(var 1); var 1 0 x 0010 name Bob number 1
Αναθέσεις μεταξύ αντικειμένων Person var 1 = new Person(“Bob”, 1); Person var 2; var 2 = var 1; var 2. set(“Ann”, 2); System. out. println(var 1); var 1 0 x 0010 var 2 null name Bob number 1
Αναθέσεις μεταξύ αντικειμένων Person var 1 = new Person(“Bob”, 1); Person var 2; var 2 = var 1; var 2. set(“Ann”, 2); System. out. println(var 1); var 1 0 x 0010 var 2 0 x 0010 name Bob number 1
Αναθέσεις μεταξύ αντικειμένων Person var 1 = new Person(“Bob”, 1); Person var 2; var 2 = var 1; var 2. set(“Ann”, 2); System. out. println(var 1); var 1 0 x 0010 var 2 0 x 0010 name Ann number 2
Αναθέσεις μεταξύ αντικειμένων Person var 1 = new Person(“Bob”, 1); Person var 2; var 2 = var 1; var 2. set(“Ann”, 2); System. out. println(var 1); var 1 0 x 0010 var 2 0 x 0010 name Ann number 2 Τυπώνει “Ann 2”
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); } public void copier( Person other) { other. name = this. name; other. number = 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); } } Τι θα τυπώσει?
Εξέλιξη του προγράμματος 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: 38