VariableInit

ZiSoOm·2021년 5월 30일
0

기초자바

목록 보기
15/15

🎨생성자

  • 객체 생성할 때 마지막에 ()붙인게 생성자 메서드임
  • 클래스와 같은 이름의 메서드
  • 인스턴스 변수를 초기화하기 위해 사용함
  • 클래스에 생성자는 반드시 하나 이상 존재해야 함
  • 직접 선언해주지 않으면 컴파일러가 기본 생성자를 만들어줌
  • 생성자는 리턴타입이 없음

🎨생성자 연습 (1)

package oop;

public class VariableInit {

	//명시적 초기화
	int var = 10;
	static int classVar = 20;
	
	//초기화 블럭(아무것도 없이 블럭열면 초기화 블럭)
	{
		var = 30;
	}
	
	static {
		classVar = 40;
	}
	
	//()가 붙으면 무조건 메서드임
	//안에 로직을 넣고 싶을 때는 초기화 블럭이나 생성자를 사용함

	
	//생성자 사용 이유
	//초기화에 여러줄의 코드가 필요할 때
	//초기화에 파라미터가 필요할 때
	
	public static void main(String[] args) {
		Init i = new Init(); //생성자를 만들지 않아서 컴파일러가 스스로 생성자를 만들어줌
		i.a = 10;
		i.b = 20;
		i.c = 30;
		
		Init i2 = new Init(); // 2)컴파일 에러 해결 방법 : 아래 Init(){} 생성자를 만들어줌
		i2.a = 40;
		i2.b = 50;
		i2.c = 60;
		
		System.out.println(i2.a); // 40
		//i2.a = 40; 을 해주지 않으면 i2.a = 10이 됨
		
		Init i3 = new Init(70, 80, 90); 
		// 1)파라미터가 있는 생성자를 만들었기 때문에 위의 파라미터가 없는 생성자는 컴파일 에러 발생
		
	}
}

class Init{
	
	//인스턴스 변수
	int a;
	int b;
	int c;
	
	Init(int a, int b, int c) {
		//지역 변수
		this.a = a;
		this.b = b;
		this.c = c; 
		
		//this : 인스턴스 변수와 지역변수의 이름이 같을 때 둘을 구분하기 위해 사용함
	}
	
	//오버로딩 : 같은 이름의 메서드를 여러개 정의하는 것 (ex : Init 메서드 두개 만듦)
	//파라미터의 갯수가 다르거나 타입이 다르면 즉, 차이가 있으면 둘을 구분할 수 있음
	Init() {
		//a = 10;
		//b = 20;
		//c = 30;
		this(10, 20, 30); //생성자의 첫줄에서만 사용할 수 있음
		//this() : 생성자에서 다른 생성자를 호출할 때 사용함
	}
}

🎨생성자 연습 (2)

package oop;

public class ClassMaker2 {
	
	//인스턴스 변수 하나를 선언하고 명시적으로 초기화 해주세요.
	//인스턴스 변수 : static이 붙지 않은 명칭
	int a = 10;
	
	//위에서 선언한 인스턴스 변수를 초기화 블럭을 사용해 초기화 해주세요.
	{
		a = 20;
	}
	
	//위에서 선언한 인스턴스 변수를 생성자의 파라미터를 사용해 초기화 해주세요.
	ClassMaker2(int a) {
		this.a = a;
	}
	
	//위에서 선언한 인스턴스 변수를 생성자를 하나 더 만들어서 초기화 해주세요.
	ClassMaker2() {
		this(10);
	}
	//초기화 순서 : 명시적 초기화 -> 초기화 블럭 -> 생성자
	
}

0개의 댓글

관련 채용 정보