第一章 走进 java 世界
1.1 java 语言的特点(小面经)
- 使用简单、高效
- 去掉了 C 和 C++中的指针和多重继承技术
- 通过垃圾自动回收机制简化了程序内存管理
- 对于数据类型在不同字长的计算机上实现统一字节数占用
- 完全面向对象
- 抽象、封装、继承、多态
- 自动内存管理(Auto Garbage Collection)
- 在 C 语言中用 malloc() 申请内存,用 free() 释放内存空间
- 平台无关性与可移植性
- Java 采用编译与解释相结合,先经编译成 *.class 字节码,然后再由 JVM 解释执行。JVM 对不同操作系统进行了适配
- 鲁棒性(程序运行的稳定性)
- Java 在编译和运行的过程中都会进行比较严格的检查,以减少错误
- Java 不提供指针,杜绝开发人员的误操作
- 安全性
- Java采用公钥加密算法为基础的验证技术,保障网络环境下的安全性
- 从环境变量、类加载器、文件系统、网络资源等方面实施了安全策略
- 分布计算
- Java可以轻松实现基于TCP/IP 的分布式文件系统
- 多线程
- Java 语言提供多线程支持,C++语言没有内置的多线程机制,必须调用操作系统的多线程功能来进行多线程程序设计
- 异常处理
- 使正常代码和错误处理代码分开,逻辑更清晰
1.2 JVM、JRE和JDK(小面经)
JVM(Java Virtual Machine):可以运行 Java 字节码(*.class)的虚拟计算机
JRE(Java Runtime Environment):java 运行时环境
JDK(Java Development Kit):java程序开发和运行环境
JDK包含JRE,JRE包含JVM
三种 Java 平台
- Java ME : 嵌入式
- Java SE : Java平台基础,用于开发桌面应用
- Java EE : 构建大规模基于 Web 的企业级项目
1.3 JDK 的下载和安装(网上安装教程很多)
Oracle官网:https://www.oracle.com
OpenJDK:idea中即可下载
建议使用Oracle的 jdk8 进行学习,后面学习框架时再使用高版本的OpenJDK
OracleJDK 和 OpenJDK 的区别?
- OracleJDK 版本每三年发布一次,OpenJDK版本每三个月发布一次;
- OpenJDK 是一个参考模型并完全开源,而 OracleJDK 是 OpenJDK 的一个实现,不完全开源
- OracleJDK 比 OpenJDK 更稳定。
- OracleJDK 根据二进制代码许可协议获得许可,而OpenJDK 根据 GPLv2 获得许可
1.4 JDK环境变量的配置(网上配置教程很多)
主要配置 JAVA_HOME、PATH、classpath三个环境变量。
JAVA_HOME :让 Tomcat 等软件查找到JDK的路径
PATH :让操作系统找到可执行命令文件,比如 javac.exe、java.exe
classpath :让 JVM找到必要的.class,都在 jar 包中,jdk1.5以上不用配置了
配置好环境可以在 cmd 中输入 java -version进行测试
1.5第一个 java 程序
编写 Hello.java 文件
public class Hello{ // public 权限修饰符 class 表明这是一个类 Hello 类名
public static void main(String[] args){ // 执行 java Hello 时的入口函数,固定写法
System.out.println("Hello java"); // 控制台打印输出语句,输出 Hello java
}
}
编译执行
流程分析
- 执行 javac Hello.java 会编译生成对应的class文件,文件名根据实际情况而定,这个案例会生成Hello.class文件
- 执行 java Hello 会调用对应的 main 方法(也就是入口函数)
修改 Hello.java 文件
class Hello{ // 取消public修饰
public static void main(String[] args){
System.out.println("Hello java");
}
}
编译执行 (生成 Hello.class 文件,执行结果正常)
修改 Hello.java 文件
class Hello1{
public static void main(String[] args){
System.out.println("Hello1 java");
}
}
编译执行(生成 Hello1.class 文件,执行结果正常)
修改 Hello.java 文件
class Hello1{
public static void main(String[] args){
System.out.println("Hello1 java");
}
}
class Hello2{
public static void main(String[] args){
System.out.println("Hello2 java");
}
}
编译执行(生成 Hello1.class 文件 和 Hello2.class 文件,执行结果正常)
总结:多个非public 类可以在同一个文件中被编译生成对应的 class 文件
修改 Hello.java 文件
public class Hello1{ // 文件名和 public 修饰的类名不一致
public static void main(String[] args){
System.out.println("Hello1 java");
}
}
编译执行(编译报错)
总结:
- 非public类:类名可以与文件名不同,不会报错。
- public类:类名必须与文件名相同,否则会报错。
修改 Hello.java 文件
public class Hello{
public static void main(String[] args){
System.out.println("Hello java");
}
}
class Hello1{
public static void main(String[] args){
System.out.println("Hello1 java");
}
}
编译执行(生成 Hello.class 文件 和 Hello1.class 文件, 执行结果正常)
修改 Hello.java 文件
public class Hello{
public static void main(String[] args){
System.out.println("Hello java");
}
}
public class Hello1{
public static void main(String[] args){
System.out.println("Hello1 java");
}
}
编译执行(编译报错)
总结:一个文件只能有一个public 修饰的类,且类名与文件名一致
1.6 自测
- java平台分为哪三个版本?
- JDK 安装后一般设置哪三个环境变量
- java源程序应该写在扩展名为什么的文本文件中。
- 编译java程序的命令是什么?运行java程序的命令是什么?
- java语言的特点是什么?
- JVM、JRE、JDK的区别和联系?
- OracleJDK和OpenJDK的区别?
- public 对类的修饰会有什么限定?