PersonTest-InstanceStatic
instance member field & method vs static member field & method 이해
public class Person {
String name; // instance member field
int age;
public Person() { // default constructor
this(“JAVA17”, 2017); // call Person(String n, int a);
}
public Person(String name, int age) { // constructor
this.name = name;
this.age = age;
}
public void setName(String name) { // instance method
this.name = name;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
public void print() {
System.out.println(“Person Name=” + name + ” Age=” + age);
}
@Override
public String toString() {
return “Person Name=” + name + ” Age=” + age;
}
}
public class Person2 {
static String name; // static member field
static int age; // static member field
public Person2() { // default constructor
this(“JAVA17”, 2017); // call Person2(String n, int a);
}
public Person2(String n, int a) { // constructor
name = n;
age = a;
}
public static void setName(String n) { // static method
name = n;
}
public static void setAge(int a) { // static method
age = a;
}
public static String getName() { // static method
return name;
}
public static int getAge() { // static method
return age;
}
public static void print() { // static method에서는 this 사용 불가
System.out.println(“Person Name=” + name + ” Age=” + age);
}
@Override
public String toString() {
return “Person Name=” + this.name + ” Age=” + this.age; // instance method에서는 static member variable 접근 가능
}
}
public class Person3 {
static String name; // static member field
static int age; // static member field
private Person3() { // default constructor
}
public static void setName(String n) { // static method
name = n;
}
public static void setAge(int a) { // static method
age = a;
}
public static String getName() { // static method
return name;
}
public static int getAge() { // static method
return age;
}
public static void print() { // static method에서는 this 사용 불가
System.out.println(“Person Name=” + name + ” Age=” + age);
}
}
public class PersonTest {
static Scanner input = new Scanner(System.in);
public static void main(String[] args) {
Person[] pArray = new Person[3];
// 만약 Person 객체를 하나만 생성한 후 for문에서 공유해 사용할 경우
// 마지막으로 입력된 데이터로 모든 데이터값이 치환됨
Person p = new Person();
for (int i = 0; i < 3; i++) {
System.out.print(“\n\nEnter Person name and age : “);
p.setName(input.next()); // 입력정보
p.setAge(input.nextInt()); // 입력정보
p.Print();
pArray[i] = p; //배열에 들어간 모든 원소는 동일한 p
}
System.out.println(“pArray : ” + Arrays.toString(pArray));
Person[] pArray2 = new Person[3];
// 아래와 같이 for문 안에 Person p = new Person()와같이
// 새로운 객체를 생성해야 각자 다르게 입력된 정보가 들어가게 됨
for (int i = 0; i < 3; i++) {
Person p2 = new Person();
System.out.print(“\n\nEnter Person name and age : “);
p2.setName(input.next()); // 입력정보
p2.setAge(input.nextInt()); // 입력정보
p2.Print();
pArray2[i] = p2; // p2는 새로운 Person객체이므로 배열에서 각각 다른 원소가 들어간다
}
System.out.println(“pArray2 : ” + Arrays.toString(pArray2));
Person2[] pArray3 = new Person2[3];
// 만약 Person2 객체의 name과 age는 static으로 사용할 경우
// static은 공유하는 것이므로, 마지막으로 입력된 데이터로 모든 데이터값이 치환됨
for (int i = 0; i < 3; i++) {
Person2 p3 = new Person2();
System.out.print(“\n\nEnter Person name and age : “);
p3.setName(input.next()); // Person2.setName(input.next())와 동일
p3.setAge(input.nextInt()); // Person2.setAge(input.nextInt())와 동일
pArray3[i] = p3; // p3 객체의 name과 age는 static이므로 모두 공유하기때문에, 배열의 모든 원소는 마지막에 들어간 정보로 셋팅
}
System.out.println(“pArray3 : ” + Arrays.toString(pArray3));
Person3[] pArray4 = new Person3[3]; // Person3 타입의 배열생성 OK
for (int i = 0; i < 3; i++) {
//Person3 p4 = new Person3(); // error Person3() has private access
System.out.print(“\n\nEnter Person name and age : “);
Person3.setName(input.next()); // p4.setName(input.next()) 사용을 못하게 함
Person3.setAge(input.nextInt()); // p4.setAge(input.nextInt()) 사용을 못하게 함
//pArray3[i] = p4; // error p4 객체를 생성할 수 없으므로 사용 불가능
}
Person3.print();