java帝国的诞生
c&c++
- 1972年c诞生
- 贴近硬件,运行极快,效率极高
- 操作系统,编译器,数据库,网络系统等
- 指针和内存管理
- 1982年c++诞生
- 面向对象
- 兼容c
- 图形领域,游戏等
Java初生
-
1995年的网页简单而粗糙,缺乏互动性
-
图形界面的程序(Applet)
-
Java2标准版(J2SE):去占领桌面
-
Java2移动版(J2ME):去占领手机
-
Java2企业版(J2EE):去占领服务区
- J2SE包含于J2EE中,J2ME包含了J2SE的核心类,但新添加了一些专有类
Java发展
- 他们基于Java开发了居多平台,系统,工具
- 构建工具:Ant,Maven,Jekins
- 应用服务器:Tomcat,Jetty,Jboss,Weblogic
- web开发:S图太少,Spring,Hibernate,myBatis
- 开发工具:Eclipse,netbeian,Intellj idea,Jbuilder
- …
java三大版本
Write Once、Run Anywhere(写一次跑一次
)
- JavaSE :标准版(桌面程序,控制台开发…)
- JavaME:嵌入式开发(手机,小家电…)
- JavaEE:E企业级开发(Web端,服务器开发…
Java特性和优势
-
简单性
- 是c++语法的纯净版。没有头文件,指针运算,结构,联合,操作符重载,虚基类等等。语法基于c,因此学习起来完全不费力。
-
面向对象
- 面向对象是一种程序设计技术,他将重点放在数据(即对象)和对象之间的接口上。
-
可移植性(跨平台性)
- 这是JAVA的一个重要的优势。JAVA代码或者说字节码、二进制码可以跨平台的移植,而不用管具体的操作系统和硬件环境。JAVA本身就是面向网络的,只有在网络环境中才能显示出他的优势,比如:现在我有一个网络环境,要让我的笔记本和手机交互,笔记本环境是windows发出一个让手机定时录音的JAVA代码,手机只有简单Linux内核操作系统,照样可以完美的执行这个代码。
“一次编写,随处运行”:“write once, run anywhere”
- 这是JAVA的一个重要的优势。JAVA代码或者说字节码、二进制码可以跨平台的移植,而不用管具体的操作系统和硬件环境。JAVA本身就是面向网络的,只有在网络环境中才能显示出他的优势,比如:现在我有一个网络环境,要让我的笔记本和手机交互,笔记本环境是windows发出一个让手机定时录音的JAVA代码,手机只有简单Linux内核操作系统,照样可以完美的执行这个代码。
-
高性能
-
分布式
-
1、分布式系统一定是由多个节点组成的系统。
其中,节点指的是计算机服务器,而且这些节点一般不是孤立的,而是互通的。
2、这些连通的节点上部署了我们的节点,并且相互的操作会有协同。
-
-
动态性
-
Java本质为静态语言,而不是动态语言。动态语言显著的特点是在程序运行时,可以改变程序结构或变量类型,典型的动态语言有Python、ruby、javascript等。Java不是动态语言,但Java具有一定的动态性,表现在以下几个方面:
l 反射机制;
l 动态字节码操作;
l 动态编译;
l 执行其他脚本代码;
-
-
对线程
- 多线程的使用可以带来更好的交互响应和实时行为。多线程的简单性是Java成为主流服务器端开发语言的主要原因之一。
-
安全性
- Java适合于网络/分布式环境,为了达到这个目标,在安全性方面投入了很大的精力,使Java可以构建防病毒,防篡改的系统。
-
健壮性
- Java是一种健壮的语言,吸收了C/C++ 语言的优点,但去掉了其影响程序健壮性的部分(如:指针、内存的申请与释放等)。Java程序不可能造成计算机崩溃。Java系统仔细检测对内存的每次访问,确认它是合法的,而且不致引起任何问题。不过,即使Java程序也可能有错误。如果出现某种出乎意料之事,程序也不会崩溃,而是把该例外抛弃。再通过异常处理机制,程序就会发现这类例外,并加以处理。
-
总结
在互联网快速发展的时代,对应出现了不同的操作系统(不同的平台),那么java就可以一份代码各个平台都可以运行起来。这种
跨平台性
是其他语言所不能相比的,这个特性才是java最独特的地方。对于语言而言,虽然在一代一代的改进,但是万变不离其中,我们只需要去精通一门就可以了。
与其他语言的对比,Java 的优势
Java 是最好的语言么?不是,因为在每个领域都有更合适的编程语言。
C 语言无疑是现代计算机软件编程语言的王者,几乎所有的操作系统都是 C 语言写成的。C++ 是面向对象的 C 语言,一直在不断的改进。
JavaScript 是能运行在浏览器中的语言,丰富的前端界面离不开 Javascript 的功劳。近年来的 Node.js 又在后端占有一席之地。Python 用于系统管理,并通过高性能预编译的库,提供 API 来进行科学计算,文本处理等,是 Linux 必选的解释性语言。
Ruby 强于 DSL(领域特定语言),程序员可以定义丰富的语义来充分表达自己的思想。Erlang 就是为分布式计算设计的,能保证在大规模并发访问的情况下,保持强壮和稳定性。Go 语言内置了并发能力,可以编译成本地代码。当前新的网络相关项目,很大比例是由 Go 语言编写的,如 Docker、Kubernetes 等。
编写网页用 PHP,函数式编程有 Lisp,编写 iOS 程序有 Swift/ObjectiveC。
一句话概括,能留在排行榜之上的语言,都是好的语言,在其所在的领域能做到最好。
那么,Java 语言到底有什么优势可以占据排行榜第一的位置呢?
其一,语法比较简单,学过计算机编程的开发者都能快速上手。
其二,在若干了领域都有很强的竞争力,比如服务端编程,高性能网络程序,企业软件事务处理,分布式计算,Android 移动终端应用开发等等。
最重要的一点是符合工程学的需求,我们知道现代软件都是协同开发,那么代码可维护性,编译时检查,较为高效的运行效率,跨平台能力,丰富的 IDE,测试,项目管理工具配合。都使得 Java 成为企业软件公司的首选,也得到很多互联网公司的青睐。
没有短板,容易从市场上找到 Java 软件工程师,软件公司选择 Java 作为主要开发语言,再在特定的领域使用其他语言协作编程,这样的组合选择,肯定是不会有大的问题。
所以综合而言,Java 语言全能方面是最好的。
-
JDK、JRE、JVM
- JDK:Java Development Kit(开发包)
- JRE:java Runtime Environment(运行时环境)
- JVM:JAVA virtual Machine(虚拟机)
-
概述图
Java程序运行机制
-
编译型
-
解释性
Java语言比较特殊,由Java语言编写的程序需要经过编译步骤,但这个编译步骤并不会生成特定平台的机器码,而是生成与平台无关的字节码(也就是class文件)。当然,这种字节码不是可执行的,必须使用Java解释器来解释执行。因此可以认为:Java语言既是编译型语言,也是解释型语言。或者说,Java语言既不是纯粹的解释型语言,也不是纯粹的编译型语言。Java程序的执行过程必须经过编译,后解释两个步骤。
Java语言负责解释执行字节码文件的是JVM(Java Virtual Machine)虚拟机。JVM是可以运行Java字节码的虚拟机。所有的平台上的JVM想变一起提供相同的编程接口,而编译器只需要面向虚拟机,生成虚拟机能够理解的代码,然后由虚拟机执行。在一些虚拟机的实现中,还会将一些虚拟机代码转换成特定系统的机器码执行,从而提高效率。
JVM的实现细节:(指令集、存储器、类文件的格式、栈、垃圾回收堆、存储区)
总结:
类型 | 原理 | 优点 | 缺点 |
---|---|---|---|
编译型语言 | 通过专门的编译器,将所有源代码依次性转换成特定平台(Windows、Linux…)执行的机器码(以可执行文件的形式存在) | 编译一次后,脱离了编译器也可以运行,并且运行效率高 | 可移植差,不够灵活 |
解释型语言 | 由专门的解释器,根据需要尖部份源代码临时转换成特定平台的机器码 | 跨平台性好,通过不同的解释器,将相同的源代码解释成不同平台下的机器码 | 一边执行一边转换,效率低 |