클래스명 변수명; //클래스의 객체를 참조하기 위한 참조변수 선언
변수명 = new 클래스명(); //클래스의 객체 생성 후, 객체의 주소를 참조변수 저장
Tv t;
t = new Tv();
Tv [] tvArr = new Tv[3]; //길이가 3인 Tv 타입의 참조변수 배열
tvArr[0] = new Tv();
tvArr[1] = new Tv();
tvArr[2] = new Tv();
-> Tv[] tvArr = { new Tv(), new Tv(), new Tv() };
class Time{
int hour;
int min;
int scd;
}
class Variable
{
int iv; //인스턴스 변수
static int cv; // 클래스 변수(static 변수)
void method()
{
int lv = 0; //지역변수
}
}
인스턴스 변수는 인스턴스가 생성될 때 마다 생성되므로 각각 다른 값을 유지할 수 있지만, 클래스 변수는 모든 인스턴스가 하나의 저장공간을 공유하므로, 항상 공통된 값을 갖는다.
메서드의 선언과 구현
반환타입 메서드이름 (타입 변수명, 타입 변수명, ...) //선언부
{ //구현부
//메서드 호출시 수행 코드 //구현부
} //구현부
int add(int a, int b) //선언부
{
int result = a + b; //result는 지역변수
retunr result; //호출한 메서드로 결과를 반환
}
반환타입이 없는 경우 선언부의 반환타입에 void를 적어야한다.
반환타입이 void가 아닐 경우 'return 반환값'이 필수다.
return값은 반환타입과 일치하거나 적어도 자동 형변환이 가능해야만 하다.
메서드 입력변수는 상관X 반환값은 최대 하나만 허용
메서드의 호출
메서드이름(값1,값2,....);
print99danAll(); //void print99danAll() 호출
int result = add(3,5); //int add(int x, int y) 호출 후 결과 result 저장
메서드 매개변수를 기본형으로 선언시 단순히 저장된 값만 얻는다.
참조형으로 선언하면 값이 저장된 곳의 주소를 알기에 변경도 가능하다.
인스턴스 멤버가 존재하는 시점에 클래스 멤버는 항상 존재하지만, 클래스멤버가 존재하는 시점에는 인스턴스멤버가 존재하지 않을 수도 있다
반환타입은 영향이 없다.
매개변수의 타입 (오버로딩X)
int add(int a, int b) { return a+b; }
int add(int x, int y) { retunr x+y; }
해당 예제는 매개변수 타입이 동일하기에 오버로딩X
리턴타입 (오버로팅X)
int add(int a, int b) { return a+b; }
long add(int a, int b) { return a+b; }
매개변수의 타입과 개수가 일치하므로 오버로딩X
add(3,3) 을 호출시 어떤 메서드를 호출 될 것인지 결정 불가
(오버로딩 △)
long add(int a, long b) { return a+b; }
long add(long a, int b) { retunr a+b; }
add(3,3L) 은 첫번째 메소드 호출
add(3L,3) 은 두번째 메소드 호출
add(3,3) 일 경우 어떤 메소드 호출 될지 모르기에 컴파일 에러
(오버로딩 O)
int add(int a, int b) { return a+b; }
long add(long a, long b) { return a+b; }
long add(int[] a) {
long result = 0;
for(int i=0; a.length; i++){
result += a[i];
}
return result;
}
인스턴스 초기화 메서드
생성자의 이름은 클래스의 이름과 같아야한다.
생성자 리턴 값이 없다. (void 안붙임)
클래스이름(타입 변수명, 타입 변수명,...){
//인스턴스 생성 시 수행될 코드,
//주로 인스턴스 변수의 초기화 코드작성
}
class Card {
Card(){ //매개변수가 없는 생성자
}
Card(String k, int num){ //매개변수가 있는 생성자, Card()와 오버로딩
}
}
Card c = new Card();
//연산자 new에 의해서 메모리에 Card 클래스의 인스턴스가 생성
//생성자 Card()가 호출되어 수행
// 연산자 new 결과로 생성된 Card인스턴스의 주소가 반환되어 참조변수 c에 저장
클래스 이름() { }
Card() { }
생성자도 메서드처럼 매개변수를 선언하여 호출 시 값을 넘겨 받아서 초기화작업에 사용이 가능하다.
class Car {
String color;
String gearType;
int door;
Car() {} //생성자
Car(String C, String g, int d) { //생성자
color = c;
gearType = g;
door = d;
}
}
Car c = new Car("White","auto",4);
Car(String color){
door = 5; //첫번째 줄
Car(color, "auto", 4); // 에러1. 생성자의 두 번째 줄에서 다른 생성자 호출
//this(color, "auto", 4); 로 호출해야함
}
Car(String color, String gearType, int door){
this.color = color;
this.gearType = gearType;
this.door = door;
}
//this.color 은 인스턴스 변수
//color 은 지역변수 (매개변수와 동일)
//this를 안쓰면 변수명이 동일하여 구분이 안된다.
Car(Car c){
color = c.color;
gearType = c.gearType;
door = c.door;
}
class InitTest{
int x; //인스턴스 변수 자동초기화
int y = x; //인스턴스 변수 자동초기화
void method(){
int i; //지역변수 -> 자동초기화 불가
int j = i; //에러, 지역변수를 초기화하지 않고 사용
}
class Car {
int door = 4; //기본형 변수의 초기화
Engine e = new Engine(); //참조형 변수의 초기화
}
class InitBlock {
static { /* 클래스 초기화 블럭 */}
{ /* 인스턴스 초기화 블럭 */ } //잘사용하지 않음->생성자로 초기화
}
클래스초기화 -> 인스턴스초기화 순으로 초기화 된다.