JAVA概述


活动地址:CSDN21天学习挑战赛

第2讲 java语言概述

今日内容:

  1. java语言发展过程(了解)
  2. java技术体系(了解)
  3. java语言特点(了解)
  4. 跨平台(理解)
  5. java的JVM(理解)
  6. java语言的发展前景,以及应用场景,以及薪资待遇

2.1 Java语言发展史

詹姆斯•高斯林(James Gosling)1977年获得了加拿大卡尔加里大学计算机科学学士学位,1983年 获得了美国卡内基梅隆大学计算机科学博士学位,毕业后到IBM工作,设计IBM第一代工作站NeWS系统,但不受重视。后来转至Sun公司,1990年,与Patrick,Naughton和Mike Sheridan等人合作“绿色计划”,后来发展一套语言叫做“Oak”,后改名为Java。

JAVA之父

JDK的历史(Java Development Kit)
1.0 - 1.1 - 1.2 - 1.3 - 1.4 - 1.5
5.0 - 6.0 - 7.0 - 8.0……
Sun公司于1995年推出
1991年sun公司James Gosling等人开始开发Oak语言
1994年,将Oak语言更名为Java
1996年获得第一笔投资1亿元
1998年提出jdk1.2【GUI】
之后推出jdk1.3 jdk1.4【反射】
2005年重新更名为jdk5.0,进行了大幅的版本改进
2006年sun公司宣布将Java作为免费软件对外发布
2007年3月起,全世界所有的开发人员均可对Java源代码进行修改
2007年推出jdk6.0
2009年4月Oracle以74亿美元收购了sun公司
2011年7月由Oracle正式发布jdk7
2014年3月正式发布了java8
2017年9月正式发布了java9【短期支持】
2018年3月正式发布了java10【短期支持】
2018年9月正式发布了java11
1.8(java8)是企业主流使用的版本【LTS版本-longTimeService版本】

注意小细节:

Oracle官网的java版本: 从8.0开始,截止到2022年9月份版本更新到Java19

目前高级编程语言的排名, 大家可以看下.

2.2 Java语言的三种技术架构

JavaSE(Java Platform Standard Edition):Java 标准平台,
所有的Java项目都需要JavaSE的支持,包括JavaEE 和JavaME亦是如此;如JavaWeb、Android、Java桌面软件,JavaFX 等;

JavaEE(Java Platform Enterprise Edition):Java企业平台,用于开发和部署可移植、健壮、可拓展和安全稳定的服务器端Java应用程序,如企业的应用系统ERP、CRM、OA,电信系统、银行系统等;Java EE是基于Java SE封装了Web服务、组件模型、管理和通信API,实现企业级的大型应用,如阿里巴巴的大部分应用都是基于Java开发的,不仅如此,阿里巴巴也基于Java封装了众多的Java中间件;

JavaME(Java Platform Micro Edition): Java微型平台,也叫K-JAVA,
用于开发移动设备、嵌入式设备(比如手机、PDA、电视机顶盒和打印机等,Java原本就是为了电视机顶盒而设计的),不过现在市场份额并不是很高了;

目前我们用的技术架构通常是javaEE,面向企业级开发.

学习阶段:

  1. java基础: javaSE
  2. java高级: javaEE

2.3 Java语言特性

