java基础(1)

=======================================================================

张贺,多年互联网行业工作经验,担任过网络工程师、系统集成工程师、LINUX系统运维工程师

笔者微信:zhanghe15069028807,现居济南历下区

=======================================================================

基础知识

编程语言分类

系统级:C、C++、go

应用级:c#、java、python、perl、ruby、php

系统级编译语言着眼于高性能,比如系统的开发、驱动程序的开发、数据库的开发。

应用级编程语言的着眼点并不是高性能,而是便捷性,比如各种网站。

动态网站

动态网站的研发是应用级编程语言的重点之一。早期的动态网站与现在的动态网站不同,现在的动态网站客户端看的页面是服务端执行过后的结果,基本不需要客户端参与,而早期的动态网站是需要客户端参与的,即使像现在一些网络安全设备厂商的WEB界面还是需要客户端安装相关程序,服务端将源码发送给客户端 ,让客户端自己安装环境执行,比如浪潮的光纤交换机,有的客户是不太会安装的,这种方式叫客户端动态,非常的不方便,我自己是感同深受,而且很不安全,假如有服务端将木马程序传到客户端,客户端还会照样执行。

现在的动态网站是服务端动态,不需要客户端参与,只要能识别超文件传输协议即可,客户端收到的结果是服务端执行后的结果,动态网站执行完成之后,通过CGI技术给负载均衡,负载均衡再通过超文本传输协议发送给客户端,这就方式就是服务器动态。假如你的网站是php语言,那么动态网站的解释器就应该用php-fpm;如果是java开发的,那就用tomcat,nginx与tomcat交互可以通过CGI,也可以通过http协议,因为tomcat本身也支持http所以能通过http协议与其交互,但php-fpm就不行了,php-fpm只能通过CGI与其交互,除非你用的是apache,apache与php交互就可以通过模块的方式,非常高效,只不过现在apache的应用范围比较小了。

编程语言分为面向对象和面对流程的,程序由指令和数据组成,面向对象以数据为中心,面对流程以指令为中心。JAVA是面对对象的。

JAVA相关

JAVA历史

  1. 1991--1995年,当时SUN公司决定要开一个新的项目,是有关于电视机顶盒的,需要一门比较超前独特的语言,这个项目的研发团体因为很多人喜欢喝爪哇岛的咖啡,所以就给这门编程语言起名为JAVA。值得一提的是早在明朝时间郑和下西洋时就曾路过爪哇岛,当时爪哇岛这个地方正在打仗,误杀了郑和的手下,郑和下西洋是带着几万人马去的,把爪哇岛灭五六回完全没有问题,郑和并没有大开杀戒,只是把当地的国王给抓走到咱们中国的监狱。
  2. 1996年,早期的JAVA是客户端动态,并不安全,所以并没有引起大范围的广泛关注,直接动态网站技术,CGI协议的流行,JAVA也能实现服务器动态,慢慢开始受人关注并使用,SUN 公司这时推出了JAVA 1.0版本,这一版本已经可以正常投入到开发环境当中,这个版本起名为JDK(java devopment kit 开发工具箱),JDK里面包含有JVM(JAVA 虚拟机),applet(JAVA响应程序)AWT(抽象窗口工具集),这一款JAVA虚拟机因为是纯解释型的,性能比较低。同年四月,各大主流操作系统提供商声明要将JVM嵌入到系统当中,JAVA开始流行。
  3. 1997年,SUN公司发布JDK1.1,新加jar文档格式,JDBC、javabeans
  4. 1998年,SUN公司发布JDK1.2,拆分为三个方向:J2SE(标准版)、J2EE(企业版)、J2ME(移动设备版,安卓不是J2ME);代表性技术有EJB、java plug-in、swing,JIT(jast in time即时编译器),JTI实现了一边编译一边运行代码,正式脱离了解释型编译器的队伍。
  5. 2000年,JDK1.3发布,引入了hotspot技术,jvm虚拟机的效率大大提升。
  6. 2002年,JDK1.4发布,JAVA开始趋于成熟。
  7. 2006年,SUN遵循GPL规则,开源JAVA当中的绝大多数代码(hostspot也就是jvm没有开源),建立openjdk组织用于维护jdk。注意,SUN公司仍然有自己的JDK,开源的是开源的,自己的是自己的,虽然代码差不多,但是不同的团队在维护。
  8. 2009年4月,oracle以74亿美元收购SUN公司

oracle把sun收购后,开始向使用sun公司技术的公司收费,开始一场旷日持久的官司,所说连法官为了能够更好的处理好这场官司,毅然自学了JAVA程序,光荣的成为了资深AVA程序员。

