본문 바로가기

JAVA/DAY 11 _ 23.08.31

Constructor

public class P2_constructor {

	public static void main(String[] args) {
		
		
		System.out.println("테스트 시작");
		
		
		// 1) 주석때면
//		Student s1 = new Student();		// Class Student에 name, age, score가 있었지
// 		s1이라는 지역변수를 stack에 생성해서 new Student라는 배열 같은걸
//		heap메모리로 만드는거야. (주소값 설정이라 생각하자)
//		heap메모리에있는 name에 접근해서 트레라는 이름을 저장하는거지./		
// 		s1.name = "트레";			
//		s1.age = 20;
//		s1.score = 99;
//		
//		
//		Student s2 = new Student();
//		
//		// 인스턴스(Student s1 = new Student();	)가 생성되지 않으면 맨밑에 '생성자 하이'없이 끝난다
//		// 인스턴스를 두번 적어주니까 '생성자 하이'가 두번 실행, 끝난다.
//		// (--> 시작, class student호출, 호출 한번 더, 끝)
//		// 생성자를 호출하는 순간 그 안의 내용이 모두 순서대로 시행됨
//
//		System.out.println("테스트 끝");
		
		
		
		
		// 2, 3) 주석떼면
		// Student s1 = new Student("한조");		// 밑에서 Student(String a)만 넣으면 하나만 해도되는데
        
       		 // (String a, int b, int c) 이렇게 선언했으니까 저렇게 넣어야 사용할 수 있다구
		Student s1 = new Student("한조", 50, 80);	
		Student s2 = new Student("트레", 20, 100);
		Student s3 = new Student("메르시", 50);	
      		  // --> 성적을 아에 안넣고싶어? 0도 아니야. --> 2-2처럼 오버로딩 하면됨
		
		
		System.out.println(s1.name);		// 한조
		System.out.println(s1.age);		// 50
		System.out.println(s2.name);		// 트레
		System.out.println(s2.score);		// 100
		

		System.out.println("테스트 끝");


	}

}
class Student{
	
	// 1. 속성(필드) : 인스턴스 변수 정의
	String name;
	int age;
	int score;
	
	int test;
	
	
	
	// 2. 생성자
	// 문법 : 클래스명 (매개변수 N..)(...)
	// 선언만으로는 아무런 일도 하지 않는다
	// 인스턴스가 생성되면 실행됨
	// 활용 : 일반적으로 값을 초기화하는 용도로 사용
	
	
	// 1)
//		Student(){	
// 		class명을 넣으면 main이랑 같은 초록색이지? 이건 순서대로 출력된다. 즉, syso()가 된다는거임
//		System.out.println("생성자 하이");
//		System.out.println("생성자를 자동으로 호출한다구");
//	
//	}
	
	
	
//	// 2)
//		Student(String a, int b, int c){	
//		
//		// 생성자() 괄호에 매개변수를 쓰면, 맨위에서 new Student();는 사용할 수 없어
//		// new Student() 안의 괄호에 String이면 문자열, int면 숫자를 넣으면 되겠지
//		// String a, int b, int c 이렇게 넣었다는건
//		--> 이 API를 쓰려면 순서대로 String.int.int를 넣지않으면 이걸 못쓴다구
//		
//		name = a;			// 인스턴스 name은 자기자신에게 a를 부여한다.
//		age = b;
//		score = c;	
//	}
	
	
	
	// 3) String 변수의 이름을 인스턴수 변수의 명과 똑같이 만들고싶어?
	Student(String name, int age, int score){	
		
		// name = name;		// 이렇게하면 2)에서 null이나온다...	
		this.name = name;	// this : 문법키워드로 참조주소임 (생성자일때 사용O, 메서드에서는 사용 X)
		this.age = age;
		this.score = score;				
		
		// new Student("한조", 50, 80); 가 선언되면 이것의 주소값은 0xCC11
		// this.name의 주소값이 0xCC11로 부여된다!! (new ... 선언이 없으면 그냥 의미없는 것)
		
		// new Student("트레", 20, 100); 가 선언되면 이것의 주소값은 0xFF11
		// this.age의 주소값이 0xFF11로 부여된다!!
		
		test = 10;	
        // 매개변수에 인스턴스변수명이 없으면 this.이 없어도 된다. (원래는 this. 붙이는게 문법)
		
	}
	
	
	
	// 2-2. 생성자 오버로딩 : 생성자를 2개이상 정의할 수 있따
	// 	만약에 위에거처럼 String, int, int 이렇게 만들면 오버로딩이 안된다. (개수가 중요한게 아님-> String, int, String은돼)
	Student(String name, int age){		// String name, int score도 안되겠지?
		this.name = name;
		this.age = age;
	}
	
	
	Student(){}		// 이렇게만 냅두면 new Student(); 이렇게 냅둬도 된다는거지뭐

'JAVA > DAY 11 _ 23.08.31' 카테고리의 다른 글

Setter & Getter - self study  (0) 2023.09.10
Class - self study  (0) 2023.09.10
Math.  (0) 2023.09.10
Method  (0) 2023.09.10
Instance  (0) 2023.09.10