- 플랫폼 독립적이다. (JVM)
- 개발자가 많다. 정보 습득이 그만큼 편하다
- 객체 지향 언어다. 신뢰성 있는 프로그래밍이 가능하고 코드 재사용이 유리하다.
- 자동 메모리 관리(GC). 객체가 프로그램에서 더 이상 사용되지 않고 명시적 프로그래밍에 의해 역참조 되거나 제거할 필요가 없는 항목을 참조하지 않을 때마다 자동으로 제거해준다.
- 멀티 쓰레드를 쉽게 구현 가능하다.
- JVM위에서 돌아가므로 실행속도가 느리다.
- 예외처리가 불편하다. 프로그램 실행 시 발생할 수 있는 예외(Exception)들을 개발자가 직접 선언하여 처리해야 한다. 그렇지 않으면 아예 컴파일이 되지 않는다.