Java的诞生历史
Java帝国的诞生
1.1972年C诞生
- 贴近硬件,运行极快,效率极高
- 操作系统,编译器,数据库,网络系统等都采用C语言
- 但是,它的指针和内存管理给程序员安上了“枷锁”。它的指针没有检查制度,内存也不会自动释放,需要程序员自己释放。虽然在任何编译器都可以写C,但是它要求使用标准的C的库,这种‘暴政’对程序员很不友好。
2.1982年C++诞生
- 面向对象
- 兼容C
- 在图形领域、游戏等领域做的比较好
- 但是,它比C更加复杂,很多人无法完全掌握。其内涉及很多计算机底层的知识。
3.1995年Java诞生
- 语法有点像C
- 没有指针
- 没有内存管理
- 真正的可移植性,编写一次,到处运行
- 面向对象
- 类型安全
- 高质量的类库
- ......
浅谈Java的命名
Java,最初命名为C++--,代表在C++之上进行优化的一种语言,但是与它的设计理念不符合,因此就改成了oak。但是后来命名的时候发现oak已经被命名过了,因此也就出现了我们现在的Java这个称呼。
Java初生
- 1995年的网页简单而粗糙,缺乏互动性
- 由Java开发的图形界面的程序(Applet)使得网页变得稍微美观一些,也就捕获了大多数程序员的心
- 微软的比尔·盖茨说:“这是迄今为止设计的最好的语言!”微软想将Java设计为仅供windows使用的语言,于是就有了后来的.net出现。
- 由于Java只能最初用于图形界面开发,用途限制性比较大,于是1998年就引进了Java的三个版本:
- Java 2 标准版(J2SE):去占领桌面
- Java 2 移动版 (J2ME):去占领手机
- Java 2 企业版 (J2EE):去占领服务器
- JavaSE最初占领桌面领域做的并不很好,界面不是很好看,而且JavaME在手机端运行还要下载专门的JVM(Java虚拟机),很不方便。只有javaEE在占领服务器这一块做的比较好,也因此成为了Java比较适合的一个领域。因此很多大型的项目都采用Java语言。
浅谈为什么Java开发后微软仍要开发.NET?
Java当年打出来就是冲着跨平台来的,然后后来发现,每一个系统都有自己的规则,所以搞的东西性能就非常差。
而WIN 一直以来在 PC端是大哥的地位,而且微软跟硬件商都是玩在一起的,什么优化驱动什么的 肯定一般是WIN先来。为了提高WIN的性能,微软就因此创建了.NET。
.NET就是微软自家的东西,无论调用任何东西,跟生态都比JAVA强。包括性能。 所以桌面程序大多数是 .NET。
Java为什么要开发JVM?
Java 也是个高阶语言,要让电脑执行你编写的应用程序,也是得借助编译器的翻译。不过,Java编译时,并不直接翻译为相依于某平台的0101指令,而是翻译为中介格式的位元码(byte code)。Java 的原始码文件格式名为.java,经过编译器翻译过后,会变成.class的格式文件位元码。如果想要执行这个位元码档案,目标平台上必须安装有JVM(Java Virtual Machine)。JVM会将位元码翻译为相应平台支持的语言,从而达到跨平台的目的。
不同的平台必须安装该平台相对应的JVM。这就好比你讲中文(.java),Java编译器帮你翻译为英文(.class)。之后该英文文件,到当地之后,再由当地看得懂英文的人翻译为当地的方言。
所以JVM所担任的职责之一,就是当地的翻译员,将位元码文件翻译为当时作业系统看得懂的0101序列。不过这不是最重要的,基本上如果只是要翻译员的话,直译器(Interpreter )就办得到了。
JVM有个很重要的观念就是:「对于Java程式而言,其实它只认识一种作业系统(或说是一种机器),这个系统叫作JVM,而对于JVM而言,位元码文件就是它的可执行文件!也就是格式为.class的文件。Java代码程序,理想上,并不用理会真正执行于哪个平台之上,它只要知道如何执行于JVM之上就可以了,至于JVM实际上如何与底层平台作沟通,则是JVM自己的事!」这个观念非常的重要,对于以后能够搞清楚所PATH变量与CLASSPATH变量的概念,也有一定的帮助。
浅谈一个好的程序需要具备什么?
一个好的程序需要具备“三高”原则,即高可用、高性能、高并发。
高并发是现在互联网分布式框架设计必须要考虑的因素之一,它是可以保证系统能被同时并行处理很多请求。
高性能是指程序处理速度非常快,所占内存少,cpu占用率低。
高可用通常来描述一个系统经过专门的设计,从而减少停工时间,而保持其服务的高度可用性。
Java发展
1.大量巨头加入了Java后,他们基于Java开发了巨多的平台,系统,工具
- 构建工具:Ant,Maven,Jekins
- 应用服务器:Tomcat,Jetty,Jboss,Websphere,weblogic
- Web开发:Struts,Spring,Hibernate,myBatis
- 开发工具:Eclipse,Netbean,intellij idea,Jbuilder
- ......
2.2006年Hadoop的出现让Java占领了大数据领域
3.2008年Andrid的出现让Java在手机端占领了一席之地,也相当于是JavaME在手机端的一个提升。
Java特性及优势
- 简单性
- 面向对象
- 可移植性
- 高性能
- 分布式
- 动态性(Java本身不具有动态性,它的反射机制可以满足动态性要求)
- 多线程
- 安全性
- 健壮性
为什么要学习Java?
- 它是目前最为广泛的网络编程语言
- Java语言简单,这门语言既易学又好用。
- 基于对象的编程更符合人的思维模式
- 跨平台是Java语言最大的优势
- 是解释型
- 内置对多线程的支持
- 安全
- 动态(Java内部的反射机制实现)
Pass:本文主要用于学习分享,若有问题希望能在评论区给出您宝贵的意见和建议!感谢!
Java的诞生历史的更多相关文章
- 对“Java”的诞生历史、特点、定义等HR常问的简单题
本人是一个学习Java的新手,在学习了Java以后,对Java的一些总结. 这里共有12点对Java的简单的阐述,如果解释的不怎么样请大家谅解哈. 1.首先我们来看一看,在Java之前的有那些打牌语言 ...
- 初识java——Java程序的历史、开发和运行
上了一节Java试听课,整理出如下笔记. Java最新版本下载 http://www.oracle.com/technetwork/java/javase/downloads/index.ht ...
- 2020重新出发,JAVA语言,JAVA的诞生和发展史
java的诞生 在1991年时候,James Gosling在Sun公司的工程师小组想要设计这样一种主要用于像电视盒这样的消费类电子产品的小型计算机语言. 这些电子产品有一个共同的特点:计算处理能力和 ...
- JVM基础系列第2讲:Java 虚拟机的历史
说起 Java 虚拟机,许多人就会将其与 HotSpot 虚拟机等同看待.但实际上 Java 虚拟机除了 HotSpot 之外,还有 Sun Classic VM.Exact VM.BEA JRock ...
- Java SE/EE/ME概念理解(Java版本发展历史)
继上一篇文章http://www.cnblogs.com/EasonJim/p/6181981.html中说的区别,其实分析的不够彻底,因此再次在这里做详细的分析. 零.Java与Sun.Oracle ...
- 如何在官网下载java JDK的历史版本
如何在官网下载java JDK的历史版本 http://jingyan.baidu.com/article/9989c746064d46f648ecfe9a.html 如何在官网下载java JDK的 ...
- Java版本及历史简述
Java版本及历史简述 初学Java,对于Java那么多版本很困惑,这里做一点笔记,如有错误希望指出. Java由Sun公司创造,后Sun公司被Oracle公司收购,Java也随之变为Oracle的产 ...
- 浅谈Java的诞生和现状
昨天在旅途中登录一下很久没用的boss直聘,看看行情,一天的时间,已经有20+家公司给我发出了面试邀请,先跟大家谈谈Java的诞生和现状. 传说,在二十世纪90年代,一个叫Sun的公司,成立了一个项目 ...
- JavaScript 的诞生历史
看到一篇介绍JS诞生历史的文章,很有意思,文章里描述了很多的历史细节 https://webdevelopmenthistory.com/1995-the-birth-of-javascript/
随机推荐
- 【笔记】golang中使用protocol buffers的底层库直接解码二进制数据
背景 一个简单的代理程序,发现单核QPS达到2万/s左右就上不去了,40%的CPU消耗在pb的decode/encode上面. 于是我想,对于特定的场景,直接从[]byte中取出字段,而不用完全的把整 ...
- virtual stuido同时调试多个控制台
问题 UDP作业需要服务器端和客户端收发信息完成交互,需要同时调试多个窗口. 解决办法 但是缺点依然是无法调试2个,修改另一个测试. 所以多开可能依然是好办法.
- IDEA2017 maven Spark HelloWorld项目(本地断点调试)
作为windows下的spark开发环境 1.应用安装 首先安装好idea2017 java8 scalaJDK spark hadoop(注意scala和spark的版本要匹配) 2.打开idea, ...
- C++普通成员函数的调用形式
#include<iostream> using namespace std; class A { public: int data; void foo(int x) { data = x ...
- Java 锁 概念介绍
一 Java中的锁是什么? /* * 一 Java锁定义? * 在计算机科学中,锁(lock)或互斥(mutex)是一种同步机制,用于在有许多执行线程的环境中强制对资源的访问限制. * 锁旨在强制 ...
- NOI Online 2021 入门组 T1
Description 题目描述 Alice.Bob 和 Cindy 三个好朋友得到了一个圆形蛋糕,他们打算分享这个蛋糕. 三个人的需求量分别为 \(a, b, c\),现在请你帮他们切蛋糕,规则如下 ...
- 各种形式存放token
1.可以将token存储在 localstorage里面,在一个统一的地方复写请求头,让每次请求都在header中带上这个token, 当token失效的时候,后端肯定会返回401,这个时候在你可以在 ...
- MySQL 1093 - You can't specify target table 'sc' for update in FROM clause
错误代码如下: #(8) 把"邓维杰"同学的成绩全部删除. SELECT * FROM sc WHERE EXISTS(SELECT * FROM student WHERE st ...
- shell中的括号(小括号,大括号/花括号)
在这里我想说的是几种shell里的小括号,大括号结构和有括号的变量,命令的用法,如下: 1.${var} 2.$(cmd) 3.()和{} 4.${var:-string},${var:+string ...
- Java注解和注解处理器使用方法
原创:转载需注明原创地址 https://www.cnblogs.com/fanerwei222/p/11492274.html 准备材料: 实体类: PrintDemo 注解类: PrintName ...