자바는 객체 지향 언어로서 클래스 계층 구조, 상속성, 다형성, 캡슐화 등을 지원합니다.
자바는 하나의 프로그램에서 다수의 스레드가 동시에 실행할 수 있는 환경을 지원합니다.
C, C++ 등 많은 언어들은 자체적으로 멀티스레드를 지원하지 않아 운영체제의 도움을 받지만 자바의 경우 운영체제의 도움 없이 멀티스레드 프로그래밍이 가능합니다.
자바는 하드웨어, 운영체제 등 플랫폼에 종속되지 않는 독립적인 바이트 코드로 컴파일 됩니다.
자바 가상 기계만 있으면 하드웨어나 운영체제를 막론하고 자바 프로그램의 실행이 가능합니다.
자바 응용프로그램은 한 개의 클래스 파일 또는 다수의 클래스 파일로 구성됩니다.
자바의 실행은 main 메서드에서 시작되며, 클래스 파일에 오직 한 개의 main 메서드를 가져야 하지만 다수의 클래스 파일이 각각 main 메서드를 가질 수 있습니다.
자바는 객체 지향 언어의 캡슐화(Encapsulation)의 원칙을 철저히 지켜 변수나 메서드는 반드시 클래스 내에 구현해야 합니다.
클래스에 속하지 않은 변수나 메서드는 있을 수 없으며 클래스 안에 새로운 클래스 클래스인 내부 클래스를 만들 수 있습니다.
서로 관련 있는 클래스를 패키지로 묶어 관리할 수 있으며 패키지는 파일 시스템의 폴더 개념과 유사합니다.
예를 들어, java.lang.System 클래스는 java\lang 폴더의 System.class 파일을 나타내며, 여기서 java.lang을 패키지라고 합니다.
하나의 자바 소스 파일에는 여러 개의 클래스를 작성할 수 있지만 하나의 클래스 파일에는 반드시 하나의 컴파일된 자바 클래스만이 포함됩니다.
하나의 자바 소스 파일에 여러 개의 클래스를 작성하고 컴파일을 진행하면 클래스마다 별도의 클래스 파일이 생성됩니다.