class A{
//인스턴스 필드
String color;
//인스턴스 메소드
void run(){
}
}
class A{
//정적 필드
static String color;
//정적 메소드
static void run(){
}
}
인스턴스(Instance) 멤버란 객체(인스턴스)를 생성한 후 사용할 수 있는 필드와 메소드를 말하는데,
이들을 각각 인스턴스 필드, 인스턴스 메소드라고 부른다.
public class Car{
// 필드
int gas;
// 메소드
void setSpeed(int speed) { ... }
}
예제]
정적(Static)은 '고정된' 이란 의미로 정적멤버는 클래스에 고정된 멤버로서
객체를 생성하지 않고 사용할 수 있는 필드와 메소드를 말합니다.
호출할때 인스턴스 멤버는 객체를 생성해서(인스턴스화) 호출하지만
정적 멤버는 new라는걸 사용하지 않고 객체를 클래스 이름만으로도 호출이 가능함.
public class 클래스{
//정적 필드
static 타입 필드[= 초기값];
//정적 메소드
static 리턴 타입 메소드( 매개변수선언, ... ) { ... }
}
클래스가 메모리로 로딩되면 정적 멤버를 바로 사용할 수 있음, 클래스 이름과 함께 도트(.) 연산자로 접근한다.
ex)
클래스.필드;
클래스.메소드(매개값, ...);
간단하게 설명하면 new 키워드를 못쓰게 만드는 패턴
전체 프로그램에서 단 하나의 객체만 만들도록 보장해야 하는 경우에 사용, 단 하나만 생성된다고 해서 싱글톤이라고 한다.
변수 : 변수(變數, variable)는 수학에서 쓰이는 수식에 따라서 변하는 값
int a = 10;
a = 20;
상수 : 상수(常數, constant)란 수식에서 변하지 않는 값
-> 상수는 반드시 초기화를 해주어야한다. 초기화되지 않은 필드를 그대로 남겨두면 컴파일 에러가 발생한다.
// 상수이름은 모두 대문자로 작성하는 것이 관례이다.
// 만약 서로 다른 단어가 혼합된 이름이라면 언더바( _ )로 단어를 연결해주자.
int a = 20;
a = 30; ( 안됨 )
예제]
예제2]
선언부에 static을 적지않아 발생하는 오류
// Cannot make a static reference to the non-static field Earth.EARTH_RADIUS
// 비정적 필드 Earth.EARTH_RADIUS에 대한 정적 참조를 만들 수 없음
// 선언부에 static을 주면 해결됨