1. 常用DOS命令
- dir : 列出当前目录下的文件以及文件夹
- md : 创建目录
- rd : 删除目录
- cd : 进入指定目录
- cd.. : 退回到上一级目录
- cd: 退回到根目录
- del : 删除文件 // 若后面跟着文件目录,则会删除该目录下的文件
- exit : 退出 dos 命令行
- echo javase>1.doc:将javase写出到1.doc
2. 计算机编程语言介绍
3. Java的3个版本
- JavaSE (Java Standad Edition):标准版,定位在个人计算机上的应用
- JavaEE (Java Enterprise Edition):企业版,定位在服务器端的应用
- JavaME (Java Micro Edition):微型版,定位在消费性电子产品的应用
4. Java特性和优势
- 跨平台/可移植性
- 这是 Java 的核心优势。Java 在设计时就很注重移植和跨平台性;其源代码被编译成一种结构中立的中间文件格式。只要有 Java 运行系统的机器都能执行这种中间代码。Java 源程序被编译成一种与机器无关的字节码格式,在 Java 虚拟机上运行。
- 比如:Java 的 int 永远都是 32 位。不像 C++ 可能是 16,32,可能是根据编译器厂商规定的变化。这样的话程序的移植就会非常麻烦。
- 安全性
- 强类型语言,其类型检查比 C/C++ 要严格 // int i = 6.1; [c: √] [java: ×]。
- 提供了垃圾回收机制,有效避免了内存泄漏问题。
- 禁止非法内存访问,在没有授权的情况下是不能访问内存的。所有这些措施,使得开发人员不再担心内存的崩溃。
- 面向对象
- 支持继承、重载、多态等面向对象的特性。
- C 是纯面向过程的语言;C++ 语言是面向过程和面向对象混合的语言。
- 简单性
- Java 就是 C++ 语法的简化版,指的就是将 C++ 的一些内容去掉;比如:头文件,指针运算,结构,联合,操作符重载,虚基类等等。
- 高性能
- Java 语言本身发展中通过虚拟机的优化不断提升运行效率。
- 比如,通过 JIT(JUST IN TIME) 即时编译技术提高运行效率。 将一些“热点”字节码编译成本地机器码,并将结果缓存起来,在需要的时候重新调用
- 分布式
- Java 是为 Internet 的分布式环境设计的,因为它能够处理 TCP/IP 协议。
- 多线程
- Java 多线程的简单性是 Java 成为主流服务器端开发语言的主要原因之一。
- 健壮性
- 吸收了 C/C++ 语言的优点,但去掉了其影响程序健壮性的部分(如:指针、内存的申请与释放等)
- 如果出现某种出乎意料之事,程序也不会崩溃,而是把该异常抛出,再通过异常处理机制加以处理
5. Java应用程序的运行机制
- 计算机高级语言的类型主要有 [编译型] 和 [解释型] 两种
- Java 语言是两种类型的结合
- Java 首先利用文本编辑器编写 Java 源程序,源文件的后缀名为 .java
- 再利用编译器(javac) 将源程序编译成 {字节码文件},字节码文件的后缀名为 .class
- 最后利用虚拟机JVM(解释器,java) 解释执行
- Java 的源代码和字节码是与机器无关的,但 JVM 是与机器有关的。
- 装有不同 OS 的机器上,需要有专门为该 OS 开发的 JVM,JVM 是与机器有关的。
- Java 核心机制 —— 垃圾回收
- 不再使用的内存空间应回收(垃圾回收)
- 在 C/C++ 等语言中,由程序员负责回收无用内存。
- Java 语言消除了程序员回收无用内存空间的责任:它提供一种系统级线程跟踪存储空间的分配情况,并在 JVM 空闲时,检查并释放那些可被释放的存储空间。
- 垃圾回收在 Java 程序运行过程中自动进行,程序员无法精确控制和干预。
- Java 程序还会出现内存泄漏和内存溢出问题吗?Yes
- 不再使用的内存空间应回收(垃圾回收)
6. JVM、JRE和JDK
JVM (Java Virtual Machine)
- JVM 就是一个虚拟的,用于执行字节码的"虚拟计算机"。也就定义了指令集、寄存器集、结构栈、垃圾收集堆、内存区域。
- JVM 负责将 Java 字节码解释运行,边解释边运行 // 速度就会受到一定的影响
- Java 虚拟机是实现“跨平台”的核心机制
- 不同的操作系统有不同的虚拟机
- Java 虚拟机机制屏蔽了底层运行平台的差别,实现了"一次编译,随处运行"。
JRE (Java Runtime Environment):含 JVM、库函数、运行Java应用程序所必须的文件
JDK (Java Development Kit):包含 JRE,以及 编译器(javac.exe) 和 调试器等用于程序开发的文件
如果只是要运行 Java 程序,只需要 JRE 就可以。JRE 通常非常小,其中包含了 JVM。如果要开发 Java 程序,就需要安装 JDK。
7. 环境变量Path的配置
7.1 引入 Path
- 背景
- 在 DOS 的任何目录下我们都可以运行 OS 自带的命令
- 而想要在 DOS 下运行用户自己的程序,则必须进入到该程序所在目录下才能运行。
- Path
- Path 环境变量是在 OS 中一个具有特定名字的对象;如果我们想要在 DOS 的任何目录下都可以运行自己创建的程序,则需要设置 OS 自带的环境变量 Path。
- 它告诉 OS,当要求系统运行一个程序而没有告诉它程序所在的完整路径时,系统除了在当前目录下寻找此程序外,还应到哪些目录下寻找,以最先找到的为准
- Java & Path
- 编译一个 [Java 源文件],需要使用 javac.exe 程序;而运行一个[字节码文件],则需要使用 java.exe 程序
- 应将"bin文件夹"设置为Path环境变量的属性值
- 编译一个 [Java 源文件],需要使用 javac.exe 程序;而运行一个[字节码文件],则需要使用 java.exe 程序
7.2 设置 Path 的步骤
- 右键计算机 → 属性 → 高级系统设置
- 新建 JAVA_HOME 变量(用于说明JDK的安装目录)
- 修改系统环境变量Path,在最前面追加 %JAVA_HOME%in
7.3 classpath 配置问题
- ".class" 文件的加载路径(不必)
- JRE 会自动搜索当前路径下的类文件及相关 jar 包
- java.lang 包是 Java 语言的核心,不用 import
8. 第1个Java程序
8.1 常见错误
- 常见问题-1:提示"javac不是内部或外部命令……"
- 出错原因:Path 变量配置错误导致没有找到 javac 命令
- 解决方案:参考<环境变量 Path 的配置>
- 常见问题-2:文件夹中可以看到 Hello.java 文件,在编译时出现"javac 找不到文件……"
- 出错原因:可能是操作系统显示设置的问题,隐藏了文件的扩展名
- 解决方案:去掉"隐藏已知文件夹类型的扩展名"复选框中的对勾,看到文件的实际名称为 Hello.java.txt,将后缀后 .txt 去掉
- 常见问题-3:NoSuchMethodError:main
- 出错原因:找不到 main 方法,应该是 main 方法书写有误
- 解决方案:检查 public static void main(String [] args){} 是否有误
8.2 总结
- Java 对大小写敏感,如果出现了大小写拼写错误,程序无法运行
- 如果你在 Window 环境下,“javac hello.java”是会编译成功的,但“java hello”一定会报错
- 编译时找源文件属于 Window 层面的,而 Window 不区分大小写
- 解释运行字节码文件(通过找类名),是属于Java 层面的,而 Java 严格区分大小写
- 不包含 main 方法的类,无法直接运行
- public class Hello {...}
- 关键字
public
被称作访问修饰符(access modifier),用于控制程序的其它部分对这段代码的访问级别 - 关键字
class
的意思是类;Java 是面向对象的语言,所有代码必须位于类里面 - 一个源文件可以包含多个类 class,但源文件名 必须 和 其中定义的 {public 的类名} 相同
- 关键字
- 一个源文件中至多只能声明一个public的类(源文件名只能有一个),其它类的个数不限。正确编译后的源文件,会得到相应的字节码文件,编译器为每个类生成独立的字节码文件,将字节码文件自动命名为类的名字且以“.class”为扩展名
- 在 Java 中,用花括号划分程序的各个部分,任何方法的代码都必须以“{”开始,以“}”结束, 由于编译器忽略空格,所以花括号风格不受限制 // 在写括号、引号时,一定是成对编写,然后再往里插入内容
- main 方法是 Java 应用程序的入口方法,它有固定的书写格式:public static void main(String[] args) {…}
- Java 中每个语句必须以分号结束,回车不是语句的结束标志,所以一个语句可以跨多行。
9. API
- API 全称:Application Programming Interface,是程序语言提供的类库
- API文档:针对于提供的类库如何使用,给的一个说明书 // 文档注释