一、计算机的历史
1946年2月14日,世界上第一台电脑ENIAC在美国宾夕法尼亚大学诞生。
计算机发展的四个阶段:
1.1946—1958:电子管数字机
2.1958—1964:晶体管数字机
3.1964—1970:集成电路数字机
4.1970—至今:大规模集成电路机
中国:
1983年12月22日,中国第一台每秒钟运算达1亿次以上的计算机——“银河”在长沙研制成功。
2000年 银河-Ⅳ 2000年运算速度每秒 1万亿次
超级计算机排名:2017 (百度)
1、神威•太湖之光 每秒9.3亿亿次浮点运算(93PetaFlops) –中国
2、天河二号 每秒3.3亿亿次浮点运算(33.9PetaFlops) – 中国
3、代恩特峰 每秒1.96亿亿次浮点运算(19.6PetaFlops) – 瑞士
二、计算机组成
概述:计算机系统的组成主要包括硬件和软件两大部分。
(1) 硬件:硬件是指完成输入、存储、处理、输出功能的具体设备 1>输入设备:键盘、鼠标、摄像头、扫描仪 2>输出设备:显示器、打印机、音响 3>CPU(Central Processing Unit)中央处理单元:主要厂商有Intel、AMD、高通 4>存储器:主要包括内存、硬盘、优盘等 5>其他设备:主板、机箱等 |
---|
(2) 软件:是指计算机系统中的程序及其文档。或者说是通过计算机语言编写的能够在硬件上运行的程序。 软件有两大类 :系统软件和应用软件 系统软件:控制和支持计算机系统,例如:DOS、Windows7、Windows10、Mac、Linux、Android、IOS等,一般指操作系统软件。 应用软件:通常指一些应用软件,具有特定应用场景功能的软件。例如:Office、PhotoShop、WinRAR等。 |
(3) 网络:计算机网络是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统。 |
硬件知识补充
CPU:是一台计算机的运算核心(Core)和控制核心( Control Unit)。它的功能主要是解释计算机指令以及处理计算机软件中的数据。 主要性能指标: (1)主频:CPU内核工作的时钟频率,也就是CPU工作频率,单位是兆赫(MHz)或千兆赫(GHz)主频越高表示CPU处理数据的速度就越快。 (2)内核:2核 4核 8核 例如:Intel 酷睿双核 i5 2.4G、i7 2.6G |
---|
存储器:用来存储数据和指令等的记忆部件。(内存、硬盘) 计算机对存储器的要求是:一要存取速度快,二要存储容量大。 计算机中的存储器按用途存储器可分为主存储器(内存)和辅助存储器(外存) 外存:通常是磁性介质或光盘等,能长期保存信息。 内存:指主板上的存储部件,用来存放当前正在执行的数据和程序,但仅用于暂时存放程序和数据,关闭电源或断电,数据会丢失。 存储器的计量单位包括位和字节、兆M、G、T、P等 8bit —— 1 Byte 1024B —— 1 KB 1024KB —— 1 MB 1024MB —— 1 GB 1024GB —— 1 TB 1024TB —— 1 PB |
其他:主板、显卡、键盘、显示器等等 |
好啦!介绍完硬件之后,我们来介绍软件,在介绍软件之前,我们先了解一下计算机语言的简史。
三、计算机语言的简史
计算机语言的简史,主要是给大家介绍一下计算机语言的发展史。
软件:就是通过计算机语言编写的能够在硬件上运行的程序。
3.1、低级语言
低级语言是相对于高级语言而言,所谓低级,也是指接近电脑底层的编程语言;
常见的低级语言包括:机器语言(0/1)二进制语言,汇编语言等;
其中,低级语言的特点是执行效率高,速度快;因为它们都是接近底层编程,没有编译解析等过程,程序直接操控硬件,效率相对较高,但是其学习和编程调试难度较高,编程比较慢,且比较费时,项目周期长。
3.2、高级语言
高级语言则包括:C、C++、C#、java、Python、PHP、go、Android、objectC、swift等。
高级语言是依赖编译解析的,更接近于人类语言逻辑的编程语言,其可读性更高,开发效率更高,学习起来相对较容易;但是其执行效率较低级语言而言要低一些,而且高级语言的执行,需要依赖运行环境,在Java等编程语言中,如果环境配置不完善,或者环境版本不一致则可能导致程序无法执行。
3.3、编译型语言和解释型语言的区别
计算机是不能理解高级语言的,更不能直接执行高级语言,它只能直接理解机器语言,所以使用任何高级语言编写的程序若想被计算机运行,都必须将其转换成计算机语言,也就是机器码(二进制码)。而这种转换的方式有两种:
编译型语言:
使用专门的编译器,针对特定的平台(操作系统),将高级语言源代码一次性的编译成可被该平台硬件执行的机器码,并包装成该平台所能识别的可执行性程序的格式。
或者:
把做好的源程序全部一次编译成二进制代码的可运行程序,然后,计算机可直接运行这个程序。{ C 、C++ }
特点:
在编译型语言写的程序执行之前,需要一个专门的编译过程,把源代码编译成机器语言的文件,如exe格式的文件,以后要再运行时,直接使用编译结果即可,如直接运行exe文件。因为只需编译一次,以后运行时不需要编译,所以编译型语言执行效率高。
总结:
(1)一次性的编译成平台相关的机器语言文件,运行时脱离开发环境,运行效率高; (2)与特定平台相关,一般无法移植到其他平台;不支持跨平台 (3)现有的C、C++、Objective等都属于编译型语言。
解释型语言:
使用专门的解释器对源程序逐行解释成特定平台的机器码并立即执行。
或者:
把做好的源程序翻译一句,然后执行一句,直至结束。{ JavaScript、VBScript、Perl、Python、Ruby、MATLAB 等等}
特点:
解释型语言不需要事先编译,其直接将源代码解释成机器码并立即执行,所以只要某一平台提供了相应的解释器即可运行该程序。
总结:
(1)解释型语言每次运行都需要将源代码解释成机器码并执行,效率较低; (2)只要平台提供相应的解释器,就可以运行源代码,所以可以方便源程序移植; (3)Python等属于解释型语言。
注意:Java很特殊,Java程序也需要编译,但是没有直接编译成为机器语言,而是编译成为中立的字节码文件(二进制),然后由JVM用解释方式执行字节码。
先编译,后解释执行。
3.4、二进制
二进制发明者:莱布尼茨
计算机中的数据不同于人们生活中的数据,人们生活采用十进制数,而计算机中全部采用二进制数表示,它只包含 0、1两个数,逢二进一,1+1=10。每一个0或者每一个1,叫做一个bit(比特)。
下面了解一下十进制和二进制数据之间的转换计算。
十进制数据转成二进制数据:使用十进制整数除以2获取余数的方式(辗转相除法)
二进制数据转成十进制数据:使用8421编码的方式(位权)
小贴士
二进制数系统中,每个0或1就是一个位,叫做bit(比特)。
注意:
负整数的二进制 -13 计算方法: (1)先求出该负整数对应的正整数的二进制 (2)对结果取反再加1 即可
3.5、字节
字节是我们常见的计算机中最小存储单元。计算机存储任何的数据,都是以字节的形式存储,右键点击文件属性,我们可以查看文件的字节大小。 1bit 1Byte
8个bit(二进制位) 0000-0000表示为1个字节,写成1 byte或者1 Byte。
1 Byte = 8 bit 256
1 KB = 1024 B(Byte) 2^10
1 MB = 1024 KB
1 GB = 1024 MB
1 TB = 1024 GB
1 PB = 1024 TB
1 EB = 1024 PB
1 ZB = 1024 EB
四、Dos介绍
4.1、认识dos
Dos,是磁盘操作系统的缩写,是个人计算机上的一类操作系统。从1981年直到1995年的15年间,磁盘操作系统在IBM PC 兼容机市场中占有举足轻重的地位。而且,若是把部分以DOS为基础的Microsoft Windows版本,如Windows 95、Windows 98和Windows Me等都算进去的话,那么其商业寿命至少可以算到2000年。微软的所有后续版本中,磁盘操作系统仍然被保留着。
4.2、常用dos指令
常用指令:dir、cd、cd \ 、cd … 、md、rd、cls、copy、move、del、del .、deltree
Tips:常用快捷键
ctrl+s 保存 ctrl+c 复制 ctrl+v 粘贴 ctlr+z 撤销
五、Java语言
5.0、什么是程序
程序是为了模拟现实世界,解决现实问题而使用计算机语言编写的一系列有序的指令集合。
5.1、Java语言简史
https://www.oracle.com/
Java是由Sun Microsystems公司于1995年5月推出的Java面向对象程序设计语言。
James Gosling,生日:1955年05月19日
WWW 万维网的发展促进了Java的发展。
java语言生于1991年,由美国SUN公司开发,当时叫OAK语言,1995改名为java语言
Java是Sun(Stanford University Network)于1995年推出的一种高级编程语言
1996年1月发布JDK1.0
1998年 JDK1.2,更名为Java2 包括三个版本 J2ME J2SE J2EE
2000年 JDK1.3,JDK1.4
2004年 JDK1.5,为了表示该版本的重要性,J2SE 1.5更名为Java SE 5.0,内部版本1.5
2005年 JDK6.0,J2EE更名为JavaEE,J2SE更名为JavaSE,J2ME更名为JavaME,内部版本1.6
2009年 Oracle(甲骨文)74亿美元收购Sun。取得Java的版权。(Oracle圣人,先知)
2011年 JDK7.0,内部版本1.7
2014年3月19日,JDK8.0 内部版本1.8
2017年9月22日,JDK9.0发布
2018年3月21日,JDK10.0发布
2018年9月26日,JDK11.0发布
2019年3月20日,JDK12.0发布
5.2、Java技术的分类
根据应用领域的不同分为:Java SE 、 Java EE 、 Java ME
J2SE(Java 2 Standard Edition**) Java**标准版本
J2SE是Java平台的核心,它提供了非常丰富的API来开发一般个人计算机上的应用程序,包括用户接口AWT及Swing,网络功能与国际化、图像处理能力以及输入输出支持等。在互联网上大放异彩的Applet也属于这个版本。
J2EE(Java 2 Enterprise Edition**)Java企业级版本**
J2EE是J2SE的扩展,增加了用于服务器开发的类库。 譬如:JSP;Enterprise JavaBeans;Servlet;XML等各种应用于服务器端的API。
J2ME(Java 2 Micro Edition)
J2ME是J2SE的内延,包含J2SE的一部分核心类,也有自己的扩展类,增加了适合微型设备的类库。
总结:
Java SE 是各个平台的基础,分为四个主要部分:JDK、JRE、JVM和Java类库 JDK包括Java程序语言、JRE、开发工具 JRE包括Java SE API 和JVM
Java****语言主要能做什么呢?
Java语言主要应用在互联网程序的开发领域。常见的互联网程序比如天猫、京东、物流系统、网银系统等,以及服务器后台处理大数据的存储、查询、数据挖掘等也有很多应用。
B/S结构的系统 网站、各种网络平台。Browser、Server
5.3、java语言的特性或优点
Java语言的特点
面向对象(贴近人类思维模式,模拟现实世界,解决现实问题)。 简单性(自动内存管理机制、不易造成内存溢出;简化流程处理、语义清晰)。 跨平台(操作系统、服务器等)。
(1)简单:Java的语法比C++的相对简单,另一个方面就是Java能使软件在很小的机器上运行,基础解释其和类库的支持的大小约为40kb,增加基本的标准库和线程支持的内存需要增加125kb。
(2)分布式:Java带有很强大的TCP/IP协议族的例程库,Java应用程序能够通过URL来穿过网络来访问远程对象,由于servlet机制的出现,使Java编程非常的高效,现在许多的大的web server都支持servlet。
(3)OO:面向对象设计是把重点放在对象及对象的接口上的一个编程技术.其面向对象和C++有很多不同,在与多重继承的处理及Java的原类模型。
(4)健壮:Java采取了一个安全指针模型,能减小重写内存和数据崩溃的可能型。
(5)安全:Java用来设计网路和分布系统,这带来了新的安全问题,Java可以用来构建防病毒和防攻击的System.事实证明Java在防毒这一方面做的很优秀。
(6)中立体系结构:Java编译其生成体系结构中立的目标文件格式可以在很多处理器上执行,编译器产生的指令字节码(Javabytecode)实现此特性,此字节码可以在任何机器上解释执行。
(7)可移植:Java中对基本数据结构类型的大小和算法都有严格的规定所以可移植很好。
(8)多线程:Java处理多线程的过程很简单,Java把多线程实现交给底下操作系统或线程程序完成.所以多线程是Java作为服务器端开发语言的流行原因之一。
(9)Applet和servlet:能够在网页上执行的程序叫Applet,需要支持Java的浏览器很多,而applet支持动态的网页,这是很多其他语言所不能做到的。
5.4、java环境分析
Java****的几个重要概念
5.4.1、JDK
Java Development ToolKit(Java开发工具包)。JDK是整个JAVA的核心,包括了Java运行时环境JRE(Java Runtime Envirnment),一堆Java工具(javac/java/jdb等)和Java基础的类库(即Java API 包括rt.jar)。
5.4.2、JRE
Java Runtime Enviromental(java运行时环境)。也就是我们说的JAVA平台,所有的Java程序都要在JRE下才能运行。包括JVM和JAVA核心类库和支持文件。与JDK相比,它不包含开发工具——编译器、调试器和其它工具。
5.4.3、JVM
Java Virtual Mechinal(JAVA虚拟机)。JVM是JRE的一部分,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。JVM有自己完善的硬件架构,如处理器、堆栈、寄存器等,还具有相应的指令系统。JVM 的主要工作是解释自己的指令集(即字节码)并映射到本地的 CPU 的指令集或 OS 的系统调用。Java语言是跨平台运行的,其实就是不同的操作系统,使用不同的JVM映射规则,让其与操作系统无关,完成了跨平台性。JVM 对上层的 Java 源文件是不关心的,它关注的只是由源文件生成的类文件( class file )。类文件的组成包括 JVM 指令集,符号表以及一些补助信息。
5.5、Java的两个核心机制
(1)Java虚拟机JVM
JVM(Java Virtual Machine)是一种规范,可以使用软件来实现,也可以使用硬件来实现,就是一个虚拟的用于执行byte-code字节码的计算机。他定义了指令集、寄存器集、结构栈、垃圾收集堆、内存区域等。不同的操作系统有不同的虚拟机。Java 虚拟机机制屏蔽了底层运行平台的差别,实现了“一次编译,随处运行”。
1、JVM可以理解成一个可运行Java字节码的虚拟计算机系统。 它有一个解释器组件,可以实现Java字节码和计算机操作系统之间的通信 对于不同的运行平台,有不同 的JVM。 2、JVM屏蔽了底层运行平台的差别,实现了“一次编译,随处运行”。 举例:联合国开会
(1)通过“编译器”将java源程序编译成Java字节码文件(*.class)[字节码文件采用结构中立的中间文件格式] (2)通过“解释器”将Java字节码文件解释为对应的机器语言并运行。
画图解释跨平台原理(一次编译,随处运行)
(2)自动垃圾回收(先不讲)
垃圾回收(Garbage Collection):将不再使用的内存空间应当进行回收。 1 在C/C++等语言中,由程序员负责回收无用内存,而Java语言消除了程序员回收无用内存空间的责任: 2 JVM提供了一种系统线程跟踪存储空间的分配情况。并在JVM的空闲时,检查并释放那些可以被释放的存储空间。 垃圾回收器在Java程序运行过程中自动启用,程序员无法精确控制和干预,即使程序员通过代码告诉垃圾回收器执行,它也不会立即回收内存。
六、JDK安装及环境配置
6.1、下载JDK安装包
官网:
https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
6.2、JDK安装
JDK目录介绍
1. bin目录:存放Java的编译器、解释器等工具(可执行文件)。
2. db目录:JDK7附带的一个轻量级的数据库,名字叫做Derby。
3. include目录:存放的调用系统资源的接口文件。
4. jre目录:存放Java运行环境文件。
5. lib目录:存放Java的类库文件。
6. src.zip文件:JDK提供的类的源代码。
安装JDK需要注意的事项:
1. 安装路径中不要包含中文。
2. 安装路径中不要包含空格。
JRE(Java RunTime Environment)Java运行时环境
Java编译器(javac.exe)
Java运行时解释器(java.exe)
Java文档化工具(javadoc.exe)
6.3、java环境配置(
(1)PATH环境变量
作用是指定Java命令搜索路径,在命令行下面执行命令如javac编译java程序时,它会到PATH变量所指定的路径中查找看是否能找到相应的命令程序。我们需要把jdk安装目录下的bin目录增加到现有的PATH变量中,bin目录中包含经常要用到的可执行文件如javac/java/javadoc等,设置好PATH变量后,就可以在任何目录下执行javac/java等工具了。
D:\java\java7\jdk1.8.0_21\bin;
Path = %JAVA_HOME%\bin;
(2)CLASSPATH环境变量
作用是指定类搜索路径,要使用已经编写好的类,前提当然是能够找到它们了,JVM就是通过CLASSPATH来寻找类的。我们需要把jdk安装目录下的lib子目录中的dt.jar和tools.jar设置到CLASSPATH中,当然,当前目录“.”也必须加入到该变量中。
D:\java\java7\jdk1.7.0_21\lib
classpath =.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar
注:从JDK5.0以后默认就会到当前工作目录以及JDK的lib目录中查找。
(3) JAVA_HOME环境变量。它指向jdk的安装目录,Eclipse/NetBeans/Tomcat等软件就是通过搜索JAVA_HOME变量来找到并使用安装好的jdk。 (新建)
JAVA_HOME = D:\Java\jdk1.8.0_80
如何在官网下载java JDK的历史版本 http://jingyan.baidu.com/article/9989c746064d46f648ecfe9a.html
6.4、第一个Java程序代码
示例:HelloWorld
(1)编写源程序
Java源程序(文件): 是一个后缀面是.java的文件,里面写的是java代码
// HelloWorld类名和文件名相同 public class HelloWorld { // 公开的 static 静态的 void 没有返回值 String[] args 参数 public static void main(String[] args){ //向外输出 打印 System.out.println(“Hello World!”); } } Javac compiler //解释说明: //1 public 关键字 公开的 //2 class 关键字 表示定义一个类 //3 HelloWorld 类名 和文件名一致 //4 static 静态的,先记住意思,后面详细讲 //5 void 表示无返回值,先记住意思,后面讲 //6 main 主方法,程序入口 //7 String[] 字符串数组类型 //8 args 方法参数 //9 System.out.println(“Hello World!”);输出Hello World
(2)编译(compiler)
在命令行中输入:javac HelloWorld.java 编译后会生成后缀名为class的文件,我们称为字节码文件
(3)运行
在命令行中输入:java HelloWorld
Java初学者常见的问题演示 错误1:‘javac’ 不是内部或外部命令,也不是可运行的程序或批处理文件。 解决1:配置path环境变量 compile 错误2:错误: 找不到或无法加载主类 Test.class 解决2:去掉Java后缀 错误3:Test.java:4: 错误: 编码GBK的不可映射字符 原因:默认采用本地编码(GBK)进行编译,但是文件的保存时采用的编码时UTF-8,不一致 解决:31:指定编译时采用的编码是UTF-8, javac -encoding UTF-8 Test.java ? 解决32:文件保存时采用编码为GBK(采用以ANSI编码) 错误4:错误:找不到主类Test 解决4:配置classpath:指定class文件的路径 .; 注意编码规范:缩进 成对编程! 区分大小写!
上机练习:
(1)在控制台输出 “我爱中国!”
6.5、Java的编码规范
编码规范的必要性(1)程序员基本素养(2)体现专业化
基本编码规范
1>类名使用public 修饰
2>一行只写一条语句(建议)
3>{}的位置,左大括号在行末尾,右大括号独立一行
4>代码缩进
6.6、输出方法 print、println、printf
print() 输出内容没有换行
println() 输出内容后有换行
printf() 这个方法先不讲
格式化输出,"%"表示进行格式化输出,"%"之后的内容为格式的定义(了解并查看帮助文档)
%f "f"表示格式化输出浮点数(小数)。
%.2f 保留小数点后2位
%d "d"表示输出十进制整数
%s "s"表示输出字符串
%x "x"表示输出16进制形式,X 表示大写
十六进制 基本数字0-9 A B C D E F
规则 逢16进1
演示 printf的使用
**编写Java****程序时,应注意以下几点:
(1)大小写敏感:Java是大小写敏感的,这就意味着标识符Hello与hello是不同的。
(2)类名:对于所有的类来说,类名的首字母应该大写(不是必须)。如果类名由若干单词组成,那么每个单词的首字母应该大写,例如 MyFirstJavaClass。
(3)方法名:所有的方法名都应该以小写字母开头。如果方法名含有若干单词,则后面的每个单词首字母大写,例如 myFirstJavaMethod。
(4)源文件名:源文件名必须和类名相同(public声明的类名)。当保存文件的时候,你应该使用类名作为文件名保存(切记Java是大小写敏感的),文件名的后缀为.java。(如果文件名和类名不相同则会导致编译错误)。
(5)主方法入口:所有的Java 程序由public static void main(String [] args)方法开始执行。
注意:在一个类文件中,允许声明多个类,但是只能有一个public的类,并且这个类名要与文件名一致。一般情况下,建议一个类文件中,只声明一个类。
七、注释
注释:注释就是使用文字对程序的说明,注释是写给程序员看的,编译器会忽略注释的内容的。
共有三种注释: 单行注释、多行注释、文档注释
7.1、单行注释
//适用于注释一行 针对 属性
7.2、多行注释
/*
多行注释
适用于同时注释很多行
注释内容
注释内容
*/
针对 方法,不能嵌套使用
7.3、文档注释
/** 文档注释,可以生成代码文档,类似JDK的帮助文档 */
/** 文档注释 */ 不能嵌套使用 生成API文档 示例:javadoc Hello.java
注释补充:
软件 = 数据 + 指令 + 文档(使用者文档+ 开发者文档)
文档注释与多行注释的区别:
多行注释与文档注释的区别: 多行注释的内容不能用于生成一个开发者文档,
而文档注释的内容可以生产一个开发者文档。
使用javadoc开发工具即可生成一个开发者文档。
javadoc工具的使用格式:
javadoc -d 存放文档的路径 java的源文件
javadoc -d e://java2101 HelloWorld.java
使用javadoc工具要注意细节:
1. 如果一个类需要使用javadoc工具生成一个软件的开发者文档,那么该类必须使用public修饰。
2. 文档注释,注释的内容一般都是位于类或者方法的上面的。
写注释的规范:一般单行注释是位于代码的右侧,多行注释与文档注释一般是写在类或者方法的上面的。
面试题
1.一个".java"源文件中是否可以包括多个类?有什么限制?
2.垃圾回收器的作用?垃圾回收器可以马上回收内存吗?
3 .此处,Something类的文件名叫OtherThing.java 对吗?
class Something { public static void main(String[] args) { System.out.println("Do something ..."); } }
(4)什么是JVM?有什么作用?
JVM是一种规范,可以使用软件 来实现,也可以使用硬件 来实现,就是一个虚拟的用 于执行byte-code字节码的计算机。他定义了指令集、寄存器集、结构栈、垃圾收集堆、内存区域等。 不同的操作系统有不同的虚拟机。Java 虚拟机机制屏蔽了底层运行平台的差别,实现了“一次编译,随处运行”。
举例:联合国开会
(6)简述对JVM,JRE,JDK的理解。
JVM: JAVA虚拟机
Jre: java运行环境 jre = java虚拟机+ 核心类库
Jdk : java开发工具集。 Jdk = jre + java开发工具。
(7)简述环境变量path和java_home \ classpath的作用?
Path: 为了让控制台在任意路径下都可以找到java的开发工具。
Java_home : 避免频繁修改path 环境变量信息。
Classpath : 设置class文件所在的路径信息。
(8)java语言是否区分大小写? class的作用,javac,java的作用?
是, class的作用是定义一个该类 的关键字,
java : 启动java虚拟机解释并执行对应的class文件。
javac: 启动java编译器对指定的java源文件进行编译
(9)简述main方法(是什么,什么特点,怎么用,何时用?)
程序的主入口方法,代码是从主方法上开始执行的。
写法是固定的。
定义一个类中使用。
如果一个类需要独立运行的时候,就需要main方法。