12. 생성자
특이하게 이름이 클래스명과 같을 뿐인 메서드. 사용용도가 정해져있음. 변수중의 상수같은 놈. 인스턴스화를 진행할때만 호출할수있음
- ***인스턴스가 생성될 때*** 호출되는 인스턴스 초기화 메서드이다.
- 특징
: 메서드처럼 클래스 내에 선언된다.
: 리턴값이 없다. void를 써야하지만 모든 생성자가 리턴값이 없다. 이므로 void를 생략한다.
: 생성자의 이름은 클래스명과 동일해야 한다.
- 정의방법
: 기본생성자
클래스명(){
}
(컴파일러는 기본생성자만 만들어줌)
: 매개변수가 있는 생성자
클래스명(변수타입 병수명 ...){
}
(생성자도 메서드이기 때문에 오버로딩의 장점을 그대로 활용할 수 있다)
- this.
지역변수와 전역변수의 명칭이 동일할 때 전역변수를 가리키는 목적으로 사용
- this();
생성자 내에서 다른 생성자를 호출할 때 사용한다.
생성자의 첫줄에만 사용될 수 있다.
13. 변수의 초기화
- int a= 10; <<명시적 초기화
:변수의 선언과 동시에 초기화 한다.
- 생성자를 이용한 초기화
사실은 기본값정해져잇고 바꿔주는거지만 위에서 보면 생성과 동시에 초기화해주는것처럼 보인다.
- 초기화블럭을 이용한 초기화
: 클래스 초기화 블럭
: 인스턴스 초기화 블럭
굉장히많은 수식같은걸 거쳐야해서 생성자에 좀 넣기 그런것들...
package e_oop;
public class CarTest {
public static void main(String[] args) {
Car c = new Car();
//얘는 기본생성자 호출한거임
System.out.println(c.color);//기본값으로 출력됨
//얘를 바꿔주려면
c.color = "blue";
c.gearType="auto";
c.door=2;
//이렇게 세줄로 할거를 한줄만에 한거임
//즉 생성자는 인스턴스초기화용으로 사용할 수 있다.
Car c2 = new Car("red","auto",4);
//일단 new 하면 nullnull0으로 초기화되고, 그담에 저 괄호 red~가 초기화되서 바꿔주는거임
Car c3 = new Car("violet");
System.out.println(c3.color + c3.door + c3.gearType);
//생성자는 new할때만 부를수있음.
}
}
class Car{
//Car()를 위에서 객체생성했지만 여기에는 생성자가 없음
Car(String color, String gearType, int door){//메서드 오버로딩을 통해서 int형 받는 생성자를 만들어줌. 이제 생성자가 있음.. 없어서 만들어줬는데 있으니까 기본생성자Car(){}를 안만들어줌
//즉 기본생성자 외에 다른 생성자쓰고싶으면 기본생성자도 만들고 그외도 만들어야함
//받은거를 여기다 초기화
this.color = color;
this.gearType = gearType;
this.door = door;
//지역변수가 변수중 우선순위인데,
/*ar(String color, String gearType, int door){
color<<전역변수임을 아려줘야함 = color;<<지역변수
gearType = gearType;
door = door;
그래서 this.color < 이 인스턴스에 있는 color를 의미한다.지역변수를 쫒아가는게 아님
지역변수와 전역변수의 이름이 같을때 구분위해 this.을 쓴다. "이 잉ㄴ스턴스에 잇는!"이라는 뜻
}*/
}
//눈에 안보이지만 컴파일러가 이렇게 만들어 준 것
Car(){
//기본!!!옵션을 검정,스틱,2문짝으로 만들고싶으면
color = "black";
gearType = "stick";
door = 2; //이게 기본세팅이 된거임 기본생성자 안에 만들어줌으로써
}//이렇게 해야 화 안냄
//1단계 옵션은 색상만 바꿀 수 있다.
Car(String color){
this(); // this.와 다르다! this.은 전역과 지역변수이름같을때 구분용. this();는 생성자 내에서 다른 생성자 호출할때 사용
//this라고 써져있지만 Car라고 써져잇는것임
//this()는 해당 메서드 내의 첫줄에 와야함!!!
this.color = color;
}
String color;
String gearType;
int door;
}
'학원수업_basicJAVA > 5. Oop' 카테고리의 다른 글
201029 생성자 (0) | 2020.10.29 |
---|---|
201023 재귀호출, 매서드 오버로딩 (0) | 2020.10.23 |
201023 매서드의 종류, 클래스멤버와 인스턴스 멤버간 참조호출 (0) | 2020.10.23 |
InterVari (0) | 2020.10.23 |
201022 MyMathTest (0) | 2020.10.22 |