前言
本文是结合《Java程序设计》(黄岚、王岩、王康平)的摘要、上课ppt的笔记、b站《尚硅谷_java基础全套教程》。
1.Java语言基础
1.1 Java概述
1.1.1 Java起源
- 前身Oak软件;
- Java具有安全、跨平台、面向对象、简单、适用于网络等显著特点;
- 传统软件与具体实现环境有关,而java语言能在执行码(二进制码)上兼容使得开发的软件能运行在不同的机器(仅机器需要提供java语言解释器)上。
1.1.2 Java版本
- Java SE:标准版允许开发和部署在桌面、服务器、嵌入式环境和实时环境中使用Java应用程序。
- Java EE:企业版帮助开发和部署可移植、健壮、可伸缩且安全得服务器端Java应用程序。
- Java ME:微缩版为在移动设备和嵌入式设备(如手机、PDA、电视机顶盒、打印机等)上运行的应用程序提供了一个健壮且灵活得环境。适用于小型设备和智能卡。
1.1.3 Java语言的特征
- 简单性:略去了运算符重载、多重继承等概念;同时自动垃圾收集简化内存管理工作
- 面向对象:Java语言设计集中于对象及其接口,提供简单的类机制以及动态得接口模型
- 分布性:Java提供的类库可以处理TCP/IP协议,使得用户可以通过URL地址在网络上访问其他对象
- 鲁棒性:Java不允许类型强制转换与指针的使用,同时可以自动回收内存空间,极大避免了错误的产生
- 安全性:Java不支持指针,一切对内存的访问都必须通过对象的实例变量实现。(字节码执行的三个步骤:①类装载器将类文件加载到Java虚拟机,同时校验类文件规范;②字节码校验器检查类文件代码中是否存在非法操作;③当校验通过,Java解释器负责把该类文件解释成为机器码进行执行。)
- 体系结构中立:Java解释器生成与体系结构无关的字节码指令,只要安装了Java运行时系统,Java程序就可在任意处理器上运行。
- 可移植性:与平台无关的特性
- 解释执行:解释型语言通常不会进行整体性的编译和连接处理,相当于把编译型语言的编译和解释过程混合到同一时间完成,更方便程序移植,但不利于程序的执行效率
- 高性能:在特定的CPU上,Java字节码可以快速转换成机器码进行执行
- 多线程:Java编写程序运行在JVM中,在JVM内部,程序的多任务是通过线程实现的。
- 动态性:Java经常更新,适合不断发展的环境。
1.1.4 Java Application与Java Applet
区别:
区别 | Java Application | Java Applet |
运行方式 | 完整的程序,可以独立运行(需要有Java虚拟机支持) | 依附于HTML语言编写的网页 |
运行工具 | 可使用普通的Java解释器 | 需要通过网络浏览器才能执行 |
程序结构 | 有且仅有一个main方法 | 没有主类,但有一个从Java.Applet.Applet派生的类 |
可视化呈现 | 必须另外编写代码构建自己的图形界面 | 可以使用浏览器或者Appetviewer提供的图形用户界面 |
所受限制 | 无 | 对站点的磁盘文件不能进行读写操作 |
执行方面 | 在本地运行 | 一般放在服务器上,根据本地机的请求被下载到本地运行 |
1.1.5 Java与c/c++的比较
Java相较于c/c++删去了的:
- 全局变量
java程序中不能在所有类之外定义全局变量,只能通过在一个类中定义公用、静态的变量来实现一个全局变量。eg:
class GlobalVar{
public static global_var;
}
}
- goto语句
- 指针
- 内存管理语句(c:malloc()/free();c++:new/delete)
- 数据类型的支持:Java中数据类型总是匹配固定长度的位数,如规定int占32位
- 类型转换
- 头文件
- 结构和联合
- 预处理
1.1.6 类库与API文档
Java将功能相关的类放在同一个软件包中,所有的软件包集构成JavaAPI类库;所以JavaAPI是一整套用于实现各种基本功能和其他某些常用功能的Java编程的标准库,其中提供了各式各样的类来实现其语言功能。
常用的软件包:
- 语言包(java.lang)提供字符串处理、多线程处理、异常处理、数学函数处理等
- 实用程序包(java.util)提供散列表、堆栈、可变数组、时间、日期等
- 输入/输出包(java.io)用统一的“流”模型来实现所有格式的I/O
- 抽象图形用户接口包(java.awt)实现不同平台的计算机的图形接口部件
- 网络包(java.net)支持Internet的TCP/IP协议,提供了与Internet的接口
1.2 Java程序结构与运行机制
1.2.1 一个简单的Java程序
public class HelloWorldDemo {
public static void main(String[] args) {
System.out.println("Hello World!");
}
}
输出结果:
"Hello World!"
上述代码中可以学到:
- class用于声明一个类
- public表示访问权限为公共类,最多只能有一个公共类
- static指明该方法是一个类方法,可以通过类名直接调用
- void表示无返回
- **main()**是Java解释器在没有实例情况下的程序入口,只能有一个
- ()中的String[] args是传递给main()方法的参数,是字符串数组类型
运行程序的过程中,首先它会被保存到一个HelloWorldDemo.java
的源文件中,该文件名与公共类名一致,然后编译器进行编译生成字节码文件:
HelloWorldDemo.class
然后Java解释器运行该字节码文件解释为指定的机器码运行。
所以我们总结程序结构有:
- package语句——最多一句并放于非空注释行的第一句
- import语句——可以有0或多个,位于各种类定义之前
- public class Definition——定义公共类,最多一个,且注意Java源程序文件名与公共类命完全一致
- class Definition——类定义部分,允许0~多个
- interface Definition——接口定义部分,允许0~多个
1.2.2 Java运行机制
Java应用程序的生命周期包括编辑、编译、装载、解释、执行。
- 编译过程:Java在进行程序编译时将符号引用信息保留在字节码中,由解释器在运行过程中创建内存布局,然后再通过查表来确定一个方法所在的地址,保障了Java的可移植性和安全性。
- 解释与执行过程:由Java命令完成运行JVM字节码的工作。该过程分为三步
①装入:类装载器装入一个程序所需要的所有代码,各个类都有一个自己独立的名字空间,使得他们之间不会相互影响
②代码检验:解释器在符号引用与特定的地址空间之间建立对应关系及查询表,放置了代码对地址的非法访问
③代码执行:多采用解释执行方式,即解释器通过每次解释并执行一小段代码来完成Java字节码程序的所有操作
值得注意的是Java虚拟机的建立需要针对不同的软硬件平台做专门的实现,既要考虑处理器的型号,也要考虑操作系统的种类。
JDK(java开发工具包)=JRE(java运行环境)+Java开发工具(javac.exe,java.exe,javadoc.exe)
JRE=JVM(java虚拟机Q)+Java核心类库
1.4 Java编程规范
Java采用驼峰式命名规则,即多个单词首尾相连,除首字母外,后续单词的首字母一般为大写
1)包名:全小写的名词,中间可以用点分割开,如java.awt.event
2)类命:首字母大写,通常由多个单词合成一个类命,要求后续的每个单词的首字母大写,如class HelloWorldDemo
3)接口名:命名规则与类名相同
4)方法名:往往由多个单词合成,第一个单词通常为动词,首字母小写,后续的每个单词的首字母都大写,如isButtonPressed
5)变量名:往往由一个或多个名词合成,首字母小写,后续每个单词首字母大写,如userName
6)常量名:基本数据类型的常量名为全大写,如果由多个单词构成,可以用下划线隔开;如果是对象类型的常量,则是大小写混合,由大写字母把单词隔开,如int YEAR,int WEEK_OF_MONTH
1.5 课后习题
编写一个Java程序输出Hello World!,并分别通过控制台和Eclipse环境运行:
①Eclipse环境:
public class san316 {
public static void main(String[] args) {
System.out.println("Hello World!");
}
}
②控制台运行:
- 首先在cmd中输入java –version确定java环境变量是否已经配好
- 其次在cmd中输入javac –version 确定javac环境变量是否已经配好
- 在用cd命令转到要编译.java文件的路径(便捷方式可以先打开java文件所处文件夹,在路径处输入cmd)
- 用javac classname.java编译该java文件,将会在对应的文件夹中看到产生了一个.class文件;
- 其次,若要运行该.class文件,则直接输入java classname即可(不用加后缀名)
- 常用的DOS命令
命令 | 执行功能 |
dir | 列出当前目录下的文件以及文件夹 |
md | 创建目录 |
rd | 删除文件目录(成功删除的前提必须是该文件夹为空) |
cd | 进入指定目录 |
| 退回到上一级目录 |
cd\ | 退回到根目录 |
del | 删除文件或者是清空文件夹 |
exit | 退出dos命令行 |
echo 文本内容>文本名.doc | 创建文本文件 |