目录
一、程序
什么是程序
二、计算机编程语言
1.计算机语言是什么
Java历史
特点
执行机制
计算机执行机制
Java的执行机制
三、JDK安装
名词解释
安装与校验
配置环境变量
四、第一个Java程序
编写代码
编译运行
规范
六、Java核心机制:JVM
1.Java语言的特点
2.优点
3.缺点
4.JVM的功能说明
功能1:实现Java程序的跨平台性
功能2:自动内存管理(内存分配、内存回收)
一、程序
什么是程序
一系列按照
特定顺序组织
的计算机数据
和指令
的集合
二、计算机编程语言
1.计算机语言是什么
-
语言:是人与人之间用于沟通的一种方式。例如:中国人与中国人用普通话沟通。而中国人要和英国人交流,可以使用英语或普通话。
-
计算机编程语言,就是人与计算机交流的方式。人们可以使用
编程语言
对计算机下达命令
,让计算机完成人们需要的功能。 -
计算机语言有很多种。如:C 、C++、Java、Go、JavaScript、Python,Scala等。
体会:语言 = 语法 + 逻辑
2.计算机语言简史
第一代:机器语言
1946年2月14日,世界上第一台计算机ENAC
诞生,使用的是最原始的穿孔卡片
。这种卡片上使用的是用二进制代码
表示的语言,与人类语言差别极大,这种语言就称为机器语言
。比如一段典型的机器码:
1. 0000,0000,000000010000 代表 LOAD A, 16
2. 0000,0001,000000000001 代表 LOAD B, 1
3. 0001,0001,000000010000 代表 STORE B, 16
这种语言本质上是计算机能识别的唯一语言,人类很难理解。可以大胆想象"此时的程序员99.9%都是异类!
"
第二代:汇编语言
使用英文缩写的助记符
来表示基本的操作,这些助记符构成了汇编语言的基础。比如:LOAD
、MOVE
等,使人更容易使用。因此,汇编语言也称为符号语言
。
优点:能编写高效率
的程序
缺点:汇编语言是面向机器的
,不同计算机机型特点不同,因此会有不同的汇编语言,彼此之间不能通用
。程序不易移植,较难调试。
比起机器语言,汇编大大进步了,是机器语言向更高级的语言进化的桥梁
。目前仍然应用于工业电子编程领域、软件的加密解密、计算机病毒分析等
带三代:高级语言(相当于人类的信息时代)
高级语言发展于20世纪50年代中叶到70年代,是一种接近于人们使用习惯
的程序设计语言。它允许程序员使用接近日常英语
的指令来编写程序,程序中的符号和算式也与日常用的数学式子
差不多,接近于自然语言和数学语言,容易为人们掌握。比如:
高级语言独立于机器
,有一定的通用性;计算机不能直接识别和执行用高级语言编写的程序,需要使用编译器或者解释器,转换为机器语言
才能被识别和执行。
此外,高级语言按照程序设计方法的不同,又分为:面向过程的语言
、面向对象的语言
。
-
C、Pascal、Fortran面向过程的语言
-
C++面向过程/面向对象
-
Java跨平台的纯面向对象的语言
-
C#、Python、JavaScript、Scala…
目前以及可预见的将来,计算机语言仍然处于“第三代高级语言”阶段。但是不管是什么语言,最后都要向机器语言靠近,因为CPU只认识0和1。
Java历史
95年诞生,创始人:詹姆斯.高斯林
04年,划分三个稳定的平台版本:JavaSE,JavaEE,JavaME
09年卖给了Oracle公司
14年,8.0版本(常用,稳定,免费)
注意:
Android开发不等同于Java ME的开发
特点
面向对象:java世界,万物皆对象
简单性: 自动管理内存(C/C++需要手动管理,很麻烦)
跨平台: 跨操作系统(例如:window下开发的程序,可直接拿到linux执行)
执行机制
计算机执行机制
执行机制1:
先将源文件编译成机器码文件,再通过独立的操作系统执行
好处:执行效率高 弊端:不可跨平台 特点:一次编译,多次运行
执行机制2:
直接将源文件在不同的操作系统中解释并执行
好处:跨平台 弊端:执行效率低
Java的执行机制
执行机制:先将java文件编译成字节码(class文件),再将字节码解释成不同平台都能执行的指令
好处:执行效率高,跨平台
特点:一次编译,到处运行
三、JDK安装
名词解释
JDK:Java开发工具箱,包括JRE+类库+工具包
JRE:Java的运行环境,包含JVM+解释器
JVM:Java虚拟机,运行Java代码的工具
如下是Java 8.0 Platform:
安装与校验
下载jdk8.0,直接安装即可; 建议jdk和jre的路径同级
校验:进入到安装路径的bin目录下,输入:javac验证是否安装成功
配置环境变量
目的:在任何DOS位置都能直接使用JDK指令
配置步骤:
我的电脑-->右键属性-->高级系统设置-->环境变量
系统配置中:
新建: JAVA_HOME: C:\Program Files\Java\jdk1.8.0_131
双击Path: 新建-- %JAVA_HOME%\bin
验证:直接打开cmd,输入javac,验证成功
四、第一个Java程序
编写代码
//创建公开的类,名叫Hello //是单行注释:解释说明,给人看的 public class Hello{//入口函数:有且只有一个;程序最先执行的入口public static void main(String[] args){//系统的打印输出 注意:每行都需要缩进-tab键System.out.println("hello,world");} }
编译运行
打开cmd,切换判断,通过cd指令定位到java文件位置
编译:javac Hello.java
运行:java Hello
规范
类名首字母大写,且类名与文件名一致
每行代码需要缩进(按tab键)
注意符号都是英文的
注意中文不识别的配置:
原因:notepad++的编码与DOS窗口编码不一致,则会出现乱码报错;
解决方案:将notepad++也改成ansi和DOS一致即可
五、Java API文档
-
API (Application Programming Interface,应用程序编程接口)是 Java 提供的基本编程接口。
-
Java语言提供了大量的基础类,因此 Oracle 也为这些基础类提供了相应的说明文档,用于告诉开发者如何使用这些类,以及这些类里包含的方法。大多数Java书籍中的类的介绍都要参照它来完成,它是编程者经常查阅的资料。
-
Java API文档,即为JDK使用说明书、帮助文档。
-
下载API文档:
-
在线看:Overview (Java SE 17 & JDK 17)
-
离线下载:https://www.oracle.com/java/technologies/javase-jdk17-doc-downloads.html
中文版:链接:JDK中文说明文档
六、Java核心机制:JVM
1.Java语言的特点
Java确实是从C语言和C++语言继承了许多成份,甚至可以将Java看成是类C语言发展和衍生的产物。“青出于蓝,而胜于蓝”。
2.优点
跨平台性:这是Java的核心优势。Java在最初设计时就很注重移植和跨平台性。比如:Java的int永远都是32位。不像C++可能是16,32,可能是根据编译器厂商规定的变化。通过Java语言编写的应用程序在不同的系统平台上都可以运行。
原理:只要在需要运行 java 应用程序的操作系统上,先安装一个Java虚拟机 (J
VM ,Java V
irtual M
achine) 即可。由JVM来负责Java程序在该系统中的运行。
面向对象:面向对象编程支持封装、继承、多态等特性,让程序更好达到高内聚
,低耦合
的标准。
简单性:Java就是C++语法的简化版
,我们也可以将Java称之为“C++--
”。比如:头文件,指针运算,结构,联合,操作符重载,虚基类等
安全性:Java适合于网络/分布式环境,需要提供一个安全机制以防恶意代码的攻击。如:安全防范机制
(ClassLoader类加载器),可以分配不同的命名空间以防替代本地的同名类、字节代码检查。
高性能性:Java最初发展阶段,总是被人诟病“性能低
”;客观上,高级语言运行效率总是低于低级语言的,这个无法避免。Java语言本身发展中通过虚拟机的优化提升了几十倍运行效率
。比如,通过JIT(JUST IN TIME)即时编译技术提高运行效率。Java低性能的短腿,已经被完全解决了
。业界发展上,我们也看到很多C++应用转到Java开发,很多C++程序员转型为Java程序员。
3.缺点
语法过于复杂、严谨,对程序员的约束比较多;
一般使用大型网站的开发,整个架构会比较重
并非使用所有的领域,比如,Objective C、Swift在iOS设备上就有着无可取代的地位。浏览器中的处理几乎完全由JavaScript掌控。Windows程序通常都用C++或C#编写。Java在服务器端编程和跨平台客户端应用领域则很有优势。
4.JVM的功能说明
JVM(J
ava V
irtual M
achine ,Java虚拟机):是一个虚拟的计算机,是Java程序的运行环境。JVM具有指令集并使用不同的存储区域,负责执行指令,管理数据、内存、寄存器。
功能1:实现Java程序的跨平台性
我们编写的Java代码,都运行在JVM 之上。正是因为有了JVM,才使得Java程序具备了跨平台性。
使用JVM前后对比:
功能2:自动内存管理(内存分配、内存回收)
-
Java程序在运行过程中,涉及到运算的
数据的分配
、存储
等都由JVM来完成 -
Java消除了程序员回收无用内存空间的职责。提供了一种系统级线程跟踪存储空间的分配情况,在内存空间达到相应阈值时,检查并释放可被释放的存储器空间。
-
GC的自动回收,提高了内存空间的利用效率,也提高了编程人员的效率,很大程度上
减少了
因为没有释放空间而导致的内存泄漏
。
面试题:
Java程序还会出现内存溢出和内存泄漏问题吗? Yes!