Access (접근 지정자)
Usage (사용 지정자)
static : 객체 생성 없이 사용
- 클래스가 로딩 될 때, 메모리 공간을 할당하는데 처음 설정된 메모리 공간이 변하지 않음을 의미한다.
객체를 아무리 많이 만들어도 해당 변수는 하나만 존재 (객체와 무관한 키워드)
static method는 non-static 멤버 변수 사용 불가
static method
는 객체가 생성될때 로딩되는 것이아니라클래스가 로딩될 때
로딩되는 된다.non-static멤버변수
는객체가 생성시
에 로딩된다. 따라서 생성되는 시기가 달라서 사용이 불가능 하다.- new로 객체를 생성해서 사용하거나, static 멤버 사용해야 한다.
static 을 사용한 정적 변수 : 클래스 변수
static 을 사용한 정적 메소드 : 클래스 메소드
static 필드 참조 방법
- 클래스이름.정적필드
- 클래스객체이름.정적필드
- this.정적필드 // err - 자기 자신의 객체를 표현하는 this로 참조 불가능!
static method 내에서
this, super
사용 불가static method는
오버라이딩
이불가능
(오버로딩 가능)- 부모, 자식 중 1개의 method에 static이 있으면 오버라이딩이 불가능하다.
- 부모, 자식 둘 다 static을 사용하여 같은 이름의 method 정의 시, 오버라이딩이라고 볼 수 없다. 왜냐하면, 각자의 클래스 영역에 따로 method가 존재하기 때문이다. (독립적)
- A a2 = new B();에서 shadow effect가 일어나는데 원래 오버라이딩이 된 함수는 제외된다. 그러나 여기에서는 shadow effect에 의해 가려진다.
- 즉, 오버라이딩이 아니다!
- 오버라이딩은 super와 연관이 되어 있어야한다.
싱글콘 객체를 만들 때 주로 사용된다. (객체를 1개만 만든다.)
final : 변경 없이 사용(상수)
- Class : 상속 불가
- Data : 상수
- Method : 오버라이딩 불가
abstract : 상속으로만 사용
Constructor
- Non-static member 초기화
- 반환형이 없고, 클래스 이름과 동일한 이름을 가진다.
- 생성자를 쓰는 이유 : 추가적인 작업을 하기위해 (명시적 초기화)
생성자 오버로딩 : 생성자를 오버로딩하고, 디폴트 생성자를 생성하지 않으면 자동으로 생성되지 않는다.
기본 생성자 (인자x)
- 생성자를 명시적으로 생성하지 않으면 자동으로 제공된다.
- this(...)
- 반드시 생성자 구현의 첫 번째 줄
- 구현된 자기자신의 다른 생성자를 호출한다.
- super(...)
- 반드시 생서자 구현의 첫 번째 줄
- 부모 클래스의 생성자 호출(부모의 non-static 멤버 초기화)
- 명시적으로 호출하지 않으면 첫 줄에 super()가 자동으로 호출된다. ->이때 부모클래스에 디폴트 생성자가 없으면 에러가 난다.
'JAVA > JAVA' 카테고리의 다른 글
[JVAV] BigInteger 클래스 (0) | 2018.07.09 |
---|---|
[JAVA] 2진수, 8진수, 16진수 (0) | 2018.07.09 |
[JAVA] JAVA 특징 (0) | 2017.09.18 |
[JAVA] String / StringBuffer / StringBuilder (0) | 2017.09.03 |
[JAVA] JVM 메모리 관리 (0) | 2017.09.03 |