java编程语言的特性:面对对象、多线程、结构化错误处理,垃圾收集,动态链接、动态扩展

JAVA体系结构

java体系结构分类,相互独立,又相互联系:

  1. java编程语言
  2. java class文件格式
  3. java API(开发接口)
  4. java vm(虚拟机)

JAVA程序的开发流程:

  1. 先用编程语言写出源代码,写源代码不可能实现所有的功能,通常需要已经写好的开发接口(API)
  2. 编译成java的类文件,也就是class文件格式,这种格式并不是真正意义上二进制的,被称为字节码,类二进制,可以在jvm上运行。
  3. jvm可以加载方面的内容,一方面是类文件、另一个方面是API,调用api的原因是因为所有的代码功能不可能全都由程序员完成,而是会调用一部分已经封装好的API功能,在JVM执行时才会被真正的调用。
  4. JVM加载的API其实是个翻译器,API实际上来自系统库,而系统库又是OS的接口,JVM加载完两方面的内容最终交给执行引擎执行,执行引擎是C代码编写的,也就是说JAVA是终还是通过C编写的执行引擎变成了二进制流提交给了内核。

任何系统只要安装上相对应的jvm,java程序就可以跑起来了,jvm针对不同的系统格式是不同的,但是向上提供的接口都是一样的,这也是一次编译,到处运行的原因。

jvm细节

jvm的核心组成部分:

  • class loader

  • 执行引擎

如上一节所述,当执行引擎执行代码时,会从内存里面开辟出一段空间,这段内存区,大体由以下几部分组成,这几部分有的线程之间共享的,有的是独占的:

  • 方法区,共享的,永久的,存放被虚拟机加载的类信息、常量静态变量

  • 堆是java预留的一段空间,用来存放类执行之后生成的对象,我们知道JAVA不同于C,C需要程序员自己计算内存空间,而JAVA是“垃圾回收器”统一回收,回收的主要内容其实就是堆占用的空间,因为堆空间里面的对象可能调用一次就以后再也不用了,堆空间是最占内存的,而且堆是共享的,回收的时候是分代回收。

  • PC寄存器也就程序计数器,程序从CPU被“踢下来”之后,要有个地方记得代码执行到什么地方了,这就是PC寄存器的作用了。

  • 每个线程都有自己的栈(独占),线程被创建的时候就会紧跟着创建一个栈,用来存储线程的局部变量表信息。

  • 本地方法栈:不同的系统系统提供的方法也不一样。

总体概览

我们上面说过,JAVA有三个分支:SE、EE、ME,下面是SE容器包括的技术:

JRE(运行时环境)=jvm+API依赖的类文件,如果你仅想运行JAVA程序,只安装JRE,就可以了。

JDK=JRE+JAVA语言+开发工具+API

通过上图,我们发现jvm有两种模式:客户端模式和服务端模式

JAVA 2 EE 包括以下技术:

  • servlet(重点)
  • jsp(重点)
  • EJB(enterprise javabeans):java相关的诸多高级功能的实现,如RMI(remote method invocation),对象/关系映射,跨越多个数据源的分布式事物等。
  • JMS(java message service):高性能异步消息服务,实现JAVA EE应用程序与非JAVA程序的透明通信。
  • JMX(java management extensions):在程序运行时对其进行交互式监控和管理的机制
  • JIA(java transaction API):允许应用程序在自身的一个或多个组件中平滑处理错误的机制。
  • javamail:通过工业标准的POP/SMTP/IMAP协议发送和接收邮件的机制。

JAVA2 EE包括的技术

servlet ,通常硬编码的方式生成网页,java与php不同,php代理可以嵌入在html当中,但是java早期不行,想要输出还得通过java程序打印,这对程序员的要求很高,但当时就是通过servlet这么实现的就是不太方便。

后来,出现jsp,jsp就是仿照php的那种机制,可以将可以asp代码写到html代码里面,但实际上jsp最终还是得翻译成servlet,不过不用用户进行参与了,jsp自动完成,jsp可以理解成为servlet的前端,减轻了程序员的工作量。

jdk可以提供java se,但想要布置一个jsp网站,仅有java se为够 ,因为没有jsp,jsp在java ee里面,所以最好要安装java ee。

servlet+jdk=servelet contaner

jdk+servlet+jsp =web contaier

sun公司把jdk提供了,jdk和ser认证提供呢? 有一些商业公司将三者结构起来提供:

商业产品:

  1. websphpere
  2. weblogic
  3. oc4j
  4. classfish
  5. jonAS
  6. JBOSS

开源实现:

  • tomcat

  • jetty

  • resin

posted @ 2020-03-06 22:08  张贺贺呀  阅读(211)  评论(0编辑  收藏  举报