龙空技术网

Java基础知识

Java码农AI 50

前言:

当前朋友们对“java语言是面向什么的语言”大致比较讲究,你们都想要分析一些“java语言是面向什么的语言”的相关文章。那么小编在网上网罗了一些对于“java语言是面向什么的语言””的相关内容,希望朋友们能喜欢,同学们快快来了解一下吧!

1.基础知识

Java 是由 Sun 公司(1982 年成立)James Gosling 领导的 Green 项目小组于 1991 年共同研发的一种新语言,新语言最初是以他办公室窗外的一棵老橡树命名的。在 1995 年,注册登记时发现 Oka 已被占用,遂更名为 Java,Java 语言正式诞生。后来 Sun 公司被 Oracle(甲骨文)公司收购,Java 也随之成为 Oracle 公司的产品。

1.1Java 体系JavaSE(J2SE)(Java 2 Platform Standard Edition,java 平台标准版)JavaEE(J2EE)(Java 2 Platform,Enterprise Edition,java 平台企业版)JavaME(J2ME)(Java 2 Platform Micro Edition,java 平台微型版)

2005 年 6 月 JavaOne 大会召开,Sun 公司公开 Java SE6。此时 Java 各种版本已经更名,取消其中的数字 "2",J2EE 更名为 Java EE,J2SE 更名为 Java SE,J2ME 更名为 Java ME。

1.2Java 概念及特点1.2.1 概念

Java 是一门面向对象的高级编程语言,不仅吸收了 C++的各种优点,比如继承了 C++面向对象的技术核心,摒弃了 C++难以理解的多继承、指针等概念,同时也增加了垃圾回收机制,释放掉不被使用的内存空间,解决了管理内存空间的烦恼。

因此 Java 语言具有功能强大和简单易用两个特征。Java 语言作为静态面向对象编程语言的代表,极好地 实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程 。

1.2.2 语言特点

Java 是一种分布式的面向对象语言,具有面向对象、平台无关性、简单性、解释执行、多线程、安全性等很多特点。

1. 面向对象

Java 是一种面向对象的语言,它对对象中的类、对象、继承、封装、多态、接口、包等均有很好的支持。为了简单起见,Java 只支持类之间的单继承,但是可以使用接口来实现多继承。使用 Java 语言开发程序,需要采用面向对象的思想设计程序和编写代码。

2. 平台无关性

平台无关性的具体表现在Java 是"一次编写,到处运行(Write Once,Run any Where)"的语言, 因此采用 Java 编写的程序具有很好的可移植性,而保证这一点的正是 Java 的虚拟机机制。在引入虚拟机之后,Java 语言在不同的平台上运行不需要重新编译。Java 语言使用 Java 虚拟机机制屏蔽了具体平台的相关信息,使得 Java 语言编译的程序只需生成虚拟机上的目标代码,就可以在多种平台上不加修改地运行。

3. 简单性

Java 语言的语法与 C 语言和 C++语言很相近,使得很多程序员学起来很容易。对 Java 来说,它舍弃了很多 C++中难以理解的特性,如操作符的重载和多继承等,而且 Java 语言不使用指针,加入了垃圾回收机制,解决了程序员需要管理内存的问题,使编程变得更加简单。

4. 解释执行

Java 程序在 Java 平台运行时会被编译成字节码文件,然后在有 Java 环境的操作系统上运行。运行文件时,解释器对这些字节码进行解释执行,执行过程中需要加入的类在连接阶段被载入到运行环境中。

5. 多线程

Java 语言是多线程的,这也是 Java 语言的一大特性,它必须由 Thread 类和它的子类来创建。Java 支持多个线程同时执行,并提供多线程之间的同步机制。任何一个线程都有自己的 run()方法,要执行的方法就写在 run()方法体内。

6. 分布式

Java 语言支持 Internet 应用的开发,在 Java 的基本应用编程接口中就有一个网络应用编程接口,它提供了网络应用编程的类库,包括 URL、URLConnection、Socket 等。Java 的 RIM 机制也是开发分布式应用的重要手段。

7. 健壮性

Java 的强类型机制、异常处理、垃圾回收机制等都是 Java 健壮性的重要保证。对指针的丢弃是 Java 的一大进步。另外,Java 的异常机制也是健壮性的一大体现。

8. 高性能

Java 的高性能主要是相对其他高级脚本语言来说的,随着 JIT(Just in Time)的发展,Java 的运行速度也越来越高。

9. 安全性

Java 通常被用在网络环境中,为此 Java 提供了一个安全机制以防止恶意代码的攻击。除了 Java 语言具有许多的安全特性以外,Java 还对通过网络下载的类增加一个安全防范机制,分配不同的名字空间以防替代本地的同名类,并包含安全管理机制。

