目录
一、计算机语言的发展历史
计算机语言的发展历史是从机器语言到汇编语言到高级语言的过程,高级语言分为面向过程的高级语言的面向对象的高级语言,Java就属于面向对象的高级语言。
二、Java简史
Java是由SUN公司发明,发明人叫James Gosling,后来SUN公司经营不佳被现在的oracle公司收购了,Java也经历的很多版本,我这里使用的是JavaSE8.0。
三、Java体系结构
JavaSE(Java Standard Edition):标准版,定位在个人计算机上的应用
JavaEE(Java Enterprise Edition):企业版,定位在服务器端的应用
JavaME(Java Micro Edition):微型版,定位在消费性电子产品的应用上(没有什么用)
四、Java的特性和优势
Java的优势有很多,比如跨平台/可移植性、安全性、面向对象、简单性、高性能、分布式、多线程、健壮性,所以Java是一门很好的编程语言。
五、核心机制
1.垃圾收集机制
- Java消除了程序员回收无用内存空间的职责,相比c++,开发人员负责要自己收回无用内存。
- 垃圾收集在Java程序运行过程中自动进行,程序员无法精确控制和干预;、
- 垃圾的自动回收,提高了内存空间的利用效率,也提高了编程人员的效率,很大程度上减少了因为没有释放空间而导致的内存泄露。
2.跨平台原理
.java文件(源文件)可以通过javac.exe编译成.class文件(字节码文件),然后字节码文件可以通过java.exe文件和不同平台的JVM(虚拟机)翻译到不同的平台上,其中javac.exe、java.exe和JVM都是在JDK(Java 语言的软件开发工具包)中的。
而C语言则需要把.c文件(源文件)通过不同平台的编译器编译后产生的可执行文件发送到对应平台上,所以说C语言的可执行文件没有跨平台性,而Java的字节码文件是和平台无关的,所以有Java具有跨平台性。
五、常用DOS命令
DOS操作系统是windows之前的操作系统
- 在windows中,我们通过鼠标菜单等来操作系统,而在dos操作系统中,要通过dos命令来操作系统。
- DOS命令不区分大小写。
命令
- 控制命令台:win+r-->cmd
- 切换磁盘:C: D: E:
- 显示当前目录仔细信息:dir
- 改变当前目录:cd
- .代表当前目录 ..表示上一级目录
- 清屏:cls
- 切换历史命令:上下箭头
- 补全命令:Tab键
- 创建目录:md
- 删除目录:rd
- 复制文件:copy something somewhere
- 删除文件:del(如果删除的是文件夹或目录,则删除的是其中的所有文件和文件夹)
六、Java环境准备-->JDK
【1】下载JDK
【2】安装JDK
【3】JDK和JRE
JDK: Java Development kit ---->编写Java程序的程序员使用的软件
JRE : Java Runtime Enviroment ---->运行Java程序的用户使用的软件
七、安装notepad++,配置path环境变量
【1】安装记事本:notepad
【2】安装:一直下一步
【3】打开记事本进行设置:
设置-->首选项:
【4】设置-->语言格式设置:
配置path环境变量
找系统环境变量
将notepad++.exe所在的路径配置到path环境变量中去(notepad++.exe不要写进去)
这样我就可以在任意的路径下去执行这个命令:(注意:控制命令台需要重启)
path环境变量作用:
将命令所在的路径配置到path中去,就相当于在计算机中“注册”了一样,以后找这个命令,会直接去你配置的路径下寻找。
达到了一个效果:在任意的路径下去执行某个命令,path环境是针对整个操作系统而言。
八、第一段程序
【1】用notepad编写代码:
public class HelloWorld{
public static void main(String[] args){
System.out.println("hi 这是一段Java程序。。。");
}
}
记得保存 ctrl+s,文件名要和类名一样,上面的为例则文件名为HelloWorld.java
【2】进行编译:
发现出错了,分析出错原因:
解决办法:将javac.exe所在的路径 配置到 环境变量path中去,这样我就可以在任意的路径下去执行这个命令:
配置好环境变量以后发现代码可以成功编译:
验证:
【3】进行解释/翻译/执行:
上面执行过程成功的原因:
九、程序中常见问题
【1】最低级的错误:单词拼写错误
【2】要求源文件名字和public修饰的类名必须一模一样
【3】所有的标点必须是英文状态下的,搜狗可以设置中文模式下输入英文标点
中文状态:【】(){} !;:“‘《》?
英文状态:[] () {} ! ; : " ' <> ?
【4】成对编程
[] {} () <> "" ''
【5】注意缩进 :只要遇到{}就进行缩进 --->为了格式好看
缩进:tab
向前缩进: shift+tab
【6】编译:
javac HelloWorld.java
【7】执行:
java HelloWorld
【8】java中大小写严格区分,大小敏感
【9】我们要写代码:就当做有一个“框子”
【10】一个源文件中可以有多个类,只能有一个类被public修饰,源文件的名字必须跟public修饰的那个类名保持一致。
多个类会产生独立的字节码文件
执行的时候执行各自独立的字节码文件即可
十、编译方式
【1】方式1
【2】方式2
【3】方式3
【4】方式4
在notepad中右键文件 -->打开文件夹所在命令行
十一、扩展:classpath环境变量
【1】系统有一个环境变量叫:classpath,现在我们将classpath环境变量显式的写出来
classpath作用:只要你配置到classpath中的路径,在执行java的字节码文件的时候,就会去这个配置的路径下找 对应的字节码文件
现在我不配置.\了 我配置
自从我配置了这个环境变量以后,可以在任意的路径下去执行字节码文件:
总结:
classpath作用:针对java执行字节码文件而产生的环境变量,只要配置了字节码文件所在的路径以后,那么以后你在任意位置都可以执行对应的字节码文件
十二、扩展:JAVA_HOME环境变量
后续我们会用到一个软件:tomcat,在执行startup.bat的时候会出现闪退问题:
解决:
必须要配置一个环境变量叫:JAVA_HOME
我再次启动才会成功:
然后我们的path环境变量中刚好可以借助JAVA_HOME里面的内容,通过%%做引入
%JAVA_HOME%\bin
十三、API
- JDK帮助文档
- SUN公司为JDK工具包提供了一整套文档资料,我们习惯上称之为JDK文档。
- JDK文档中提供了Java中的各种技术的详细资料,以及JDK中提供的各种类的帮助说明。
- JDk文档是Java语言的完整说明,大多数书籍中的类的介绍都要参照它来完成,它是编程者经常查阅的资料
- 如何理解API:就当做是一个“字典”,“使用手册”,API就相当于是一个电子的帮助文档,可以帮我们查看JDK提供的类的信息,平时查看的时候可结合百度一起看。
十四、代码量统计工具
十五、注释
1.单行注释和多行注释
单行注释// 多行注释/* */
注释不会参与编译,编译后产生的字节码文件中不会有注释的内容
注释的作用:
(1)注释就起到了标注解释的作用,提高代码的可读性,方便自己,方便他人--》是一个非常良好,非常专业的习惯!!!
(2)方便代码的调试:
2.文档注释
一般文档注释可以配合:jdk提供的工具javadoc.exe来一起使用,通过javadoc.exe可以对文档注释进行解析,生成一套以网页文件形式体现的该程序的说明文档。(自定义类对应的API)
十六、反编译工具的使用
编译
源代码----->class
反编译
class---->源代码
十七、本章最后一段代码
print不换行 println换行 \n转义字符换行
\t制表符:每八位一个制表符,与前面的几位凑成一个制表符,前面4位就空4格,前面1位就空8格
十八、扩展面试题:JDK、JRE、JVM的区别
JDK,JRE,JVM的关系:
先说JDK和JRE:
初学JAVA很容易被其中的很多概念弄的傻傻分不清楚,首先从概念上理解一下吧,JDK(Java Development Kit)简单理解就是Java开发工具包,JRE(Java Runtime Enviroment)是Java的运行环境,JVM( java virtual machine)也就是常常听到Java虚拟机。JDK是面向开发者的,JRE是面向使用JAVA程序的用户,上面只是简单的区别
通过上图发现发现有两个JRE文件夹,如果细看里面的内容基本上是一样的,如果是只是Java程序使用者,那么只会有最外层的那个JRE目录,JDK中是JRE自带的,你如果安装了JDK必然里面会有一个JRE.那么问题来了,为什么会有两套JRE呢?
从侧面证明:
利用javac.exe进行编译:
然后我将C:\Program Files\Java\jdk1.8.0_151\lib\tools.jar改个名字,再去编译:
证明:dt.jar和tools.jar是两个java最基本的包,里面包含了从java最重要的lang包到各种高级功能如可视化的swing包,是java必不可少的。而path下面的bin里面都是java的可执行的编译器及其工具,如java,javadoc等,报错的原因就是输入的javac的命令不是去JDK中bin目录去找的javac.exe,而是去JDK中lib目录中的tools.jar中com.sun.tools.javac.Main中执行,因此javac.exe只是一个包装器(Wrapper),存在的目的是为了让开发者免于输入过长的指命。这个时候发现JDK里的工具几乎是用Java所编写,同属于Java应用程序,因此要使用JDK所附的工具来开发Java程序,所以自身需要附一套JRE才能运行。上图中与jdk同级目录下的JRE就是用来运行一般Java程序用的。
两套JRE运行的时候究竟运行哪一个呢,这个时候JDK中java.exe先从自身目录中找,然后父级目录中找,如果都没有就去注册表中找
再说JRE和JVM:
JVM -- java virtual machineJVM就是我们常说的java虚拟机,它是整个java实现跨平台的最核心的部分,所有的java程序会首先被编译为.class的类文件,这种类文件可以在虚拟机上执行,class文件并不直接与机器的操作系统相对应,而是经过虚拟机间接与操作系统交互,由虚拟机将程序解释给本地系统执行,类似于C#中的CLR。
JVM不能单独搞定class的执行,解释class的时候JVM需要调用解释所需要的类库lib。在JDK下面的的jre目录里面有两个文件夹bin和lib,在这里可以认为bin里的就是jvm,lib中则是jvm工作所需要的类库,而jvm和 lib和起来就称为jre。
JVM+Lib=JRE,如果讲的具体点就是bin目录下的jvm.dll文件, jvm.dll无法单独工作,当jvm.dll启动后,会使用explicit的方法(就是使用Win32 API之中的LoadLibrary()与GetProcAddress()来载入辅助用的动态链接库),而这些辅助用的动态链接库(.dll)都必须位 于jvm.dll所在目录的父目录之中。因此想使用哪个JVM,只需要设置PATH,指向JRE所在目录下的jvm.dll。