简单性 ,安全性 ,面向对象 ,高性能 ,编译性, 解释性 ,健壮性, 开源 ,跨平台

  • 简单性:
    通俗的来讲: java语言学习起来简单(java语言好理解),使用起来简单.
    Java语言的底层是用C++写的,但是Java又将C++语言中一些特征去掉了,比如:不支持多继承,屏蔽掉指针,不支持go to语句,不使用主文件,免去了预处理程序。
    拿指针举例,对于C++来说程序员是可以通过指针直接操作内存的,在Java语言中真正操作内存的是Java虚拟机(JVM)。所有的Java程序都是运行在Java虚拟机当中的,而Java虚拟机在执行过程中再去操作内存。当然,我们也得出结论,Java虚拟机是通过C++实现的。
    Java语言屏蔽了指针的概念,程序员不能直接操作内存,这种方式既有优点也有缺点:
    • 优点:不容易导致内存泄漏,程序员在开发过程中不需要每次都要想着释放内存,变简单了;
    • 缺点:效率问题。
    java语言的简单性突出在: 不用直接操作内存,是在java虚拟机上运行的.

  • 安全性
    Java的存储分配模型是防御恶意代码的主要方法之一。Java没有指针,所以程序员不能得到隐蔽起来的内幕和伪造指针去指向存储器。编译的Java代码中的存储引用在运行时由Java解释程序决定实际存储地址。
    比如: windows系统是C语言编写,提示修复漏洞.
    安全性体现在两个地方:

    1. java语言没有指针,不能直接操作内存.
    2. java语言编写的程序不同 的部分,在内存中的存储区域不同.比如: 堆, 栈, 方法区,常量池等等.
  • 面向对象性
    Java语言是一个面向对象的语言。对程序员来说,更容易理解,因为人类通常是以对象的方式认知世界的。采用面向对象的方式可以让复杂问题简单化
    面向对象: 通俗的来讲通过java语言 来表示 生活中抽象化的模型,最终通过java编写的程序来表示抽象化的模型对象
    比如: 机器人说话的程序, 怎么描述机器人, 我们可以使用java来抽取和封装机器人的特征和行为,通过 一个机器人类来表示.
    class 机器人类{ 机器人编号, 说话(){}}, 使用时可以通过机器人对象来操作.

  • 高性能性
    Java是多线程语言,完美支持多线程并发。
    比如: 一大车化肥, 把车上的化肥运到仓库,
    如果一个人负责搬运,花的时间比较长.
    如果多个人复制搬运,花的时间比较短.

  • 编译性和解释性
    java高级语言不能直接在计算机上运行(计算机只识别机器语言(0和1)).
    java程序--------->编译性: 机器语言--------> 计算机上运行了
    解释性: 编程语言可以直接运行,不用编译,比如: 前端开发语言htm ,javascript,css等语言可以直接运行.
    计算机不能直接理解高级语言,只能直接理解机器语言,所以必要要把高级语言翻译成机器语言,计算机才能执行高级语言编写的程序, 就是编译性介绍.
    通俗的讲,编译就是把高级语言变成计算机可以识别的机器语言,编译型语言写的程序在执行之前,需要一个专门的编译过程,把程序编译成为机器语言的文件,比如exe文件,只需要翻译一次,后面要运行直接使用编译的结果(exe文件)
    解释性语言不需要编译,每个语句都是执行的时候才翻译,这样解释性语言每执行一次就需要翻译一次,效率比较低。解释是一句一句的翻译(网页)
    java语言编写的程序需要先编译成计算机识别的语言,然后交给JVM去解释执行.
    java高级语言,编写的程序,计算机不能直接运行.
    总结:
    编译性: 针对高级语言来说的,
    编译过程: 将高级语言编译成机器语言,才可以在计算机上运行
    解释性: 在运行时,不用编译,可以直接运行,通常会用html, java,css这些都是解释性语言.
    缺点: 每执行一次,都需要解释一次,效率比较低.

  • 可移植性/跨平台
    Java在安装完开发环境后,会自带一个Java虚拟机,它是用C++语言实现的虚拟的计算机,它提供了一个字节码到底层硬件平台和操作系统的屏障,直接屏蔽掉了操作系统之间的差异,Java虚拟机这种机制实现了跨平台,针对不同的操作系统具有不同的版本。
    我们在编写完Java程序经过编译后生成的字节码文件是与平台(操作系统)无关的,是一种被Java虚拟机识别的字节码指令,这样,就可以做到,编写一次,到处运行。
    总结:

    1. 可移植性/跨平台 说的是一件事.
    2. 平台: 指的不同的操作系统(比如: windows操作系统, mac操作系统 ,是有区别)
    3. 跨平台: 指的java语言编写的程序,可以在任意平台运行.
      疑问: 操作系统是有区别的, java语言编写的程序怎么在不同的操作系统运行?
      java源代码(程序)------>编译: 机器语言 JVM虚拟机运行------>安装windows操作系统的计算机,
      java源代码 (程序) ----->编译: 机器语言 JVM虚拟机运行------> 安装mac操作系统的计算机,
      总结一点: java语言跨平台的核心,不直接在计算机上运行程序,而是在虚拟机上运行程序(通过虚拟机屏蔽操作系统的区别)
      疑问: 各个国家语言是有区别的, 中国人怎么在不同的国家旅行(指的在中国人说中国话被其它国家的人理解呢)?
      中国人-------------------> 中国话 翻译 韩国话 ----------------->韩国
      中国人-------------------> 中国话 翻译 西班牙语 ------------------>西班牙
  • 健壮性
    Java的健壮性说的主要是Java中有一种机制:自动垃圾回收机制(GC机制),由于屏蔽了指针,不容易导致内存泄漏,Java虚拟机负责调度GC机制,不需要程序员干涉。

  • 开源性
    开源不是开放编译器的源代码,而是写了一个软件, 然后把这个软件的源代码发布到网上, 让大家都可以学习,改进,就是开源。要符合一定的规范,比如GPL等(要符合开源的规范,GPL是一种开源规范)。
    java开源的历史过程
    2006年11月13日,Sun Microsystems正式宣布Java开源,并希望此举能够让社区帮助进行安全分析、bug报告、增强性能、了解偏僻个案等。不过,十年过去之后,对于Java开源的争议依旧存在。批评者认为,Java并没有像官方说的那样完全开源,其实只开放了SDK,而Java SE和Java EE TCKs仍然是闭源的。对于Java的开源身世,最初IBM呼吁将Java捐给Apache 软件基金会,使用Apache许可证分发,但Sun最终决定在GPL许可证下开源Java。GPL许可证要求衍生版本需要公开分发。Gosling称这能让Java更好的适应开源社区。Sun在2010年被甲骨文收购,Java也落到了甲骨文手中,由甲骨文主导Java的演化。
    在2006年11月13日的JavaOne大会上,Sun公司宣布最终会将Java开源,并在随后的一年多时间内,陆续将JDK的各个部分在GPL v2(GNU General Public License v2)协议下公开了源码,并建立了OpenJDK组织对这些源码进行独立管理。除了极少量的产权代码(Encumbered Code,这部分代码大多是Sun本身也无权限进行开源处理的)外,OpenJDK几乎包括了Sun JDK的全部代码,OpenJDK的质量主管曾经表示,在JDK 1.7中,Sun JDK和OpenJDK除了代码文件头的版权注释之外,代码基本上完全一样,所以OpenJDK 7与Sun JDK 1.7本质上就是同一套代码库开发的产品。

