Java基础系列之-初识Java

167 阅读12分钟
**一、计算机语言的发展史**
**机器语言--->汇编语言-->高级计算机语言**
机器语言:最初的计算机所使用的是由“0”和“1”组成的二进制数,二进制是计算机的语言的基础。计算机发明之初,计算机只能被少部分人使用,人 们需要用0、1组成的指令序列交由计算机执行,对于机器语言的使用与普及都是很令人头疼的问题。对于程序的移植能力几乎没有,从而时间成本,人力成本十分昂贵。但机器语言也不是没有优势,由于这种语言是直接对计算机硬件进行操作,所以在特定型号的计算机上面,运算效率也是很高的,机器语言的出 现对于未来的计算机语言发展起到了很好的推动作用,所以机器语言也是第一代计算机语言。
![](https://note.youdao.com/yws/public/resource/34425e37f9d92ce4eabc3b4e003e12dc/xmlnote/8E1414C5C7B94BE78F74EEA192EAC88A/10375)
汇编语言:汇编语言是在机器语言的基础上诞生的一门语言,用一些简洁的英文字母、符号串来替代一个特定的指令的二进制串,这也提高了语言的记忆性和识别性。对于程序的开发与维护起到了积极作用。汇编语言同样也是直接对硬件进行操作,这样依然局限了它的移植性。但是使用汇编语言针对计算机特定硬件而编制的汇编语言程序,对于计算机硬件的功能和特长的发挥已有了很大进步,它精炼而质量高,所以至今仍是一种常用的程序开发语言。
![](https://note.youdao.com/yws/public/resource/34425e37f9d92ce4eabc3b4e003e12dc/xmlnote/88499990C8304869A05677D58081BEDC/10369)
高级计算机语言:在与计算机的不断交流中,人们对计算机程序的移植性需求不断提高,此时急需要一种不依赖于特定型号的计算机的语言,用这种语言编写的程序能在在各种平台都正常运行。从最初的语言诞生至今,已经相继出现了几百种语言。高级语言的发展也从最初的结构化语言发展成为面向过程语言设计和面向对象语言设计。面向过程语言设计的代表有:C语言,Fortran,cobol,pascal,ada等等一系列语言,而面向对象语言设计的代表则为:java, c++,c#等。
对于面向过程的程序来说,执行顺序是流水线似的,在一个模块被执行完成前,人们不能干别的事,也无法动态地改变程序的执行方向,这恰恰与人们的日常处理事情的方式相矛盾。而对于面相对象的程序设计来说,很好的将事物象的部分抽取归类,各个累与模块之间能相互组合,完成特定的功能,同时又能重复使用。对使用者的技术要求也相对降低。
![](https://note.youdao.com/yws/public/resource/34425e37f9d92ce4eabc3b4e003e12dc/xmlnote/77FC1E7D132A442A8527CB7370F831EB/10383)
**二、java概述**
![](https://note.youdao.com/yws/public/resource/34425e37f9d92ce4eabc3b4e003e12dc/xmlnote/9F280C494DE14184889E5B0392607C03/10371)
詹姆斯·高斯林 (James Gosling)是一名软件专家,1955年5月19日出生于加拿大,Java编程语言的共同创始人之一,一般公认他为“Java之父”。
**1.JAVA为什么被发明创造出来?**
Java平台和语言最开始只是SUN公司在1990年12月开始研究的一个内部项目。SUN公司的一个叫做帕特里克·诺顿的工程师被自己开发的C和C语言编译器搞得焦头烂额,因为其中的API极其难用。帕特里克决定改用NeXT,同时他也获得了研究公司的一个叫做“Stealth 计划”的项目的机会。
“Stealth 计划”后来改名为“Green计划”,JGosling(詹姆斯·高斯林)和麦克·舍林丹也加入了帕特里克的工作小组。他们和其他几个工程师一起在加利福尼亚州门罗帕克市沙丘路的一个小工作室里面研究开发新技术,瞄准下一代智能家电(如微波炉)的程序设计,SUN公司预料未来科技将在家用电器领域大显身手。团队最初考虑使用C 语言,但是很多成员包括SUN的首席科学家比尔·乔伊,发现C 和可用的API在某些方面存在很大问题。
工作小组使用的是内嵌类型平台,可以用的资源极其有限。很多成员发现C 太复杂以至很多开发者经常错误使用。他们发现C 缺少垃圾回收系统,还有可移植的安全性、分布程序设计、和多线程功能。最后,他们想要一种易于移植到各种设备上的平台。
根据可用的资金,比尔·乔伊决定开发一种集C语言和Mesa语言搭成的新语言,在一份报告上,乔伊把它叫做“未来”,他提议SUN公司的工程师应该在C 的基础上,开发一种面向对象的环境。最初,高斯林试图修改和扩展C 的功能,他自己称这种新语言为C –,但是后来他放弃了。他将要创造出一种全新的语言,被他命名为“Oak”(橡树),以他的办公室外的树而命名。
**2.JDK发展历史**
![](https://note.youdao.com/yws/public/resource/34425e37f9d92ce4eabc3b4e003e12dc/xmlnote/C86724F6C41E44F7835A67B702B53D70/10373)
2020/3/17日JDK14正式发版
三、java技术平台
![](https://note.youdao.com/yws/public/resource/34425e37f9d92ce4eabc3b4e003e12dc/xmlnote/3D79D9B9670A4DD98D549F0C30398382/10370)
Java分为三个体系
**Java SE(J2SE,Java2 Platform Standard Edition,标准版)**
Java SE 以前称为 J2SE。它允许开发和部署在桌面、服务器、嵌入式环境和实时环境中使用的 Java 应用程序。Java SE 包含了支持 Java Web 服务开发的类,并为 Java Platform,Enterprise Edition(Java EE)提供基础。
**JavaEE(J2EE,Java 2 Platform, Enterprise Edition,企业版)**
这个版本以前称为 J2EE。企业版本帮助开发和部署可移植、健壮、可伸缩且安全的服务器端 Java 应用程序。Java EE 是在 Java SE 的基础上构建的,它提供 Web 服务、组件模型、管理和通信 API,可以用来实现企业级的面向服务体系结构(service-oriented architecture,SOA)和 Web 2.0 应用程序。
**Java ME(J2ME,Java 2 Platform Micro Edition,微型版)**
这个版本以前称为 J2ME。Java ME 为在移动设备和嵌入式设备(比如手机、PDA、电视机顶盒和打印机)上运行的应用程序提供一个健壮且灵活的环境。Java ME 包括灵活的用户界面、健壮的安全模型、许多内置的网络协议以及对可以动态下载的连网和离线应用程序的丰富支持。基于 Java ME 规范的应用程序只需编写一次,就可以用于许多设备,而且可以利用每个设备的本机功能。
**四、java特性和优势**
1)Java是纯面向对象的语言。它能够直接反映现实生活中的对象,比如火车, 人, 动物等,因此,开发人员更容易编写程序。
2)平台无关性。可以做到一次编译,到处运行。因为Java为解释型语言,编译器将Class文件编译成与平台无关的字节码,然后在虚拟机上解释执行,所以有很好的移植性。
3)Java提供了丰富的内置的类库。这些类库简化了开发人员的程序设计工作,缩短了项目周期。比如,Java语言提供了对多线程的支持,提供了对网络通信的支持,最重要的是提供了垃圾回收器,让开发人员能够从内存管理中解脱出来。
4)Java语言提供了Web应用开发的支持。例如Applet,Servlet和JSP,都可以用来开发Web应用程序,Socket、RMI可以用来开发分布式运用程序的类库。
5)Java语言具有良好的安全性和健壮性。Java语言经常被用在网络环境中,为了增强安全性,Java语言提供了防止恶意代码攻击的安全机制(数组边界检查和byte code校验等)。Java的强类型机制,垃圾回收器, 异常处理和安全检查机制使其具有很好的健壮性。
6)程序严谨整洁。Java语言去掉了C++中难以理解的,容易混淆的特性,例如头文件、指针、结构、单元、运算符重载、虚拟基础类、多重继承等。
**五、java跨平台原理**
![](https://note.youdao.com/yws/public/resource/34425e37f9d92ce4eabc3b4e003e12dc/xmlnote/4ACCC0A191A7413EA916D8983C5BDDD4/10372)
**六、垃圾回收机制**
**1.垃圾回收机制的意义**
ava 语言中一个显著的特点就是引入了java回收机制,是c++程序员最头疼的内存管理的问题迎刃而解,它使得java程序员在编写程序的时候不在考虑内存管理。由于有个垃圾回收机制,java中的额对象不在有“作用域”的概念,只有对象的引用才有“作用域”。垃圾回收可以有效的防止内存泄露,有效的使用空闲的内存;
**2.内存泄漏(memory leak)和内存溢出(out of memory)**
**内存泄漏:**是指程序在申请内存后,无法释放已申请的内存空间,一次内存泄漏似乎不会有大的影响,但内存泄漏堆积后的后果就是内存溢出。
**内存溢出:**指程序申请内存时,没有足够的内存供申请者使用,或者说,给了你一块存储int类型数据的存储空间,但是你却存储long类型的数据,那么结果就是内存不够用,此时就会报错OOM,即所谓的内存溢出。
通俗的说就是停车场(堆)保安(gc)让很久不用的废弃车子(无用的对象)从车位上挪走,但是这个车子又没办法挪走。这就是内存泄漏。停车场所有的车位都有车子占用了,再来车子没地了,或者说给你一个小汽车的停车位(int),你非要停一辆高铁(Long),这就是内存溢出。
内存泄露量大到一定程度会导致内存溢出。但是内存溢出不一定是内存泄露引起的。
**七、JRE和JDK的概述和软件的安装**
JRE:Java Runtime Environment Java
运行环境 包括Java虚拟机(JVM Java VirtualMachine)和Java程序所需的核心类库等,如果想要运行一个开发好的Java程序,计算机中只需要安装JRE即可。
JDK(Java Development Kit Java开发工具包)
JDK是提供给Java开发人员使用的,其中包含了java的开发工具,也包括了JRE。所以安装了JDK,就不用在单独安装JRE了。
我们用jdk编写了一个java程序交由jre 运行起来 由jvm实现跨平台
**八、常用的doc命令**
1.Disk Operation System(磁盘操作系统)的简称,是1985一1995年的个人电脑上使用的一种主要的操作系统。
2.DOS是对计算机系统进行控制与管理的一组程序,它管理着计算机的全部资源(包括中央处理器、存储器、各种外部设备、程序和数据),提供了用户与计算机之间的接口,用户能够方便地在计算机上运行程序以及建立和管理文件,并能使计算机的各种设备,如打印机、软盘驱动器、硬盘驱动器有效工作。
3.控制命令台:win+r 输入cmd 然后点回车。
![](https://note.youdao.com/yws/public/resource/34425e37f9d92ce4eabc3b4e003e12dc/xmlnote/573D7730CBD246CDB8690C67BE8324C6/10425)
4.具体的命令:
查看jdk版本:java -version
切换盘符:c: 或 d: 或 e:
显示详细信息:dir
进入当前目录:cd
返回上一层目录:cd..
清屏:cls
切换历史命令:上下箭头↑↓
创建目录:md
删除目录:rd
删除文件:del
创建文件:cd.>a.txt
**九、java的第一个程序HelloWorld**
1.创建一个java文件命名Heloworld.java
2.打开文件,编写java程序
public class HelloWorld{

	public static void main(String[] args){

		System.out.println("hello world");

	}

}
3.编译:win+r进入cmd窗口,利用cd命令进入文件所在的目录,通过javac HelloWorld.java,编译成功后会多一个HelloWorld.class文件
4.运行:使用java HelloWorld
**十、程序中常见的错误**
1.类名和文件名不一致;
2.System和String首字母没有大写;
3.结尾少了分号。
**十一、单行注释、多行注释和文档注释**
单行注释:// 注释内容
多行注释:/* 注释内容*/
文档注释:/** 注释内容 */ (它是java语言特有的注释,其中的注释内容可以被JDK提供的工具 javadoc 所解析,生成一套能够以网页形式体现程序的说明文档)
区别:多行注释不可以生成开发者文档,而文档注释可以生成开发者文档(文档分为使用者文档和开发者文档)。
注意规范点:
1、三种注释都可以出现在程序的任何地方,但是一般要有个规范的地方,不推介任意找位置。
2、单行注释一般写在语句的后面。
3、多行注释和文档注释一般写在语句的上面,文档注释只能出现在类、属性、方法的上面,否则提取不到。
4、多行注释中可以嵌套单行注释,多行注释中不能嵌套多行注释。
**十二、分隔符、标识符和关键字**
**分隔符:**Java语言里的分号(;)、花括号({})、方括号([])、圆括号(())、空格、圆点(.)都具有特殊的分隔作用,因此被统称为分隔符。
**标识符:**所谓标识符就是用于给程序中变量、类、方法命名的符号。
规则:1.只能是字符、数字、下划线(_)、美元符号($),不能以数字开头;
2.不能用关键字;
3.不能命名重复;
4.见名知意;
**关键字:**Java语言中有一些具有特殊用途的单词被称为关键字(keyword),当定义标识符时,不要让标识符和关键字相同,否则将引起错误。
![](https://note.youdao.com/yws/public/resource/34425e37f9d92ce4eabc3b4e003e12dc/xmlnote/9C99811BD5874847B875D1A99E01E3FC/10521)

---------------------------------------------------------------------------------