1. 연관있는 것 끼리 묶어 클래스를 설계
2. class에 변수(필드)와 기능(method)를 설계함
3. heap에 new키워드를 사용해 객체를 생성해야 비로소 만들어짐
4 heap영역에 있는 것은 이름을 붙일 수 없음 참조변수를 사용해 만든 객체를 제어함 (객체를 만들면 기본적으로 0에 해당하는 값으로 자동 초기화 된다)
변수 이름 구분
멤버변수 : class 안에 변수 / 0에 해당하는 값
매개변수 : 값을 전달 해 주는 파라미터
지역변수 : 함수 안에 변수 / 쓰레기값
생성자 생성 규칙
1. 메소드의 이름은 클래스의 이름과 같다
2. 리턴 타입을 명시하지 않는다
public class Main {
public static void main(String[] args) {
//객체 생성
First f = new First();// ()가 생성자를 부르고 있는것
//생성자 메소드에 값을 파라미터로 전달해보기
First f3 = new First(10);
}
}
public class First {
//생성자 [Constructor]
First(){
System.out.println("First 생성자!");
}
//생성자 오버로딩
public First(int num) {
System.out.println("num = "+ num);
}
}
객체 생성하면 자동으로 호출되는 걸 볼 수 있다
생성자 메소드는 객체를 생성할 때 마다 발동
public class Main {
public static void main(String[] args) {
//1. 초기값 설정해보기
Person p = new Person();
p.show();
//2. 생성하며 초기화
Person p3 = new Person("kim",25);
p3.show();
}
}
public class Person {
//멤버변수는 private 접근제한 권장
private String name; //기본값 : null
private int age; //기본값 : 0
//멤버함수는 public 접근제한자 권장
public void show() {
System.out.println("이름 : "+ name);
System.out.println("나이 : "+ age);
System.out.println();
}
public void set(String name, int age) {
this.name = name;
this.age = age;
}
public Person() {
System.out.println("Person 객체 생성~");
//1. 멤버변수에 전달할 값이 없을때의 초기값 설정
name = "익명";
age = 0;
}
//2. 생성자 오버로딩
public Person(String name, int age) {
this.name = name;
this.age = age;
}
//오버로딩은 개수제한이 없기 때문에 몇개라도 추가로 만둘 수 있다
public Person(String name) {
this.name = name;
age = 0;
}
public Person(int age) {
this.name = "익명";
this.age = age;
}
}
자신의 주솟값을 가르키는 키워드 this!
public class Second {
//멤버변수(Field)
private int a;
private int b;
//멤버변수를 초기화하는 생성자메소드
public Second(int a, int b) {
this.a = a;
this.b = b;
}
}
public class Second {
//멤버변수(Field)
private int a;
private int b;
//멤버변수를 초기화하는 생성자메소드
public Second(int a, int b) {
this.a = a;
this.b = b;
System.out.println("세컨드 호출");
}
public Second() {
this(0,0);
}
public Second(int a) {
this(a,0);
System.out.println("");
}
}
this()를 사용함으로써 다른 생성자에서 위임함을 볼 수 있다
public class Main {
public static void main(String[] args) {
//초기화 4단계
//1.
InitialTest obj = new InitialTest();
System.out.println(obj.a);
//2.
System.out.println(obj.b);
//3.
System.out.println(obj.c);
//4.
System.out.println(obj.d);
}
}
public class InitialTest {
//1. 기본값 초기화 - 0에 해당하는 값
int a;
//2. 명시적 초기화
int b = 10;
//3. 초기화 블럭
int c=0;
{//인스턴스 초기화 블럭
c = 20;
c++;
if(c > 19) c = 500;
}
//4. 생성자 초기화
int d;
public InitialTest() {
d=50;
}
}