1. 计算机基础

1.1. 硬件与软件

1.1.1. 硬件

可以看得见, 摸的着的电子原器件

程序员关注的焦点只有一个 ——内存,内存中全部都是一个个的存储单元

1.1.2. 软件

必须依赖硬件的存在而存在, 一系列的指令和数据的集合.

1.1.2.1. 应用软件

为了完成某个特定的功能的软件;运行在OS上的普通软件

1.1.2.2. 系统软件

操作系统OS, 对硬件的直接使用和管理;通过OS才能使用到硬件.

1.2. 人机交互方式

人通过OS使用电脑

  1. 图形化界面 使用简单、直观 (GUI)
  2. 命令行方式 使用复杂、需要记住大量的命令(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. 练习

  1. 练习 : 创建目录 D:\MyWork\JavaSE\day01\code
  2. 两个特殊目录

. 目录 代表的是当前目录

.. 目录 代表的是当前目录的父目录(上级目录)

  1. Cd \ 作用是直接回到根目录
  2. 相对路径:mywork\javase\day01\code 这是路径, 是一个相对路径, 相对当前目录而言。.\mywork\javase\day01\code 和上面的写法等价
  3. 绝对路径:D:\MyWork\JavaSE\day01\code 这也是路径, 是一个绝对路径. 特点是以根目录为开始的.
  4. 不用 cd \ 如何回到根目录:cd ../../../..

1.4. 命令分类

1.4.1. 内部命令

操作系统内置的, 直接执行.

1.4.2. 外部命令

保存在硬盘上的可执行文件. 在执行时 操作系统必须能够找得到, 需要依赖path环境变量. 在命令行输入 path命令即可查看配置.

2. 语言的发展历程

第一代 打孔机 面向硬件开发

第二代 汇编 面向CPU开发

第三代 c/c++ 面向OS, 通过系统调用完成功能.

第四代 java 面向VM, VM是用软件模拟的一台机器, 此机器的所有硬件规格都是不变的统一的.

3. * Java的8个特点

  1. 简单 : 相对于C/C++简单
  2. 面向对象 : 纯面向对象语言, 和面向过程相对. 面向过程关注的是问题解决的步骤. 面向对象关注的是谁能解决问题, 找谁.
  3. 分布式 : 基于网络的多主机协作.
  4. 健壮
    1. 强类型,所有数据都必须有特定的数据类型
    2. 异常处理, 垃圾自动收集机制。垃圾 : 内存中不再使用的空间但是仍然被占着, 清理垃圾就是标记内存为可用
    3. 指针安全化(引用reference)
  5. 安全 : 所有程序必须经过类加载器(ClassLoader) 来检查
  6. 跨平台 : 因为java程序依赖的JVM是跨平台.
  7. 性能好 : java程序是编译型, 不是解释型. 热点代码(hotspot)编成了汇编。
  8. 多线程 : 提高吞吐量, 最大化利用CPU

4. Java两种核心机制

Java虚拟机(Java Virtal Machine)

垃圾收集机制(Garbage Collection)

5. JDK JRE JVM

  1. JDK = JRE + Java的开发工具(Javac Java Javadoc
  2. JRE = JVM + Java核心类库

javac 是编译器

java 是运行器

6. 路径

6.1. 设置JAVA_HOME

JAVA_HOME环境变量。它指向jdk的安装目录,Eclipse/NetBeans/Tomcat等软件就是通过搜索JAVA_HOME变量来找到并使用安装好的jdk。

  1. 为了方便引用。比如,你JDK安装在 /Library/Java/JavaVirtualMachines/jdk1.8.0_241.jdk/Contents/Home 目录里,则设置JAVA_HOME为该目录路径,那么以后你要使用这个路径的时候,只需输入$JAVA_HOME即可避免每次引用都输入很长的路径串;
  2. 归一原则。当你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文件步骤

  1. 将 Java 代码编写到扩展名为 .java 的文件中。在D:\MyWork\JavaSE\day01\code目录下新建一个文本文件, 并改名为Hello.java然后用NotePad++打开编辑此文件
  2. 通过 javac 命令对该 java 文件进行编译。启动命令行控制台, 把工作目录切换到刚才的目录,D:\MyWork\JavaSE\day01\code 以这个目录为工作目录, 执行命令 javac Hello.java 编译的结果会产生一个Hello.class字节码文件.
  3. 通过 java 命令对生成的 class 文件进行运行。仍然是在刚才的命令行窗口中, 还是以刚才的目录为当前工作目录, 执行命 java Hello

7.2. 程序执行的过程

主方法 : 入口方法, 写法固定
public static void main(String[] args) {}
java Test
java Hello

程序执行的过程 :

  1. Java 的执行作用是创建JVM
  2. Hello 在创建好的JVM中通过类加载器加载主类, 找到主类中的主方法, 然后执行它.
  3. 主方法一旦结束, 进程也结束, 同时JVM销毁.

7.3. * 类的结构

7.3.1. 大体结构

类 { //类是java程序的基本单位
    方法1 {//一个功能的单位体,方法不可以嵌套
        语句1;//语句是java程序最小执行单位
        语句2;
        ...
    }

    方法2 {
    }
}

7.3.2. 类 公共类

主类 : 包含主方法(入口方法)的类.
公共类 : 被public修饰的类就称为公共类

注意

  1. 公共类的类名必须和文件名一致;
  2. 所以一个源文件中, 只能有一个公共类. 非公共类不限.
// 注释 : 源码中一些帮助性提醒性的文字, 它并参与程序执行, 在编译时被编译器丢弃掉. 这个注释称为单行注释, 只对当前行有用

/* 
   多行注释, 有开始有结束
   还是注释, 多行注释不可以嵌套
*/

/**
  这个是文档注释, 它有特殊作用.
*/

/* 
    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. 注意

  1. 对程序的任何修改, 都必须即时保存文件并必须重新编译才能生效.
  2. Java源文件以 java 为扩展名。源文件的基本组成部分是类(class),如本类中的 HelloWorld 类。
  3. 一个源文件中最多只能有一个 public 类。其它类的个数不限,如果源文件包含一个 public 类,则文件名必须按该类名命名。
  4. Java应用程序的执行入口是 main()方法。它有固定的书写格式:public static void main(String[] args) {...}
  5. Java语言严格区分大小写。
  6. ava方法由一条条语句构成,每个语句以;结束。
  7. 大括号都是成对出现的,缺一不可。