본문 바로가기

프로그래밍/기타

자바 Day 1-2

◈ 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 멤버변수의 초기화를 위해서 사용하나, 많이 사용되지는 않음.