2.4 什么是跨平台性?

在这里平台指的计算机的安装的操作系统

通过Java语言编写的应用程序在不同的系统平台上都可以运行,那原理是什么?

我们所写的JAVA程序是".java"为后缀的源文件,但这些文件计算机无法直接执行,需要先进行编译环节,通过编译变为以".class"为后缀的字节码文件,这个字节码文件交由JVM(JAVA虚拟机)来运行.

那我们只要在需要运行java应用程序的OS(操作系统)上,安装一个JVM,由JVM来负责Java程序在该系统中的运行即可。不同的OS(操作系统)都有与之对应的JVM,所以只需要写一个Java程序,就可以在多个不同的操作系统上执行。这样就实现了Java程序的跨平台性。也称为Java具有良好的可移植性。

JVM跨平台
JVM

	通俗的说,JVM就像一个翻译机器人。把Java语言编译后的.class文件翻译成系统能读懂的机器码,按照每个程序员的想表达的意思,翻译成系统能懂的一系列指令,让系统实现程序员想要表达的功能。

当然这个翻译机器人并不是一对一翻译,那这样就太low了,JVM针对很多主流平台有着不同的解释器,意思就是JVM可以将Java语言通过各种不同的解释器翻译成各个平台(windows、linux等)能读懂的语言。

所以这也让Java程序有了跨平台性,Java开发程序员只需要通过Java的语法编写Java程序,剩下的就是在各个平台上下载安装特定的JRE或者JDK就好了。

2.5 Java的JVM

JVM是Java Virtual Machine(Java虚拟机)的缩写。

      通俗的来讲虚拟机就是编写的一个软件,用来模拟真实计算机的功能.

虚拟机(一个应用软件,模拟计算机的功能)是一种抽象化的计算机,通过在实际的计算机上仿真模拟各种计算机功能来实现的。Java虚拟机有自己完善的硬体架构,如处理器、堆栈、寄存器等,还具有相应的指令系统。Java虚拟机屏蔽了与具体操作系统平台相关的信息,使得Java程序只需生成在Java虚拟机上运行的目标代码(字节码就是class文件),就可以在多种平台上不加修改地运行。

简单来说JVM是用来解析和运行Java程序的。

小结:

jvm: java虚拟机的,用途 就是用来运行class文件的(程序).

jvm: java 虚拟机, 模拟了真实计算机的功能,通过java虚拟机来屏蔽不同操作系统计算机的差别.

    目的实现: class文件只需编译一次,可以到处运行了.

比如: A.java----->编译: A.class文件----->借助于: jvm虚拟机运行程序------>计算机

以下几种说明,其实都是一个意思

比如: java语言与平台无关

比如: java语言具有可移植

比如: java语言能够跨平台

比如: java语言编译一次,到处运行

