Tv클래스를 예로 계속 들겠다.
Tv클래스를 선언한 것은 Tv설계도를 작성한 것이고, 이를 Tv인스턴스로 생성해야 제품(TV)을 사용할 수 있다. 클래스로 부터 인스턴스를 생성하는 방법은 여러가지가 있지만 일반적으로는 다음과 같다.
클래스명 변수명;
변수명 = new 클래스명();
Tv t;
t = new Tv();
Tv t;
Tv클래스 타입의 참조변수 t를 선언한다. 메모리에 참조변수 t를 위한 공간이 마련된다. 아직 인스턴스가 생성되지 않았으므로 이 참조변수로 할 수 있는 것은 아무것도 없다.
t = new Tv();
연산자 new에 의해 Tv클래스의 인스턴스가 메모리의 빈 공간에 생성된다. Tv클래스에 정의돼 있던 멤버 변수들은 각 자료형에 해당하는 기본값으로 초기화 되며 메서드를 포함한 객체의 주소가 t라는 참조변수에 저장된다.
자바는 참조변수가 저장하고 있는 메모리를 알 수 없으므로 인스턴스는 참조변수를 통해서만 다룰 수 있으며, 참조변수의 타입은 인스턴스의 타입과 일치해야 한다. (Tv t = new Tv() 처럼 타입이 같아야 함.)
Tv tv1 = new Tv();
Tv tv2 = new Tv();
tv1.channel = 5;
tv2.channel = 12;
위와같이 각각의 인스턴스에 따로따로 값을 넣을수 있다. 만약 아래와 같은 메서드가 있다면?
class Tv {
int channel;
public void showChannel() {
System.out.println("현재 채널은 : " + channel);
아래와 같이 사용할 수 있을것이다.
tv1.showChannel; //"현재 채널은 : 5"
tv2.showChannel; //"현재 채널은 : 12"