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 : 변경 없이 사용(상수)

  1. Class : 상속 불가
  2. Data : 상수
  3. 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

+ Recent posts