Java语言的一个非常重要的特点就是与平台的无关性。而使用Java虚拟机是实现这一特点的关键。一般的高级语言如果要在不同的平台上运行,至少需要编译成不同的目标代码。而引入Java语言虚拟机后,Java语言在不同平台上运行时不需要重新编译。Java语言使用Java虚拟机屏蔽了与具体平台相关的信息,使得Java语言编译程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。Java虚拟机在执行字节码时,把字节码解释成具体平台上的机器指令执行。这就是Java的能够“一次编译,到处运行”的原因。

总结:

java的跨平台:

  1. 平台: 指的安装不同操作系统的计算机
  2. 跨平台: 指的java语言编写的程序可以在任意的计算机运行.

java的虚拟机

虚拟机: 指的用来模拟真实计算机功能的软件, 把这类软件称之为虚拟机.

java虚拟机:  通俗的来讲,java虚拟机就是一台java语言的电脑.

java虚拟机:  用途就是用来运行class文件, 主要是为了屏蔽不同操作系统.

			          java虚拟机看成一台java翻译器.

比如: A.java------>编译: A.class (机器语言文件)-------->java虚拟机(翻译器)----->计算机

    1.  A.class (机器语言文件)-------->java虚拟机(翻译器)----->安装了windows操作系统的计算机
    2.  A.class (机器语言文件)-------->java虚拟机(翻译器)----->安装了mac操作系统的计算机

举个例子:

    中国人 说中国话-----------------> 翻译(韩语翻译)------------------------------->韩国

     中国人 说中国话-----------------> 翻译(西班牙翻译)------------------------------->西班牙

2.6 java能做什么? 就业方向有那些? java程序员工资高吗?

java就业方向

	Java这门语言之所以有优势,也在于它的应用范围十分广泛,房产、医疗、银行、汽车、金融、保险、物流这些行业的公司有软件开发和设计的需求存在,Java就可以展其所长。Java除了一般的编程,还可以开发游戏、进行桌面设计、JavaWeb网站项目开发,可以说Java的就业前景十分乐观,也比较直观。只要有着一定基础的Java程序员不断地跟紧行业里的前沿技术,努力丰富、提高自身的技术,就业是不成问题的。

在今后的5到10年,各大企业都亟需全面型的软件技术人才,Java高级软件工程师在国际高端的计算机领域都是非常受到重视的。据有关数据表明,Java工程师在所有的程序员中,占比20%-30%,这门语言在行业里的影响趋势显而易见。

Java工资待遇怎么样?

根据2022年3月份全国Java工程师的薪资待遇统计反馈,Java程序员的平均工资是16.6K/月,其中北京平均19.8K,上海平均20.3K,深圳平均18.8K,杭州平均16.6K,广州平均16.7K,成都平均14.9K。在全国范围内,平均月薪拿到10-15K的占比最高,达到了24.6%。

总而论之,只要Java程序员的自身技术过硬,就业前景将十分宽广,薪资也非常可观。大数据时代已经来临,Java的需求势必掀起一波高峰,你还在犹豫吗?

2.7 Java都需要学习那些知识和技术,才能找到好工作?

转行的需要具备什么样的技术才能找到一份工作?

=javaSE基础+ javaWeb+SSM+大型微服务

目前IT行业的发展蒸蒸日上, Java 开发行业做为IT行业中的一类更是前景无限。所以很多人想转行做Java开发。那么现在Java就业如何?哪些技术是必须掌握的?

想要转行找到一份不错的Java开发工作,首先需要掌握一定的Java技术。那么零基础想成为一名合格的Java开发工程师都有哪些技术是必须掌握的呢?零基础开始学习Java开发主要需要学习四个方面的内容,分别为: JavaEE 基础、JavaWeb开发、Java高级框架、大型 微服务 分布式项目。

JaSE基础主要涉及: Java基础语法、面向对象、核心类库、集合、异常、IO、线程、JDK新特性等知识点;

JavaWeb开发主要涉及: 前端技术、数据库、JAVA数据库操作、软件服务器及服务器相关技术、动态网页 、AJAX等知识点;

Java高级框架主要涉及: SpringMVC、MyBatis、Spring 、MySQL高级、Linux&Redis& Nginx 、Maven等知识点;

大型微服务分布式项目主要涉及: SpringBoot、 SpringCloud 、Git、Dubbo、Zookeeper、AngularJS、Spring Security、BCrypt加密、FastDFS 、Seata分布式事务处理、Redis Cluster、 Solr 、SolrCloud、Freemarker、JMS、短信发送平台、SSO解决方案、CORS、Twitter的Snowflake、SpringTask、 Maven Profile、MongoDB简介、MyCat、Docker、Jenkins等知识点。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值