일종의 에뮬레이터인 JVM을 사용하여 "Wirte once, run anywhere"를 실현 가능하다. Java로 만든 프로그램은 운영체제에 독립적이기 때문이다. 하지만 여기서 주의해야하는 점은 JVM은 운영체제에 종속적이라는 것이다. 그렇기에 각 운영체제에 적합한 JVM이 필요하다.
Java는 객체지향개념의 특징인 상속, 캡슐화, 다형성, 추상화가 잘 적용된 객체지향언어이다.
초기 객체지향개념을 적용한 다른 언어들(small talk, c++)에 비해 배우기 쉽고 간결하고 이해하기 쉬운 코드를 작성할 수 있다.
Java로 작성된 프로그램은 실행되면 가비지 컬렉터가 자동적으로 메모리를 관리해준다. 즉 프로그래머가 메모리를 따로 관리하지 않아도 되기에, 메모리 관련 휴먼 에러를 방지할 수 있다.
풍부하고 다양한 네트워크 프로그래밍 라이브러리(Java API)를 통해 비교적 짧은 시간에 네트워크 관련 프로그램을 쉽게 개발 가능하다.
멀티쓰레드 프로그램을 운영체제와 관계없이 구현 가능하고 관련된 라이브러리가 제공되어 구현 또한 쉽다. 여러 쓰레드에 대한 스케줄링은 자바 인터프리터가 담당해준다.
Java로 작성된 프로그램은 보통 여러 클래스를 가지고 있다. Java는 동적 로딩을 지원하기에 실행시 이 모든 클래스가 로딩되지 않고 각 클래스가 필요한 시점에 로딩하여 사용된다. 또한 일부 클래스가 변경되어도 전체 애플리케이션을 다시 컴파일하지 않아도 되고, 애플리케이션의 변경사항이 발생해도 비교적 적은 작업만으로도 처리할 수 있다.
우리 나라는 Java를 매우 많이 사용한다. 기업의 사이즈가 클수록, 서비스의 사이즈가 클수록 더욱 더 Java로 만들어졌을 확률이 높다. 그렇기에 자연스럽게 Java관련 레퍼런스가 매우 많아서 공부하기 좀 더 편하다는 장점이 있다.
대부분 "Java의 정석"책에 기반을 두고 작성한 내용이다.