-
자바프로그래밍 언어/클래스 2012. 5. 22. 21:12public class NestedValueReference {public int publicInt = 0;protected int protectedInt = 1;int justInt = 2;private int privateInt = 3;static private int staticInt = 4;static private class StaticNested {private int staticNestedInt=99;public void setValue() {staticInt = 14;}}private class Inner {private int innerValue=100;public void setValue() {publicInt = 20;protectedInt = 21;justInt = 22;privateInt = 23;staticInt = 24;}}public void setValue() {EventListener listener = new EventListener() {public void onClick() {publicInt = 30;protectedInt = 31;justInt = 32;privateInt = 33;staticInt = 34;}};}public void setValue(int value) {StaticNested nested=new StaticNested();nested.staticNestedInt=value;Inner inner=new Inner();inner.innerValue=value;}}-java.util.Objects // JDK 7.requireNonNull() // staticjava.lang.Class.forName() // static; 동적 클래스 로딩.getName().getConstructors() // java.lang.reflect.Constructor[].getMethods() // java.lang.reflect.Method[]
.getDeclaredMethods() // java.lang.reflect.Method[]
.getMethod() // Method
.isInterface().isInstance()c.f. instanceof 연산자.getInterfaces() // Class[].getSuperclass() // Class.newInstance()-Enum.values() // staticpublic enum OverTimeValues {THREE_HOUR, FIVE_HOUR, WEEKEND_FOUR_HOUR, WEEKEND_EIGHT_HOUR;}OverTimeValues value1 = OverTimeValues.THREE_HOUR;-package c.javapackage.sub;public class Sub {public final static String CLASS_NAME = "Sub";static int data = 1;static {data = 3;}public static void subClassStaticMethod() {...}}import static c.javapackage.sub.Sub.subClassStaticMethod;import static c.javapackage.sub.Sub.CLASS_NAME;public class Package {public static void main(String[] args) {subClassStaticMethod();System.out.println(CLASS_NAME);}}-메소드는 "Pass by Value"로 데이터를 전달한다null객체의 null 체크는 반드시 필요하다.==().!=()객체는 .equals() 메소드로 비교를 해야 한다배열도 객체이긴 하지만 메소드는 없는 특수한 객체다.java.lang 패키지는 자동 포함c.f. import java.lang.*;자바의 모든 클래스는 자바의 최상위 클래스인 java.lang.Object 클래스로부터 상속Cloneable 인터페이스Serializable 인터페이스프로퍼티final 한정자final 클래스: 상속이 불가능사용자가 생성자를 하나라도 만들게 되면 컴파일러는 더 이상 디폴트 생성자(속성들을 0으로 초기화)를 제공해주지 않는다.thisthis()정적 메소드는 오버라이딩되지 않는다..super수퍼클래스를 가리키는 레퍼런스 변수.super()수퍼클래스가 인자없는 생성자를 가지고 있지 않다면 암시적 호출은 컴파일 에러를 유발한다instanceof 연산자finalize()수퍼클래스 파이널라이저를 명시적으로 호출해야 한다.e.g. super.finalize();멤버 접근 제어 규칙privatepackageprotectedpackage서브 클래스에서 메소드는 슈퍼 클래스의 접근 제어보다 더 좁아질 수 없다.생성자는 상속되지 않는다슈퍼 클래스의 생성자를 명시하지 않더라도 자동적으로 호출된다.메소드 오버라이딩동적 메소드 검색final 한정자더 이상 오버라이딩이 불가능정적 메소드 검색변수에 쓰일 때는 상수abstract 클래스추상 메소드를 하나라도 가지는 클래스는 반드시 추상 클래스to force inheritors to override it인스턴스화될 수 없다인터페이스필드는 static과 final의 상수선언된 변수는 무조건 public static final의 속성을 갖는다abstract 메소드다형성추상 클래스인터페이스.toString()객체 자체를 출력해도 동일한 결과?.equals()두 객체의 내용이 동일한지 여부.==()두 레퍼런스 변수가 동일한 인스턴스를 가리키는지 여부 // 동일한 포인터 값?.getClass() // java.lang.Class