1. 자바의 특징
- 운영체제에 독립적이다.
- 객체지향 언어이다.
- 상속, 캡슐화, 다형성 같은 객체지향개념의 특징이 잘 적용되어 있다.
- 자동 메모리 관리
- 가비지컬렉터(Garbage Collector)가 자동적으로 메모리를 관리해주기 때문에 프로그래밍에 집중할 수 있다.
- 네트워크와 분산처리를 지원한다.
- 풍부하고 다양한 네트워크 프로그래밍 라이브러리를 지원한다.
- 멀티 쓰레드를 지원한다.
- 일반적으로 운영체제에 따라 구현방법이 상이하며 처리방식도 다르다.
- 그러나 자바는 시스템과 관계없이 구현이 가능하며 관련된 라이브러리가 제공된다. 그리고 자바 인터프리터가 쓰레드에 대한 스케줄링을 담당한다.
- 동적 로딩을 지원한다.
- 실행 시 모든 클래스가 로딩되지 않고 필요한 시점에 클래스를 로딩한다.
- 그 외에도 일부 클래스가 변경되어도 전체 애플리케이션을 다시 컴파일하지 않아도 된다.
2. JVM
Java Virual Machin
자바를 실행하기 위한 가상 컴퓨터
- 하드웨어에 맞게 완전히 컴파일된 상태가 아니고 실행 시에 해석(interpret)되기 때문에 속도가 느리다는 단점이 있다.
- JVM은 OS 종속적이다.
3. JRE
Java Runtime Environment
-> JVM + 자바클래스 라이브러리 (Java API)
4. JDK
Java Development KIT
-> JRE + 자바를 개발하는데 필요한 프로그램들
개발에 필요한 실행파일
- javac.exe
- 자바 컴파일러.
- 자바 소스코드를 바이트코드로 컴파일한다.
- java.exe
- 자바 인터프리터.
- 컴파일러가 해석한 바이트코드를 해석하고 실행한다.
- javap.exe
- 역어셈블리어.
- 컴파일된 클래스파일을 원래의 소스로 변환한다.
- javadoc.exe
- 자동문서생성기.
- 소스파일에 있는 주석을 이용하여 Java API 문서와 같은 형식의 문서를 자동으로 생성한다.
- jar.exe
- 압축 프로그램.
- 클래스파일과 프로그램의 실행에 관련된 파일을 하나의 jar 파일로 압축하거나 압축해제한다.
5. 자바 프로그래밍의 실행과정
- 프로그램의 실행에 필요한 클래스(*.class)를 로드한다.
- 클래스 파일을 검사한다. (파일형식, 악성코드 체크)
- 지정된 클래스에서 main(String[] args)를 호출한다.

