1. 计算机基础
1.1. 硬件与软件
1.1.1. 硬件
可以看得见, 摸的着的电子原器件
程序员关注的焦点只有一个 ——内存,内存中全部都是一个个的存储单元
1.1.2. 软件
必须依赖硬件的存在而存在, 一系列的指令和数据的集合.
1.1.2.1. 应用软件
为了完成某个特定的功能的软件;运行在OS上的普通软件
1.1.2.2. 系统软件
操作系统OS, 对硬件的直接使用和管理;通过OS才能使用到硬件.
1.2. 人机交互方式
人通过OS使用电脑
- 图形化界面 使用简单、直观 (GUI)
- 命令行方式 使用复杂、需要记住大量的命令(CLI) 优点 : 高效直接
1.3. Windows控制台与DOS
1.3.1. 启动控制台
Win + r -> cmd -> 回车
就可以执行命令(操作系统可以识别的)
DOS 磁盘操作系统(disk operating system), 基于文件系统工作的. 文件用目录来保存管理的.
命令行必须在某个目录下工作.
C:\Users\pauliuyou
这是一个路径(path) 一条路, 一条路的尽头是一个文件或目录
前导符>
左面的路径表示的目录就称为当前目录, 工作目录, 当前工作目录.
1.3.2. DOS命令
1.3.2.1. 常用DOS命令
dir
列出当前目录下的文件以及文件夹
md
创建目录
rd
删除目录
cd
进入指定目录
cd ..
退回到上一级目录
cd /
退回到根目录
del
删除文件
exit
退出 dos 命令行
1.3.2.2. 练习
- 练习 : 创建目录
D:\MyWork\JavaSE\day01\code
- 两个特殊目录
.
目录 代表的是当前目录
..
目录 代表的是当前目录的父目录(上级目录)
Cd \
作用是直接回到根目录- 相对路径:
mywork\javase\day01\code
这是路径, 是一个相对路径, 相对当前目录而言。.\mywork\javase\day01\code
和上面的写法等价 - 绝对路径:
D:\MyWork\JavaSE\day01\code
这也是路径, 是一个绝对路径. 特点是以根目录为开始的. - 不用 cd \ 如何回到根目录:
cd ../../../..
1.4. 命令分类
1.4.1. 内部命令
操作系统内置的, 直接执行.
1.4.2. 外部命令
保存在硬盘上的可执行文件. 在执行时 操作系统必须能够找得到, 需要依赖path环境变量. 在命令行输入 path命令即可查看配置.
2. 语言的发展历程
第一代 打孔机 面向硬件开发
第二代 汇编 面向CPU开发
第三代 c/c++ 面向OS, 通过系统调用完成功能.
第四代 java 面向VM, VM是用软件模拟的一台机器, 此机器的所有硬件规格都是不变的统一的.
3. * Java的8个特点
- 简单 : 相对于C/C++简单
- 面向对象 : 纯面向对象语言, 和面向过程相对. 面向过程关注的是问题解决的步骤. 面向对象关注的是谁能解决问题, 找谁.
- 分布式 : 基于网络的多主机协作.
- 健壮
- 强类型,所有数据都必须有特定的数据类型
- 异常处理, 垃圾自动收集机制。垃圾 : 内存中不再使用的空间但是仍然被占着, 清理垃圾就是标记内存为可用
- 指针安全化(引用reference)
- 安全 : 所有程序必须经过类加载器(ClassLoader) 来检查
- 跨平台 : 因为java程序依赖的JVM是跨平台.
- 性能好 : java程序是编译型, 不是解释型. 热点代码(hotspot)编成了汇编。
- 多线程 : 提高吞吐量, 最大化利用CPU
4. Java两种核心机制
Java虚拟机(Java Virtal Machine)
垃圾收集机制(Garbage Collection)
5. JDK JRE JVM
JDK = JRE + Java的开发工具(Javac Java Javadoc)
JRE = JVM + Java核心类库
javac 是编译器
java 是运行器
6. 路径
6.1. 设置JAVA_HOME
JAVA_HOME
环境变量。它指向jdk的安装目录,Eclipse/NetBeans/Tomcat等软件就是通过搜索JAVA_HOME
变量来找到并使用安装好的jdk。
- 为了方便引用。比如,你JDK安装在
/Library/Java/JavaVirtualMachines/jdk1.8.0_241.jdk/Contents/Home
目录里,则设置JAVA_HOME
为该目录路径,那么以后你要使用这个路径的时候,只需输入$JAVA_HOME
即可避免每次引用都输入很长的路径串; - 归一原则。当你JDK路径被迫改变的时候,你仅需更改
JAVA_HOME
的变量值即可,否则你就要更改任何用绝对路径引用JDK目录的文档,要是万一你没有改全,某个程序找不到JDK,后果是可想而知的——系统崩溃!
如果你只是用eclipse开发的话可以不设置。其实添加JAVA_HOME
环境变量的目的只是辅助,完全可以如你所说,写成具体的路径如果让我说出添加的好处,给你举个简单的例子:我在把jdk1.6.0_16更新到jdk1.6.0_17。在官网上下载了jdk1.6.0_17后,直接运行安装,我的电脑里之前的版本是jdk1.6.0_16,于是安装后查看发现,/Library/Java/JavaVirtualMachines/
下,有两个jdk文件夹——jdk1.6.0_16 和 jdk1.6.0_17,JAVA_HOME
的作用体现出来,直接把环境变量稍微更改就好。不仅是jdk升级,有时我们必须使用某个软件自带的jdk,而不能使用电脑原装的jdk时(这种情况偶尔遇到,学struts时的一个软件),使用JAVA_HOME
变量非常方便
6.2. 设置CLASSPATH
CLASSPATH
环境变量的作用是指定类搜索路径。要使用已经编写好的类,前提当然是能够找到它们了,JVM就是通过CLASSPATH
来寻找类的。我们需要把jdk安装目录下的lib子目录中的dt.jar和tools.jar设置到CLASSPATH
中,当然,当前目录.
也必须加入到该变量中。这个变量设置的目的是为了程序能找到相应的.class
文件,举个例子:你编译一个JAVA程序—-A.java,会得到一个 A.class 的类文件,你在当前目录下执行 java A
,将会得到相应的结果(前提是你已经设置CLASSPATH
为.
)。 现在,你把 A.class 移到别的目录下./dir
执行java A,将会有NoClassDefFindError
的异常,原因就是找不到 .class 文件,现在你把CLASSPATH增加为./dir
再运行java A
, 一切正常,java命令通过CLASSPATH
找到了.class文件。
6.3. 设置PATH
为了在任何文件路径下,都可以执行 Java 的开发工具 Java、Javac、Javadoc
JAVA_HOME = bin的上一层目录
path = $JAVA_HOME/bin
道理很简单,你想在任何时候都使用 $JAVA_HOME\bin\java
等来执行java命令吗?当然不会。 于是,你可以选择把 $JAVA_HOME\bin
添加到PATH路径下,这样,我们在任何路径下就可以仅用java来执行命令了(当你在命令提示符窗口输入你的代码时,操作系统会在当前目录和PATH
变量目录里查找相应的应用程序,并且执行)。PATH
环境变量的作用是指定命令搜索路径,在dos命令行下面执行命令如javac编译java程序时,它会到PATH
变量所指定的路径中查找看是否能找到相应的命令程序。我们需要把jdk安装目录下的bin目录增加到现有的PATH
变量中,bin目录中包含经常要用到的可执行文件如 javac/java/javadoc 等待,设置好PATH
变量后,就可以在任何目录下执行javac/java 等工具了。
For Windows
验证JDK安装是否成功
win + r -> cmd -> 回车
执行java -version 如果出错, 说明环境变量未配置好.
配置环境变量 :
1) 打开JDK安装目录, 找到bin子目录, 进入bin子目录
2) 在地址栏单击, 选择所有内容并复制成文本
3) 右击 "我的电脑" -> "属性" 打开 "系统属性" 配置窗口
4) 选择左侧的 "高级系统设置", 在"系统属性"窗口上面选择 "高级" -> 选择"环境变量"
5) 在"环境变量" 窗口中的下面"系统变量" 中设置
6) 在"系统变量" 列表中找到"Path", 点击 "编辑"
7) 在"编辑环境变量" 窗口中, 点击右侧"新建", 把刚才复制好的内容粘贴进来
8) 把刚才新建的项目上移到最上面, 作用是覆盖原来装过的所有JDK
再次验证JDK安装是否成功
win + r -> cmd -> 回车
执行java -version 如果出现版本提示, 说明安装OK
执行javac -version 查看版本和上面的版本是否一致, 如果一致, 说明完全OK
7. Java文件
7.1. 编写Java文件步骤
- 将 Java 代码编写到扩展名为 .java 的文件中。在D:\MyWork\JavaSE\day01\code目录下新建一个文本文件, 并改名为Hello.java然后用NotePad++打开编辑此文件
- 通过 javac 命令对该 java 文件进行编译。启动命令行控制台, 把工作目录切换到刚才的目录,
D:\MyWork\JavaSE\day01\code
以这个目录为工作目录, 执行命令javac Hello.java
编译的结果会产生一个Hello.class字节码文件. - 通过 java 命令对生成的 class 文件进行运行。仍然是在刚才的命令行窗口中, 还是以刚才的目录为当前工作目录, 执行命
java Hello
7.2. 程序执行的过程
主方法 : 入口方法, 写法固定
public static void main(String[] args) {}
java Test
java Hello
程序执行的过程 :
- Java 的执行作用是创建JVM
- Hello 在创建好的JVM中通过类加载器加载主类, 找到主类中的主方法, 然后执行它.
- 主方法一旦结束, 进程也结束, 同时JVM销毁.
7.3. * 类的结构
7.3.1. 大体结构
类 { //类是java程序的基本单位
方法1 {//一个功能的单位体,方法不可以嵌套
语句1;//语句是java程序最小执行单位
语句2;
...
}
方法2 {
}
}
7.3.2. 类 公共类
主类 : 包含主方法(入口方法)的类.
公共类 : 被public修饰的类就称为公共类
注意:
- 公共类的类名必须和文件名一致;
- 所以一个源文件中, 只能有一个公共类. 非公共类不限.
// 注释 : 源码中一些帮助性提醒性的文字, 它并参与程序执行, 在编译时被编译器丢弃掉. 这个注释称为单行注释, 只对当前行有用
/*
多行注释, 有开始有结束
还是注释, 多行注释不可以嵌套
*/
/**
这个是文档注释, 它有特殊作用.
*/
/*
public 是一个修饰符
class 是类, 定义声明一个类
Test 是类名, 类名后面的一对{} 及其中的内容 称为类体(body)
类 = 类头(类签名) + 类体
类是java程序的最基本单位.
类中可以包含若干方法.
主类 : 包含主方法(入口)的类就称为主类
*/
public class Test {
/*
这是一个方法, 方法也称为函数, 是某个独立的功能体单位
public 是公共的, static 静态的 都是修饰符
void main(String[] args) 方法的签名
void 返回值类型, 是空类型, 表示方法没有返回值
main 是方法名(标识符) main是主要的意思, 这个方法称为主方法
(String[] args) 称为参数列表
方法名后面的一对{} 及其中的内容 称为方法体
方法 = 方法头(修饰符+方法签名) + 方法体;
方法和方法必须是平行关系, 方法中不可以嵌套方法.
main方法称为主方法, 程序的入口方法, 程序总是从main方法开始执行...
*/
public static void main(String[] args) {
// 语句 : java程序的最小执行单位, 语句必须以;结尾
// 语句必须隶属于某个方法.
System.out.println("这是字符串内容, 可以随便写");
System.out.println("这也是一个语句");
}
/*
public static void main(String[] args) {
System.out.println("main2");
}*/
// 这是一个普通方法, 普通方法不是首先执行
public static void test() {
System.out.println("test()...");
}
}
// 此类和上面的类不冲突, 可以在源文件中共存.
// 非主类
class Test2 {
public static void test2() {
System.out.println("test2()...");
}
}
// 主类 : 包含了主方法
class Test3 {
public static void main(String[] args) {
System.out.println("Test3 main()....");
}
}
7.3.3. 注意
- 对程序的任何修改, 都必须即时保存文件并必须重新编译才能生效.
- Java源文件以
java
为扩展名。源文件的基本组成部分是类(class),如本类中的HelloWorld
类。 - 一个源文件中最多只能有一个
public
类。其它类的个数不限,如果源文件包含一个public
类,则文件名必须按该类名命名。 - Java应用程序的执行入口是
main()
方法。它有固定的书写格式:public static void main(String[] args) {...}
- Java语言严格区分大小写。
- ava方法由一条条语句构成,每个语句以
;
结束。 - 大括号都是成对出现的,缺一不可。