1.3Java 发展史1995 年 5 月 23 日,Java 语言诞生1996 年 1 月,第一个 JDK-JDK1.0 诞生1996 年 4 月,10 个最主要的操作系统供应商申明将在其产品中嵌入 JAVA 技术1996 年 9 月,约 8.3 万个网页应用了 JAVA 技术来制作1997 年 2 月 18 日,JDK1.1 发布1997 年 4 月 2 日,JavaOne 会议召开,参与者逾一万人,创当时全球同类会议规模之纪录1997 年 9 月,JavaDeveloperConnection 社区成员超过十万1998 年 2 月,JDK1.1 被下载超过 2,000,000 次1998 年 12 月 8 日,JAVA2 企业平台 J2EE 发布1999 年 6 月,SUN 公司发布 Java 的三个版本:标准版(JavaSE, 以前是 J2SE)、企业版(JavaEE 以前是 J2EE)和微型版(JavaME,以前是 J2ME)2000 年 5 月 8 日,JDK1.3 发布2000 年 5 月 29 日,JDK1.4 发布2001 年 6 月 5 日,NOKIA 宣布,到 2003 年将出售 1 亿部支持 Java 的手机2001 年 9 月 24 日,J2EE1.3 发布2002 年 2 月 26 日,J2SE1.4 发布,自此 Java 的计算能力有了大幅提升2004 年 9 月 30 日 18:00PM,J2SE1.5 发布,成为 Java 语言发展史上的又一里程碑。为了表示该版本的重要性,J2SE1.5 更名为 Java SE 5.02005 年 6 月,JavaOne 大会召开,SUN 公司公开 Java SE 6。此时,Java 的各种版本已经更名,以取消其中的数字 "2":J2EE 更名为 Java EE,J2SE 更名为 Java SE,J2ME 更名为 Java ME2006 年 12 月,SUN 公司发布 JRE6.02009 年 04 月 20 日,甲骨文 74 亿美元收购 Sun,取得 Java 的版权2010 年 11 月,由于甲骨文对于 Java 社区的不友善,因此 Apache 扬言将退出 JCP。2011 年 7 月 28 日,甲骨文发布 Java7.0 的正式版。2014 年 3 月 18 日,Oracle 公司发表 Java SE 8。2017 年 9 月 21 日,Oracle 公司发表 Java SE 92018 年 3 月 21 日,Oracle 公司发表 Java SE 102018 年 9 月 25 日,Java SE 11 发布2019 年 3 月 20 日,Java SE 12 发布1.4Java 环境配置

JAVA_HOME=%安装路径%\Java\jdk // jdk 的安装路径,要根据自己的实际路径配置

path=%JAVA_HOME%\bin

CLASSPATH=.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar; //记得前面有个"."

注意:若使用 1.5 以上版本的 JDK,不用设置 CLASSPATH 环境变量,也可以正常编译和运行 Java 程序。

测试 JDK 是否安装成功:

1、"开始"->"运行",键入"cmd";

2、键入命令: java -version、java、javac 几个命令,可以正常显示,说明环境变量配置成功;

Java程序运行过程:Java 源代码--->编译器--->jvm 可执行的 Java 字节码(.class)--->jvm--->jvm 中解释器--->机器可执行的二进制机器码---->程序运行。(class文件用十六进制编辑器打开前4个字节CAFEBABE就是magic word,JVM识别.class文件的魔数。所有java class文件都以这4个字节开头的。咖啡宝贝~)

字节码:Java 源代码经过虚拟机编译器编译后产生的文件(即扩展为.class 的文件),它不面向任何特定的处理器,只面向虚拟机。

采用字节码的好处:Java 语言通过字节码的方式,在一定程度上解决了传统解释型语言执行效率低的问题,同时又保留了解释型语言可移植的特点。所以 Java 程序运行时比较高效,而且由于字节码并不专对一种特定的机器,因此Java 程序无须重新编译便可在多种不同的计算机上运行。

字节序:指多字节数据在计算机内存中存储或网络传输时个字节的存储顺序。有小端和大端两组方式。

小端:低位字节存放在内存的低地址端,高位字节存放在内存的高地址端。大端:高位字节存放在内存的低地址端,低位字节存放在内存的高地址端。

Java 语言的字节序是大端。

1.5JDK、JRE、JVM、JIT、JNI

JDK用于开发,JRE用于运行Java程序;只运行,JRE 即可,要编译就要 JDK。

1、JDK(Java Development Kit),Java 标准的开发包,提供了编译、运行 Java 程序所需要的各种工具和资源,包括了 Java 编译器(Javac)、Java 运行时环境、以及常用的 Java 类库等。

2、JRE(Java Runtime Environment),Java 运行时环境,用于解释执行 Java 的字节码文件。普通用户只需要安装 JRE 来运行 Java 程序即可,而作为一名程序员必须安装 JDK,来编译、调试程序。

3、JVM(Java Virtual Mechinal),Java 虚拟机,是 JRE 的一部分。它是整个 Java 实现跨平台的核心,负责解释执行字节码文件,是可运行 Java 字节码文件的虚拟计算机。所有平台上的 JVM 向编译器提供相同的接口,而编译器只需要面向虚拟机,生成虚拟机能识别的代码,然后由虚拟机来解释执行。

