[转帖]Java和Scala的前世今生
第一部分:Java
计算机语言介绍
第一代语言:机器语言。指令以二进制代码形式存在
第二代语言:汇编语言。使用助记符表示一条机器指令
第三代语言:高级语言
- C、Pascal、Fortran面向过程的语言 
- C++面向过程/面向对象 
- Java跨平台的纯面向对象的语言 
- .NET跨语言的平台 
- Python、Scala… 
Java基础知识图解

Java语言简史

Java语言概述
Java技术体系
- Java SE(Java Standard Edition)标准版 
支持面向桌面级应用(如Windows下的应用程序)的Java平台,提供了完整的Java核 心API,此版本以前称为
- J2SEJava EE(Java Enterprise Edition)企业版 
是为开发企业环境下的应用程序提供的一套解决方案。该技术体系中包含的技术如:Servlet 、Jsp等,主要针对于Web应用程序开发。版本以前称为J2EE
- Java ME(Java Micro Edition)小型版 
支持Java程序运行在移动终端(手机、PDA)上的平台,对Java API有所精简,并加入了针对移动终端的支持,此版本以前称为J2ME
- Java Card 
支持一些Java小程序(Applets)运行在小内存设备(如智能卡)上的平台
Java在各领域的应用
- 企业级应用 
主要指复杂的大企业的软件系统、各种类型的网站。Java的安全机制以及它的跨平台的优势,使它在分布式系统领域开发中有广泛应用。应用领域包括金融、电信、交通、电子商务等。
- Android平台应用 
Android应用程序使用Java语言编写。Android开发水平的高低很大程度上取决于Java语言核心能力是否扎实。
- 大数据平台开发 
各类框架有Hadoop,spark,storm,flink等,就这类技术生态圈来讲,还有各种中间件如flume,kafka,sqoop等等 ,这些框架以及工具大多数是用Java编写而成,但提供诸如Java,scala,Python,R等各种语言API供编程。
- 移动领域应用 
主要表现在消费和嵌入式领域,是指在各种小型设备上的应用,包括手机、PDA、机顶盒、汽车通信设备等。
Java语言主要特性
- Java语言是易学的 
Java语言的语法与C语言和C++语言很接近,使得大多数程序员很容易学习和使用Java。
- Java语言是强制面向对象的 
Java语言提供类、接口和继承等原语,为了简单起见,只支持类之间的单继承,但支持接口之间的多继承,并支持类与接口之间的实现机制(关键字为implements)。
- Java语言是分布式 
Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(java net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket等。Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。
- Java语言是健壮的 
Java的强类型机制、异常处理、垃圾的自动收集等是Java程序健壮性的重要保证。对指针的丢弃是Java的明智选择。
- Java语言是安全的 
Java通常被用在网络环境中,为此,Java提供了一个安全机制以防恶意代码的攻击。如:安全防范机制(类ClassLoader),如分配不同的名字空间以防替代本地的同名类、字节代码检查。
- Java语言是体系结构中立的 
Java程序(后缀为java的文件)在Java平台上被编译为体系结构中立的字节码格式(后缀为class的文件),然后可以在实现这个Java平台的任何系统中运行。
- Java语言是解释型的 
如前所述,Java程序在Java平台上被编译为字节码格式,然后可以在实现这个Java平台的任何系统的解释器中运行。
- Java是性能略高的 
与那些解释型的高级脚本语言相比,Java的性能还是较优的。
- Java语言是原生支持多线程的 
在Java语言中,线程是一种特殊的对象,它必须由Thread类或其子(孙)类来创建
Java运行机制及过程
- 跨平台 

有了JVM,同一个Java 程序在三个不同的操作系统中都可以执行。这样就实现了Java 程序的跨平台性。
- Java两种核心机制 
Java虚拟机 (Java Virtal Machine)
垃圾收集机制 (Garbage Collection)
- Java虚拟机 
- JVM是一个虚拟的计算机,具有指令集并使用不同的存储区域。 
- 负责执行指令,管理数据、内存、寄存器。对于不同的平台,有不同的虚拟机。 
- 只有某平台提供了对应的java虚拟机,java程序才可在此平台运行 
- Java虚拟机机制屏蔽了底层运行平台的差别,实现了“一次编译,到处运行” 

- 垃圾收集机制 
- 在C/C++等语言中,由程序员负责回收无用内存。 
- Java 语言消除了程序员回收无用内存空间的责任:它提供一种系统级线程跟踪存储空间的分配情况。并在JVM空闲时,检查并释放那些可被释放的存储空间。 
- 垃圾回收在Java程序运行过程中自动进行,程序员无法精确控制和干预。 
第一部分:Scala
Scala语言
为什么要学Scala
- Spark—新一代内存级大数据计算框架,是大数据的重要内容。 
- Spark就是使用Scala编写的。因此为了更好的学习Spark, 需要掌握Scala这门语言。 
- Spark的兴起,带动Scala语言的发展! 
Scala语言发展
联邦理工学院的马丁·奥德斯基(Martin Odersky)于2001年开始设计Scala。马丁·奥德斯基是编译器及编程的狂热爱好者,长时间的编程之后,希望发明一种语言,能够让写程序这样的基础工作变得高效,简单。所以当接触到JAVA语言后,对JAVA这门便携式,运行在网络,且存在垃圾回收的语言产生了极大的兴趣,所以决定将函数式编程语言的特点融合到JAVA中,由此发明了两种语言(Pizza & Scala)。
Pizza和Scala极大地推动了Java编程语言的发展。
- jdk5.0 的泛型,for循环增强,自动类型转换等,都是从Pizza 引入的新特性。 
- jdk8.0 的类型推断,Lambda表达式就是从Scala引入的特性。 
Jdk5.0和Jdk8.0的编辑器就是马丁·奥德斯基写的,因此马丁·奥德斯基一个人的战斗力抵得上一个Java开发团队。
Scala和Java的关系
一般来说,学Scala的人,都会Java,而Scala是基于Java的,因此我们需要将Scala和Java以及JVM 之间的关系搞清楚,否则学习Scala你会蒙圈。

Scala语言特点
Scala是一门以Java虚拟机(JVM)为运行环境并将面向对象和函数式编程的最佳特性结合在一起的静态类型编程语言。
- Scala是一门多范式的编程语言,Scala支持面向对象和函数式编程。 
- Scala源代码(.scala)会被编译成Java字节码(.class),然后运行于JVM之上,并可以调用现有的Java类库,实现两种语言的无缝对接 
- Scala单作为一门语言来看,非常的简洁高效。 
- Scala在设计时,马丁·奥德斯基是参考了Java的设计思想,可以说Scala是源于Java,同时马丁·奥德斯基也加入了自己的思想,将函数式编程语言的特点融合到JAVA中, 因此,对于学习过Java的同学,只要在学习Scala的过程中,搞清楚Scala和Java相同点和不同点,就可以快速的掌握Scala这门语言。 

[转帖]Java和Scala的前世今生的更多相关文章
- gradle项目中如何支持java与scala混合使用?
		之前写过一篇maven项目中java与scala如何混用,今天来看看gradle项目中如何达到同样的效果: 一.目录结构 基本上跟maven一样,tips:这一堆目录结构不用死记,后面会讲如何用gra ... 
- 【原创】大叔经验分享(17)编程实践对比Java vs Scala
		scala 官方地址 https://www.scala-lang.org/ 本文尽可能包含了一些主要的java和scala在编程实践时的显著差异,展现scala的代码的简洁优雅:scala通吃< ... 
- Spark编程环境搭建(基于Intellij IDEA的Ultimate版本)(包含Java和Scala版的WordCount)(博主强烈推荐)
		福利 => 每天都推送 欢迎大家,关注微信扫码并加入我的4个微信公众号: 大数据躺过的坑 Java从入门到架构师 人工智能躺过的坑 Java全栈大联盟 ... 
- java中,scala中代码检测当前环境的版本
		//来自spark源码// sparkContext初始化的时候写着 private def warnDeprecatedVersions(): Unit = { val javaVersion = ... 
- LINUX系统下Java和Scala的环境配置
		最近,笔者在研究一个有关“自然语言处理”的项目,在这个项目中,需要我们用Spark进行编程.而Spark内核是由Scala语言开发的,所以在使用Spark之前,我们必须配置好Scala,而Scala又 ... 
- 二、java 与 scala相互调用
		介绍:scala 是简化的java,运行于jvm的脚步语言.Java和scala通过各自编译器编译过都是jvm能解析class文件.本文介绍java和scala如何互调 scala的源代码文件是以. ... 
- 【Flink】Flink基础之WordCount实例(Java与Scala版本)
		简述 WordCount(单词计数)作为大数据体系的标准示例,一直是入门的经典案例,下面用java和scala实现Flink的WordCount代码: 采用IDEA + Maven + Flink 环 ... 
- 在Eclipse中混合Java和Scala编程
		1. 新建项目目录 scala-java-mix 2. 创建 src 目录及子目录: mkdir -p src/main/java mkdir -p src/main/scala 3. 在目录 sca ... 
- [转帖]Java升级那么快,多个版本如何灵活切换和管理?
		Java升级那么快,多个版本如何灵活切换和管理? https://segmentfault.com/a/1190000021037771 前言 近两年,Java 版本升级频繁,感觉刚刚掌握 Java8 ... 
- Akka系列(五):Java和Scala中的Future
		前言....... 随着CPU的核数的增加,异步编程模型在并发领域中的得到了越来越多的应用,由于Scala是一门函数式语言,天然的支持异步编程模型,今天主要来看一下Java和Scala中的Futrue ... 
随机推荐
- 斯坦福 UE4  C++ ActionRoguelike游戏实例教程  11.认识GAS & 创建自己的能力系统
			斯坦福课程 UE4 C++ ActionRoguelike游戏实例教程 0.绪论 概述 本篇文章对应Lecture 16 - Writing our own Gameplay Ability Syst ... 
- Java中ArrayList的遍历与删除元素方式总结
			在Java编程中,我们经常需要对数据结构进行遍历操作,并根据业务需求删除部分元素.而数组列表(ArrayList)是集合类中的一种,它可以动态地添加和删除元素,非常适合在程序中使用.本篇博客将总结Ar ... 
- 华为中国生态大会2021举行在即,GaussDB将重磅发布5大解决方案
			摘要:企业数字化转型如火如荼,云成为数字化与新基建的关键要素,数据成为智能时代新的生产资料和企业数字化的生命,而数据库则是支撑数据生命线的底座. 本文分享自华为云社区<华为中国生态大会2021举 ... 
- 华为云MVP周峥:气象预报是个技术活,大数据、超算、AI,缺一不可
			摘要:在这样一个关乎民生的行业里,人工智能.大数据.超算这些技术,可发挥的潜力也是无限的,华为云MVP周峥就是其中的技术践行者,他正带领着团队为国内气象行业带来一股温柔而不失力量的春风. 本文分享自华 ... 
- 理论+实例,带你掌握Linux的页目录和页表
			摘要:操作系统在加载用户程序的时候,不仅仅需要分配物理内存,来存放程序的内容:而且还需要分配物理内存,用来保存程序的页目录和页表. 本文分享自华为云社区<Linux从头学15:[页目录和页表]- ... 
- 总结vue3 的一些知识点:Vue.js 条件语句
			Vue.js 条件语句 条件判断 v-if 条件判断使用 v-if 指令: v-if 指令 在元素 和 template 中使用 v-if 指令: <div id="app" ... 
- Java 项目工程搭建 --创建子模块(依赖父工程)
			Java 项目工程搭建 --创建父工程 Java 项目工程搭建 --创建子模块(依赖父工程) 这个建方比较干净,不会生成乱七八糟的东西,(建完以后,其它模块可以 Copy 改名字) 选择 Mave ... 
- Interceptor Handle 执行顺序
			preHandle 调用时间:Controller方法处理之前 执行顺序:链式Intercepter情况下,Intercepter按照声明的顺序一个接一个执行 若返回false,则中断执行,注意:不会 ... 
- 浅谈locust 性能压测使用
			1. 基本介绍 Locust是一个开源的负载测试工具,用于模拟大量用户并发访问一个系统或服务,以评估其性能和稳定性.编写语言为Python,可通过Python来自定义构建性能压测场景脚本.Locust ... 
- Codeforces Round #681 (Div. 2, based on VK Cup 2019-2020 - Final) 个人题解(A - D)
			1443A. Kids Seating 题意: 给你一个整数n,现在你需要从编号 \(1\) ~ $4 ⋅ n \(中选出\)n\(个编号使得这些编号之间\)g c d ≠ 1$ ,不能整除. 看了半 ... 
