또 다른 측면 :
Java는 매우 엄격한 기능을 가진 정적 언어입니다. 이것은 다른 언어 (c / f Ruby, Lisp 등)에서 상당히 개방적이거나 역동적 인 많은 것들이 엄격하게 결정됨을 의미합니다.
이것은 일반적인 디자인 결정입니다. "왜"는 대답하기 어렵다. "무엇을위한 것"은 매우 분명합니다. 컴파일러가 많은 오류를 감지 할 수있게하는데 , 이는 일반적으로 모든 언어에 매우 유용한 기능입니다. 둘째로, 언어에 대해 추론하기가 비교적 쉽습니다. 예를 들어, 자바 언어에서 (정규화 된) 정확성을 증명하는 것은 비교적 쉽다. 이에 비해 Ruby 등의 동적 언어에서는 사실상 불가능합니다.
이 사고는, 예를 들어, 메소드가 던질 수있는 가능성이 예외의 강제 선언의 분리형, 언어를 침투 interface
대는 class
등 모호한 다중 상속을 방지하고. 그것이 무엇인지 (컴파일 타임 오류 처리에 중점을 둔 정적 명령형 OOP 실제 언어) 실제로는 매우 우아하고 강력합니다. 그들은 이론적 (과학) 언어에 더 가깝게 왔는데, 이는 이전에 다른 어떤 실제 언어보다 이러한 문제를 탐구하기 위해 의도적으로 만들어졌습니다.
그래서. 엄격한 void
유형 을 갖는 것은 분명한 메시지입니다.이 메소드는 마침표를 반환하지 않습니다. 그것이 무엇입니까. 강제로 무언가를 항상 반환하도록 바꾸면 훨씬 더 역동적 인 행동으로 이어질 것입니다 (루비 에서처럼 모든 데프가 명시 적이거나 암시적인 반환 값을 갖는 루비처럼 ). 또는 다른 메커니즘을 사용하여 엄청난 팽창을 유발합니다.
(그리고 NB, 루비 (예를 들어) 다른이를 처리하고 그 해결책은 아직 정확히로 인정 , 자바 등이 완전히 다른 철학을 가지고 있기 때문에 퍼팅있다. 예를 들어이 창 밖으로 완전히도 낮게과 합리성을 던졌습니다 큰 초점을 언어의 표현력이 매우 뛰어납니다.)