
같은 클래스 내 메서드와 멤버변수는 밀접한 관련
-> 인스턴스 메서드는 보통 인스턴스 변수와 관련된 작업 수행
메서드 중 인스턴스(인스턴스 변수 + 인스턴스 변수)와 관계가 없는 메서드
-> 보통 클래스 메서드(static메서드)로 정의
멤버변수 == 인스턴스 변수 + static 변수 통칭
클래스의 멤버변수 중 모든 인스턴스에 공통된 값을 유지해야 하는 것이 있는지 살펴보고, static을 붙여 준다.
작성한 메서드 중에서 인스턴스 변수나 인스턴스 메서드를 사용하지 않는 메서드에 static을 붙여준다
같은 클래스에 속한 멤버들은 인스턴스 생성 하지 않고도 호출 가능!
인스턴스 멤버가 존재하는 시점에 클래스 멤버는 항상 존재하지만, 클래스 멤버가
존재하는 시점에 인스턴스 멤버가 존재하지 않을 수 있다!!!
기본 생성자가 컴파일러에 의해서 추가 되는 경우는 클래스에 정의된 생성자가 하나도 없을 때 뿐이다
-> 매개변수 있는 생성자 및 매개변수가 없는 생성자를 둘다 이용하고자 한다면 기본 생성자를 꼭 코딩 해주자~
생성자에서 다른 생성자 호출 하는 경우 사용
생성자 이름으로 클래스 이름 대신 this를 사용
한 생성자에서 다른 생성자를 호출할 때는 반드시 첫줄에서만 호출이 가능!!
참조 변수로 객체 자신을 가리킴, 인스턴스 주소가 저장되어 있다.
static 멤버 사용 불가!
Car(String color)
{
door = 5;
Car(color, "auto", 4);
}
// 이 경우 다른 생성자를 두번째 줄에서 호출하였고, this를 사용하지 않아 error
class Car2{
String color;
String gearType;
int door;
Car2(){
// 인자 값이 없을 때 기본 옵션
this("white", "auto", 4);
/* color = "white"
gearType = "auto";
door = 4;
*/
}
Car2(String color)
{
this(color, "auto", 4);
}
Car2(String color, String gearType, int door)
{
this.color = color;
this.gearType = gearType;
this.door = door
}
}
Car (String color, String gearType, int door)
{// this.color -> iv, color -> lv
this.color = color;
this.gearType = gearType;
this.door = door;
}
멤버변수(클래스 변수와 인스턴스 변수)와 배열의 초기화는 기본값이 들어가지만
지역변수의 초기화는 필수!
클래스 변수 초기화 이후 인스턴스 변수 초기화
자동 초기화 -> 명시적 초기화 -> 초기화 블럭, 생성자(복잡)
명시적 초기화 : 말 그대로 선언과 동시에 초기화(기본적)
class Car{
int door = 4;
Engine e = new Engine();
...
}
복잡한 초기화 작업이 필요할 때는 초기화 블럭 또는 생성자 사용
class data
{
static {
// 클래스 초기화 블럭
// 실행 되면서 data가 메모리에 로딩될 때 클래스 초기화 블럭이 가장 먼저 수행
System.out.println("static { }");
}
{
// 인스턴스 초기화 블럭
System.out.println("{ }");
}
public data() {
System.out.println("생성자 ");
}
public static void main(String[] args)
{
System.out.println("EX6_14 bt = new Ex6_14();");
data bt = new data();
System.out.println("EX6_14 bt2 = new Ex6_14();");
data bt2 = new data();
}
}
static { }
EX6_14 bt = new Ex6_14();
{ }
생성자
EX6_14 bt2 = new Ex6_14();
{ }
생성자
class data
{
static int[] arr = new int[10];
static
{
for (int i = 0; i < arr.length; i++) {
arr[i] = (int)(Math.random() * 10)+1;
}
}
public static void main(String[] args)
{
// 클래스 초기화 블럭으로 인해 main메서드 실행 전부터 10개의 랜덤 숫자가
// 들어 있는 배열이 존재
for (int i = 0; i<arr.length; i++) {
System.out.println("arr["+i+ "]:" + arr[i]);
}
}
}
arr[0]:5
arr[1]:4
arr[2]:9
arr[3]:6
arr[4]:6
arr[5]:8
arr[6]:7
arr[7]:8
arr[8]:2
arr[9]:4