只说语言层面。嘿嘿,我念大学时也常有“又要被迫用Java了”的感觉。C# 和 Ruby 才是我大学后半的主要语言。当时最愤怒的莫过于明明不喜欢Java语言但还躲不开它…
技术上说Java语言并没有什么特别的优势。跟同质语言比,它的语言设计不如C#,而且短期内没有追近的势头(虽然从Java 8开始有进展了,但C# 6也在进步);跟异质语言比,它对native的精确控制和灵活性不如C++,动态性或者说便利性又不如Ruby、Python、JavaScript这些,在特定领域(例如高并发)的便利性又不如别的特定语言(并发如Erlang,数据处理如R),跟新一代中间应用层面语言如Go、Swift比也没法比。
要说为啥大学要用Java语言教学,那就是因为——它是门靠谱的民工语言。Java语言的设计从现在的角度看非常中庸,啥都不是特别出色,但都“还行”。出来找工作,会Java的话还是有不少选择余地的。
库方面也有非常丰富的选择,无论是核心功能还是各种扩展功能。某些核心功能如果不想用标准库的话还可以用很多第三方库来替代。例如:正则表达式不想用 java.util.regex ?有很多替代品,试试 joni ?GUI不想用 Swing ?试试新的JavaFX,或者 SWT ?…(此处填入您最喜欢的库)…
话说回来,虽然我不喜欢Java语言,但底下的JVM我还是很喜欢的。在JavaScript引擎们爆发之前,主流JVM的技术一直是业界实用的高级语言虚拟机/运行时里的领先者。现在更多热钱流向了JavaScript引擎那边,它们终于开始接近JVM的技术水平了。但像是GC方面,最先进的通用GC技术现在恐怕还是在主流JVM里。(CLR的概念跟JVM是比较同质的,但在内部看主流JVM的实现远比CLR更动态,更能够适应变化的环境,两者的很多部分目前还不在一个层面上。当然,性能特性不同,适用于两者的性能测试方面也有很大不同。)
现在能用C++实现JVM来支撑别人跑Java的感觉很有趣