一、Java程序设计概述
目录
1.1 Java程序设计平台
1.2 Java白皮书的关键术语
1.3 Java applet与Internet
1.4 Java发展简史
1.5 关于Java的常见误解
1.1 Java程序设计平台
Java是一个完整的平台,有一个庞大的库,其中有很多可重用代码,以及一个提供诸如安全性、跨操作系统的可移植性以及自动垃圾收集等服务的执行环境。
1.2 Java白皮书的关键术语
关键术语 | 相关理解 |
---|---|
简单性 | 相对于C++来说少了很多很少使用难易理解的特性,这些特性带来的不便要远大于带来的便利性,没有头文件、指针、结构、联合、操作符重载、虚基类等。 |
面向对象 | 注重数据和对象的接口,注重抽象,和C++不同在于没有多重继承,以接口取代 |
分布式 | 链接web服务器 |
健壮性 | 早期的问题检测、后期动态(运行时)的检测,以及消除容易出错的情况,Java与C++最大的不同在于Java采用的指针模型可以消重写内存和损坏数据的可能性。java可以检测出其他语言的代码只能在运行时才能检测出的错误 |
安全性 | 在设计之初就能防范各种攻击:运行时堆栈溢出(很多病毒和蠕虫的攻击手段)、破坏自己进程空间之外的内存、未经授权读取文件 |
体系结构中立 | 体系结构中立主要考Java虚拟机来实现,Java程序首先编译成虚拟机可接受的字节码文件,而字节码是与系统结构无关的,只要是有Java可运行的虚拟机环境就可以在各种平台上运行Java程序,可以把Java虚拟机看成一个层次,它可以将字节码文件翻译成本机的机器代码执行,Java将最常使用的指令翻译成机器代码实现叫做【即时编译】,而且Java虚拟机还可以在检测指令序列的行为监控其安全性 |
可移植性 | 可移植性的实现更多的依赖于数据的格式是固定的,这样就避免了很多移植过程会出现的可能性,基本数据类型的大小和相关运算都有明确的说明,而且不仅Java程序是可移植的,Java API也比原生API的质量要好 |
解释型 | Java解释器可以在任何移植了Java解释器的地方运行Java字节码 |
高性能 | 字节码可以在运行时动态的转换成对应这个应用特定的机器代码;即时编译可以提供更多的有效信息——监控频繁执行的代码并进行优化;消除函数调用(内联);即时编译器知道哪些类已经被加载如果一个特定的函数不会被覆盖就会实施内联,必要的时候也可取消 |
多线程 | 多线程可以带来更快的响应和实时行为,由于摩尔定律,对于更强大的处理器性能的追求要小于如何让更多的处理器同时协调工作 |
动态性 | 为正在进行的程序动态的添加代码,很容易的实现程序的演进 |
1.3 Java applet与Internet
Java applet是运行在网页上的Java程序,只需一个可以启用Java的浏览器即可运行,applet会插入成为页面的一部分,可以动态的和用户交互。
1.4 Java发展简史
- 最初是想设计一种小型的计算机语言,主要用于像有线电视机转换盒这类消费设备,需要代码短小,紧凑且与平台无关。——Green项目
- Java的三个版本:
- Standard Edition
- Micro Edition
- Enterprise Edition
- Java 5.0是自1.1以来对Java语言作出重大改进的版本,增加了泛型类型(generic type),其挑战性在于添加这一特性而不对虚拟机进行任何的修改。还增加了几个语言特性:for each循环、自动装箱拆箱和注解。
- Java 8近20年改动最大的版本,增加了函数式编程。
- Java 9引入模块
1.5 Java常见误解
- Java是一种HTML的扩展
HTML是一种描述网页结构的方式,Java是一种程序设计语言,二者除了在网页上放置Java applet的HTML扩展之外没有任何关系。 - 使用XML,所以不需要Java
XML是一种描述数据的方式,可以使用任何一种语言去处理XML数据 - 程序设计语言的成功更多地取决于其支撑系统的能力,而不是语言的精巧性。
- JavaScript是Java的简易版
JavaScript是一种可以在网页中使用的脚本语言,Java是强类型的,编译器能捕获类型滥用导致的很多错误,而在JavaScript中,只有当程序运行时才能发现这些错误,所以消除错误更费劲。
二、Java程序设计环境
目录
2.1 安装Java开发工具包
相关术语 | 解释 |
---|---|
Java Development Kit(Java开发工具包) | JDK:编写Java程序的程序员使用的软件 |
Java Runtime Environment(Java运行时环境) | JRE:运行Java程序的用户使用的软件(只包含虚拟机,只是可以运行) |
Server JRE(服务器JRE) | 在服务器上运行Java程序 |
Standard Edition(标准版) | 用于桌面或简单服务器应用的Java平台 |
Enterprise Edition(企业版) | 用于复杂服务器应用的Java平台 |
Micro Edition(微型版) | 用于小型设备的Java平台 |
Java FX | 用于图形化用户界面的一个备选工具包,在Java 11之前的JavaSE的某些版本中提供 |
OpenJDK | JavaSE的一个免费开源实现 |
Software Development Kit (软件开发工具包) | SDK:一个过时的术语用于描述1998~2006年之间的JDK |
- 只维护64位的,需要64位系统
- 需要下载JDK而不是JRE
- 对于Linux可以砸RPM文件和.tar.gz文件中选择,建议使用后者
对于Mac:/Library/Java/JavaVirtualMachines/jdk-11.0.x.jdk/Contents/Home
会把JDK安装在这个目录之下,安装JDK时,还需要另外完成一个步骤:将jdk/bin目录添加到可执行路径中。
2.2 使用命令行工具
常用命令行 | 解释 |
---|---|
javac | javac welcome.java 编译Java文件生成.class字节码文件 |
java | java welcome 执行生成的Java字节码文件 |
javap | 反汇编查看字节码文件,还有相应的选项可以查看有关信息 |
常见错误汇总:
1. Bad command or file name/javac:command not found
//反复检查安装是否有问题,特别是可执行路径的设置
2. java.lang.NoClassDefFoundError
//检查出错的类型名,如果收到了welcome的错误消息说明类名没有大写,如果收到了Welcome/java的错误消息说明错误的键入了java Welcome.java
3. java + classname 没有找到类
//检查是否有人设置了系统的CLASSPATH环境变量
4. 如果javac报告一个错误无法找到Welcome.java应该检测目录中是否有这个文件
2.3 使用集成开发环境
IDEA
2.4 JShell
JShell程序提供了一个“读取-计算-打印循环”的模式。
直接在终端中输入jshell
启动JShell
输出结果$1表示这个结果可以用于将来的计算
如果要多次使用一个变量,可以直接使用变量名进行定义,但是要遵守Java语法
可以使用Tab
键自动补全,查看某个包中的内容
//要重复执行一条命令,可以连续按“👆“键,直到看到想要重新运行或编辑的命令行,使用👈或👉键移动光标,enter键执行