Java语言概述
Java语言概述
Java简介
Java发展简史
Java是由Sun公司于1995年5月推出的)ava程序设计语言和)ava平台的总称,Java语言是可以编写跨平台,分布式应用软件的面向对象的程序设计语言。
1998年12月Sun公司发布了Java历史上最重要的一个JDK版本:JDK1.2,JSP/Servlet等规范,并且将Java一分为三。 J2ME:主要用于移动设备和信息家电等设备的编程 J2SE:Java技术的核心和技术 J2EE:Java技术中应用最广泛的部分
Java程序运行的机制
C语言在编写完程序后要经过编译以后才能运行,Java也是如此,Java程序要想运行,也需要经过编译的阶段,但是和C语言不同的是Java编译过后,并不会生成特定的平台机器码,而是一种与平台无关的字节码(.class件),然而这种文件并不能直接执行,而是运行在Java虚拟机中,由Java虚拟机来解释执行。也就是说如果要运行一个Java程序,必须经历以下3个阶段。
其中Java源代码编译成字节码的过程由Java编译器完成,生成的是平台无关的字节码。这些字节码并不依赖于特定的平台,只面向Java虚拟机(Java Virtual Mechine,简称JVM,不同平台的JVM是不同的,但是他们都遵循共同的JVM规范。这也是Java跨平台的核心部分,只要为对应平台实现了对应的虚拟机,编译后的字节码就可以在不同的平台上运行。总结起来Java跨平台实现的核心原理包括以下两点:
1.Java源代码在运行之前会先根据JVM规范生成平台无关的字节码文件,也就是class文件,字节码文件不依赖于任何平台。
2.Java为不同平台实现了对应的虚拟机,JVM在加载字节码文件后由WM生成对应平台的计算机指令。
Java语言的特点
1.简单性:Java在开发时借鉴了C语言的许多语法,并目屏弃了C中不好的设计,如头文件、指针、结构体、多继到等等,并目新增了垃极回收机制使得程序员无需关注内存的分配与释放,把更多的精力放在业务本身。
2.面向对象:面向对象是一种编程思想,相对于面向过程来说,具备一定的优越性,简单来说这种思想将重点放在数据和对象的接口上。打个比方,一个建筑师关注的应该是建筑本身,而不是这栋建筑使用的是什么工具和流程制造的。
3.分布式:Java提供了JSP/Servleti规范以后,使得Java应用程序能够通过URL打开和访问网络上的对象。
4.安全性:由于Java具有分布式的特点,Java在安全方面投入了很大的精力,够防范各种攻击。
5.多线程:随着互联网的发展,开发者越来越关注并发性,例如天猫双十一活动每秒的请求量数以百万计算,这不但考验服务器硬件,也考验看服务器编程语言的性能,Java提供的多线程以及并发偏程,很大程度上解决了局并发存在的问题。
6.可移植:正是因为Java提出的跨平台策略使得Java的可移植性具备了操作空间,我们知道Java对于不同的平台开发了对应的JVM,而程序运行前由Java编译器将源代码编译成了平台无关的字节码文件,因此不管是在什么平台开发的源程序,编译后都可以运行在不同平台上的JVM中。
Java下载与安装
JDK下载地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html
Java安装目录简介
·bin:该目录下主要存放DK的各种工具命令.
·conf:该目录下主要存放JDK的相关配置文件。
·include:该目录下主要存放了一些平台的头文件,
·jmods:该目录下主要存放了JDK的各种模块。
·Iega:该目录下主要存放了JDK各模块的授权文档。
·lib:该目录下主要存放了JDK工具的一些补充jar包和源代码。
Java环境变量配置
开发一个应用需要经历两个步骤:
1.编写源代码
2.将编写好的源代码进行编译,编译成平台无关的class文件这两个命令对应的就是JDK安装目录中bin目录下的两个应用程序:java.exe,javac.exe,现在如果要去开发一个应用程序,并使得其能正常运行,我们还需要配置环境变量。
配置环境变量的步骤如下:
1.配置JAVA_HOME
在系统环境变量中新建变量名:JAVA_HOME(不区分大小写),变量值便是jDK的安装路径
2.配置Path
和配置JAVA_HOME一样,新建环境变量PTAH,变量值是JDK安装目录下得bin目录。如果系统变量中已经存在PATH,不要删除PATH中的值,在已有内容的后面添加“;”继续配置Java即可.
3.配置CLASSPATH
在配置好JAVA_HOME和PATH以后,继续配置CLASSPATH,变量值为JDK安装路面下得lib目录。需要注意的是,从JDK 1.5以后,CLASSPATH是可以不配置的。
HelloWorld
记事本编写HelloWorld
- 在D盘根目录新建一个记事本,命名为hello
- 在记事本输入以下代码
1 | class Hello{ |
- 保存后关闭文件,并修改文件的拓展名为.java
- 打开cmd,进入D盘,hello所在位置
- 输入命令对源文件进行编译:javac Hello.java
- 输入命令运行Java:java Hello
注意:此处的命令并不区分大小写,当使用javac编译完程序后使用java命令运行程序,此时我们只写文件名即可,并不需要写扩展名按照以上步骤操作以后你会看到窗口中打印了Hello World,自此,我们已经开发了自己的第一个Java程序,下面我们对上述代码进行简单的解释:
1.class:是java中的关键字,用于声明一个类,Hello表示是类名
2.public static是修饰符
3.void表示方法没有返回值
4.main表示方法名,main方法也是程序的入口
5.System.out.println表示在控制台打印,其中System首字母大写
Java源文件命名规则
Java源文件的命名需要遵守以下规则:
1.文件的扩展名或后缀名必须是java
2.文件名必须和类中pulic修饰的类名称相同
对Java的认识
Java是一门面向对象的编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程 。Java具有简单性、面向对象、分布式、健壮性、安全性、平台独立与可移植性、多线程、动态性等特点 。Java可以编写桌面应用程序、Web应用程序、分布式系统和嵌入式系统应用程序等。
Java的平台无关性是怎么实现的
1.什么是平台无关性
平台无关性就是一种语言在计算机上的运行不受平台的约束,一次编译,到处执行(Write Once ,Run Anywhere)。
也就是说,用Java创建的可执行二进制程序,能够不加改变的运行于多个平台。
平台无关性好处
作为一门平台无关性语言,无论是在自身发展,还是对开发者的友好度上都是很突出的。
因为其平台无关性,所以Java程序可以运行在各种各样的设备上,尤其是一些嵌入式设备,如打印机、扫描仪、传真机等。随着5G时代的来临,也会有更多的终端接入网络,相信平台无关性的Java也能做出一些贡献。
对于Java开发者来说,Java减少了开发和部署到多个平台的成本和时间。真正的做到一次编译,到处运行。2.平台无关性的实现
对于Java的平台无关性的支持,就像对安全性和网络移动性的支持一样,是分布在整个Java体系结构中的。其中扮演者重要的角色的有Java语言规范、Class文件、Java虚拟机(JVM)等。
Java到底是是如何运行起来的
在计算机世界中,计算机只认识0和1,所以,真正被计算机执行的其实是由0和1组成的二进制文件。日常开发使用的C、C++、Java、Python等都属于高级语言,而非二进制语言。所以,想要让计算机认识我们写出来的Java代码,那就需要把他”翻译”成由0和1组成的二进制文件。这个过程就叫做编译。负责这一过程的处理的工具叫做编译器。
在Java平台中,想要把Java文件,编译成二进制文件,需要经过两步编译,前端编译和后端编译:
前端编译主要指与源语言有关但与目标机无关的部分。Java中,我们所熟知的javac的编译就是前端编译。除了这种以外,我们使用的很多IDE,如eclipse,idea等,都内置了前端编译器。主要功能就是把.java代码转换成.class代码。这里提到的.class代码,其实就是Class文件。
后端编译主要是将中间代码再翻译成机器语言。Java中,这一步骤就是Java虚拟机来执行的。
Java虚拟机
所谓平台无关性,就是说要能够做到可以在多个平台上都能无缝对接。但是,对于不同的平台,硬件和操作系统肯定都是不一样的。
对于不同的硬件和操作系统,最主要的区别就是指令不同。比如同样执行a+b,A操作系统对应的二进制指令可能是10001000,而B操作系统对应的指令可能是11101110。那么,想要做到跨平台,最重要的就是可以根据对应的硬件和操作系统生成对应的二进制指令。
而这一工作,主要由我们的Java虚拟机完成。虽然Java语言是平台无关的,但是JVM确实平台有关的,不同的操作系统上面要安装对应的JVM。Java之所以可以做到跨平台,是因为Java虚拟机充当了桥梁。他扮演了运行时Java程序与其下的硬件和操作系统之间的缓冲角色。
字节码
各种不同的平台的虚拟机都使用统一的程序存储格式——字节码(ByteCode)是构成平台无关性的另一个基石。Java虚拟机只与由自己码组成的Class文件进行交互。
我们说Java语言可以Write Once ,Run Anywhere。这里的Write其实指的就是生成Class文件的过程。
因为Java Class文件可以在任何平台创建,也可以被任何平台的Java虚拟机装载并执行,所以才有了Java的平台无关性。
Java语言规范
已经有了统一的Class文件,以及可以在不同平台上将Class文件翻译成对应的二进制文件的Java虚拟机,Java就可以彻底实现跨平台了吗?
其实并不是的,Java语言在跨平台方面也是做了一些努力的,这些努力被定义在Java语言规范中。
比如,Java中基本数据类型的值域和行为都是由其自己定义的。而C/C++中,基本数据类型是由它的占位宽度决定的,占位宽度则是由所在平台决定的。所以,在不同的平台中,对于同一个C++程序的编译结果会出现不同的行为。
举一个简单的例子,对于int类型,在Java中,int占4个字节,这是固定的。
但是在C++中却不是固定的了。在16位计算机上,int类型的长度可能为两字节;在32位计算机上,可能为4字节;当64位计算机流行起来后,int类型的长度可能会达到8字节。
通过保证基本数据类型在所有平台的一致性,Java语言为平台无关性提供强了有力的支持。
Java语言规范
通过规定Java语言中基本数据类型的取值范围和行为
Class文件
所有Java文件要编译成统一的Class文件
Java虚拟机
通过Java虚拟机将Class文件转成对应平台的二进制文件等
Java的平台无关性是建立在Java虚拟机的平台有关性基础之上的,是因为Java虚拟机屏蔽了底层操作系统和硬件的差异。