当使用 Java 编译器编译 Java 程序时,生成的是与平台无关的字节码,这些字节码只面向 JVM。也就是说 JVM 是运行 Java 字节码的虚拟机。不同平台的 JVM 是不同的,但是他们都提供了相同的接口。JVM 是 Java 程序跨平台的关键部分,只要为不同平台实现了相同的虚拟机,编译后的 Java 字节码就可以在该平台上运行。HotSpot VM 仅仅是是 JVM 规范的一种实现而已,还有 J9 VM、Zing VM、JRockit VM 等。

4、JIT(Java In Time):即 java 即时编译器,是 JVM 的一部分,属于内核部分。

5、JNI(Java Native Interface):Java 语言的本地编程接口,它提供了若干 API 使得 Java 可以与其它语言(如 C、C++)程序进行互相调用,来实现 Java 不便实现的功能或难以达到的效率。

1.6OracleJDK 和 OpenJDKOracleJDK 版本将每三年发布一次,而 OpenJDK 版本每三个月发布一次;OpenJDK 是一个参考模型且完全开源,而 OracleJDK 是 OpenJDK 的一个实现,并不是完全开源的;OracleJDK 比 OpenJDK 更稳定。OpenJDK 和 OracleJDK 的代码几乎相同,但 OracleJDK 有更多的类和一些错误修复。因此,如果您想开发企业/商业软件,我建议您选择 OracleJDK,因为它经过了彻底的测试和稳定。某些情况下,有些人提到在使用 OpenJDK 可能会遇到了许多应用程序崩溃的问题,但是,只需切换到 OracleJDK 就可以解决问题;在响应性和 JVM 性能方面,OracleJDK 与 OpenJDK 相比提供了更好的性能;OracleJDK 不会为即将发布的版本提供长期支持,用户每次都必须通过更新到最新版本获得支持来获取最新版本;OracleJDK 根据二进制代码许可协议获得许可,而 OpenJDK 根据 GPLv2 许可获得许可。1.7Java 与 C++区别Java 是纯粹的面向对象语言,所有的对象都继承自 java.lang.Object,C++为了兼容 C 即支持面向对象也支持面向过程。Java 通过虚拟机从而实现跨平台特性,但是 C++依赖于特定的平台。Java 没有指针,它的引用可以理解为安全指针,而 C++具有和 C 一样的指针。Java 支持自动垃圾回收,而 C++需要手动回收。Java 不支持多重继承,只能通过实现多个接口来达到相同目的,而 C++支持多重继承。Java 不支持操作符重载,虽然可以对两个 String 对象执行加法运算,但是这是语言内置支持的操作,不属于操作符重载,而 C++可以。Java 的 goto 是保留字,但是不可用,C++可以使用 goto。1.8Java设计原则开放-封闭原则(Open-Closed Principle,OCP):强调的是用抽象构建框架,用实现扩展细节。核心思想:面向抽象编程。依赖倒置原则(Dependence Inversion Principle,DIP):要求对抽象进行编程,不要对实现进行编程,高层(调用层)模块不应该依赖底层(被调用层)模块,二者都应该依赖其抽象。抽象不应该依赖细节;细节应该依赖抽象。核心思想:面向接口编程,不要面向实现编程。单一职责原则(Simple Responsibility Pinciple,SRP):一个类只负责一项职责。核心思想:Class/Interface/Method 只负责一项职责。接口隔离原则(Interface Segregation Principle,ISP):建立单一接口,不要建立庞大臃肿的接口,尽量细化接口,接口中的方法尽量少。核心思想:高内聚低耦合。迪米特法则(Law of Demeter,LOD):就是一个类对自己依赖的类知道的越少越好。也就是说,对于被依赖的类来说,无论逻辑多么复杂,都尽量地的将逻辑封装在类的内部,对外除了提供的public方法,不对外泄漏任何信息。核心思想:降低类之间的耦合度。里氏替换原则(Liskov Substitution Principle,LSP):子类可以扩展父类的功能,但不能改变父类原有功能,此原则只存在父类与子类之间,约束继承泛滥。核心思想:子类中不应该重写父类的方法。合成复用原则(Composite/Aggregate Reuse Principle,CARP)是指尽量使用对象组合(has-a)、聚合(contanis-a),而不是继承关系达到软件复用的目的。可以使系统更加灵活,降低类与类之间的耦合度,一个类的变化对其他类造成的影响相对较少。继承我们叫做白箱复用,相当于把所有的实现细节暴露给子类。组合/聚合也称之为黑箱复用,对类以外的对象是无法获取到实现细节的。核心思想:尽量使用聚合、组合的方式,而不是使用继承。

这7种设计原则是软件设计模式必须尽量遵循的原则,各种原则要求的侧重点不同:

开闭原则是总纲,它告诉我们要对扩展开放,对修改关闭。依赖倒置原则告诉我们要面向接口编程。单一职责原则告诉我们实现类要职责单一。接口隔离原则告诉我们在设计接口的时候要精简单一。迪米特法则告诉我们要降低耦合度。里氏替换原则告诉我们不要破坏继承体系。合成复用原则告诉我们要优先使用组合或者聚合关系复用,少用继承关系复用。

标签: #java语言是面向什么的语言 #java最全基础知识 #解释性语言的优势不包括下列哪项