Java
[Java] 생성자(Constructor) / this의 의미
H'
2021. 7. 17. 22:53
> p.291 생성자(Constructor) **암기
객체 생성 + 초기화 = 생성자 (constructor) == 생성자함수
1. 생성자명은 클래스명과 같아야 한다.
2. 생성자의 기능 : 객체의 생성 + 필드 초기화
3. 선언 형식
[접근지정자] [기타제어자] 생성자명 ([매개변수..]) { }
접근지정자는 4가지 모두 사용
3-1. 리턴자료형 붙이지 않는다. 리턴자료형 없는 함수의 일종
4. 생성자 호출 시기
[객체 생성할 때 (new 클래스명()) ] 자동으로 호출된다.
5. 오버로딩이 가능하다.
6. 매개변수(인자)가 없는 생성자를 디폴트 생성자라고 한다.
7. 상속되지 않는다.
생성자 만들때도 자동완성으로 alt + shift + s
package days16;
public class Ex09 {
public static void main(String[] args) {
// > MyPoint Default Constructor..
new MyPoint();
// > MyPoint 2 Constructor..
// > x=1, y=2
MyPoint p1 = new MyPoint(1,2);
p1.dispPoint();
// The constructor MyPoint(int) is undefined
// > MyPoint 1 Constructor..
// > x=100, y=100
MyPoint p2 = new MyPoint(100);
p2.dispPoint();
/*
MyPoint p1 = new MyPoint();
p1.x = 1;
p1.y = 2;
MyPoint p2 = new MyPoint();
p2.x = 3;
p2.y = 4;
MyPoint p3 = new MyPoint();
p3.x = 5;
p3.y = 6;
p1.dispPoint();
p2.dispPoint();
p3.dispPoint();
*/
}
}
package days16;
import java.util.ArrayList;
public class Ex12 {
public static void main(String[] args) {
// [this 키워드]
/*
* 1. 정의 ? 객체의 주소값을 갖는 참조변수
* (클래스 자기 자신의 주소값을 갖는 참조변수)
* 2. 참조변수 ?
* int [] m; //배열명도 참조변수
* Car myCar; //객체명도 참조변수
* 둘다 참조변수지만 m말고 myCar랑 같다는 것..
* 3. this가 사용되는 3가지 용도
* ㄱ. 클래스(객체)의 멤버(필드,메서드)를 가리킬 때의 this (명확하게 하기 위해)
* this.필드
* this.메서드()
* ㄴ. 생성자에서 또 다른 생성자를 호출할 때의 this
* ㄷ. 홀로 사용될 때의 this : 인자(argument), 리턴값
*
*/
Person p1 = new Person("kenik", 20, "경기", "010-1234-5678");
// > name:null, age:20
// Person p1 = new Person("kenik", 20);
p1.dispPerson();
Bus bus = new Bus(p1);
// 혹시 가변인자를 생성자에 사용할 수 있나 ?
// 아니요 생성자는 필드를 초기화하는 목적. 가변인자 사용할 필요?일?이없음
// Object...args
}//main
}//class
class Bus{
Person [] p = new Person[10];
Bus(){
}
Bus(Person person){
p[0] = person;
}
}
class Person{
//fields
String name;
int age;
String addr;
String tel;
/*
* Person(Object...args){
*
* }
*/
//constructor
Person(){
System.out.println("> Default Constructor");
}
Person(String name, int age){
this(); // 위에 생성자 Person() 호출
// The assignment to variable name has no effect
// name = name;
// this. -> 클래스의 멤버변수를 나타냄. 명시해야 제대로 할당됨
this.name = name;
this.age = age;
System.out.println("> 20 Constructor...");
}
public Person(String name, int age, String addr, String tel) {
this(name, age); //위에 생성자 Person(n,a) 호출
this.name = name;
this.age = age;
this.addr = addr;
this.tel = tel;
System.out.println("> 50 Constructor...");
}
//method
void dispPerson() {
System.out.printf("> name:%s, age:%d\n", this.name, this.age);
}
}