◈ JVM : software 적으로 platform(h/w, o/s) 구현
java interpreter :class (byte code)를 번역해서 o/s에게 넘겨준다
JVM - 메모리 할당 등, Java 프로그램 입장에서는 java o/s 역할을 함.
O/S
Platform
◈ /** */ 자바 DOC 생성을 위한 주석
◈ final 변수는 선언 시 반드시 할당을 할 필요는 없지만, 사용하기 전에는 할당해야 한다.
- final 멤버변수가 static일 때, 생성자에서 초기화하는 것은 에러. static에서도 초기화 불가(에러)
: 생성 시 초기화. final 변수가 메소드 변수일 경우에는 해당 메소드 내에서 사용 전 초기화 가능
- final 멤버변수가 static이 아닐 때, set메서드와 같은 곳에서 초기화 하는 것은 에러.
: 생성자와 선언 시 초기화 가능.
◈ 배열 생성 시, 초기값은 0, null, false을 default 값으로 set.
◈ 배열 선언 시 : int[3][] - 가능함
int[][3] - 불가능함
◈ boolean 을 제외한 다른 type은 형변환(type casting)이 가능하지만, boolean은 형 변환이 불가능하다.
◈ primitive는 형변환을 가급적 하지 않는 것이 더 좋다.
◈ Lvalue가 더 큰 타입이면, Rvalue가 자동으로 형변환된다. (메모리 공간 일부 낭비될 수 있음)
◈ Rvalue가 더 큰 타입이면, 컴파일 오류. 이 때는 명시적 형변환이 필요하다. (데이터 손실 발생)
◈ byte b=20;
byte c=30;
byte a = b+c ; // error
→ 자바에서 기본저장소가 int 크기인데, b+c를 하면, 결과갑이 int로 임시저장소에 들어갔다가
a에 들어가게 된다. 이 때는 에러없이 실행하기 위해 b+c 를 (byte)(b+c)로 캐스팅을 해주어야 한다.
◈ 스택메모리에 제일 먼저 쌓이는 변수는 메인함수의 String args[].
객체가 생성될 때 스택에 제일 먼저 쌓이는 변수는 this. 매번 생성될 때마다 this는 매번 따로 생성
◈ this 의 형(type)은 해당 클래스 명이다.
◈ 접근제어자 키워드를 지정하지 않을 경우에는 default인데, 이 경우에는
같은 패키지 내의 클래스에 의해서만 접근이 가능하게 된다.
◈ 리터럴(literal)
소스 코드 내에서 데이터 값 그대로 쓴 상수를 리터럴이라 함.
각 리터럴에도 타입이 있으며, 해당 타입은 자바 컴파일러가 자동으로 부여.
10 <= 정수형 리터럴 (int) 010 (8진수) 0x10 (16진수) *2진수는 표현 불가
10l, 10L (Long형)
0.1 <= 실수형 리터럴 (double) 0.1f (float)
"plming" <= 문자열 리터럴 (String)
'm' <= 문자형 리터럴 (char)
false, true <= boolean 타입 리터럴
◈ 메소드가 발생하는 익셉션의 종류를 try로 감싸주고, 처리하는 catch를 처리해줘야 한다.
익셉션이 발생하는 메소드 내부에 try, catch가 없으면, 해당 메서드를 호출하는 부분을
try, catch로 감싸고, 해당 메소드에는 메소드명과 { 사이에 throws 예외클래스type 을 적어준다.
ex)
void tmp() throws Exception
{
throw new Exception("에러");
}
public static void main(String args[]) {
Test t = new Test();
try{
t.tmp();
} catch(Exception e) {
System.out.println(e.getMessage());
}
}
◈ 정적초기화 블록
static {
....
}
JVM에 의해서 클래스 사용전에 이 블록 먼저 실행.
객체를 생성하지 않아도 자동으로 먼저 실행 됨.
main() 메소드 보다 더 먼저 실행.
static 멤버변수의 초기화를 위해서 사용하나, 많이 사용되지는 않음.
프로그래밍/기타