B站Java小白入门实践【从项目入手跨越零基础】动力节点老杜笔记

零基础小白应该从这里开始

第一章 Java开发环境搭建

1. 项目演示

  • 什么是PDT4J教学法

    • 专门为Java语言准备的项目驱动式教学。
  • 项目名:酒店管理系统

  • 谁用这个系统:酒店前台

  • 这个系统包含哪些功能:

    • 登录系统
    • 查看房间列表(查看所有房间状态)
    • 预订房间
    • 退房
    • 退出系统

2. Java是什么以及Java的跨平台

  • 什么是语言
  • 什么是计算机语言
    • 计算机语言也是一套标准,某个组织或者某个团队开发的,制定的。
    • 计算机语言可以让我们人机交互。
    • 计算机语言也有很多种类:
      • C语言(面向过程的)
      • C++(半面向对象)
      • Java(完全面向对象,Java底层是C++语言写的。)
      • ....
  • Java是什么
    • Java是一门计算机编程语言,完全面向对象的,开源免费的。
    • Java之父:James Gosling(Sun公司的)
    • Java语言诞生于1995年。
    • Java语言的logo:一杯冒着热气的咖啡。
  • Java能做什么
    • 企业级管理系统
    • 互联网分布式系统
    • 安卓手机软件、游戏
    • 微型设备的内核程序
  • Java特性之跨平台
    • 什么是跨平台?Java程序只需要编写一次,可以运行在不同的操作系统当中。
    • 操作系统:windows操作系统、苹果本的操作系统MacOS、Linux操作系统....
    • 在不同的操作系统中安装不同版本的JVM,JVM是Java虚拟机,Java虚拟机屏蔽了各个操作系统之间的差异。

3. Java开发环境搭建

  • JDK的安装
    • 关于JDK、JRE、JVM相关术语
      • JDK(Java Development Kit)是 Java 语言的软件开发工具包,是整个java开发的核心,它包含了JAVA的运行环境和Java系统类库。
      • JRE(Java Runtime Environment)Java运行环境是一个软件,JRE可以让计算机系统运行Java应用程序。JDK安装之后会自带一个JRE。
      • JVM(Java Virtual Machine)JRE的内部有一个Java虚拟机以及一些标准类库(Class Library)。
    • JDK、JRE、JVM三者关系?
      • JDK安装之后会自带JRE,JRE有了之后,JRE内部有JVM和标准类库。
      • JDK包含JRE,JRE包含JVM。
    • JDK的下载
      • http://www.oracle.com
      • 不同的操作系统需要安装不同版本的JDK。有windows版本的,linux版本的,MacOS版本的。我们这里使用windows版。
      • 这里学习的Java版本是:Java16.(2021年3月份的时候发布的。)
    • JDK的安装
      • JDK的根目录下有一个bin目录,bin目录有很多命令文件,例如javac.exe,java.exe,其中javac是负责编译Java程序的,其中java是负责运行java程序的。
      • 目前我们没有使用集成开发环境,对于编译和运行java程序,我们是需要windows的dos命令窗口的。怎么打开windows的dos命令窗口呢?
        • win + R,输入cmd回车即可。
  • 环境变量的配置
    • path
      • path环境变量不属于Java,和Java是没有关系的,path环境变量隶属于windows操作系统。path环境变量是给windows操作系统指路的。例如你输入一个ipconfig命令,这个时候windows操作系统会从path环境变量的所有路径中搜索,直到搜索到为止,找到后执行,如果没有找到则报错。
      • path环境变量配置的时候,path的值是多个路径,路径和路径之间采用英文半角分号隔开。
      • javac -version 可以查看编译器的版本号。
      • java -version 可以查看JVM的版本号。

4. Java第一个程序的实现

  • Java的加载与执行原理
    • Java程序从开发到运行,包括两个阶段,一个是编译期,一个是运行期。
    • JVM的存在屏蔽了操作系统之间的差异,这样可以保证Java程序只需要编写一次,然后可以运行在不同的操作系统上。所以编译期可以在windows上完成,运行期完全可以放到Linux环境当中运行。
    • java源代码的编写需要在Xxxx.java文件中进行(所以,开发第一步是新建Xxxx.java源文件)
      • 在java源文件中编写java源代码,程序员的日常开发,日常写代码就是在这个文件中完成的。
    • java源文件是无法直接运行的,需要经过一个编译的过程。java源文件经过javac命令进行编译之后,会生成class文件,而class文件被称为字节码文件。最终Java虚拟机执行的是class程序。
    • 一个java源文件可以生成1~多个class文件。
    • 实际上生成了class文件之后,java源文件就可以删除了,因为最终执行的是class文件。但是最好不要删除,因为可能运行结果不是你想要的,这个时候还需要回去再重新修改java源代码,重新编译生成新的class文件,重新运行。
    • javac命令是负责编译的,编译期最主要是编译器检查java源代码是否符合java的语法规则,如果符合java语法规则,编译通过了,才会生成class字节码文件。
    • 术语:类名。假设生成的class文件名叫做A.class,那么我们称A为A类。叫做B.class,那么我们称B为B类。
    • 注意:生成的class文件不是二进制码。也就是说字节码不是二进制码,如果是二进制码的话,操作系统是可以直接执行的。
    • 类加载器ClassLoader去硬盘上找Xxxx.class文件,找到之后,直接将Xxxx装载到JVM当中。
    • java F,这样的话类加载器就会去硬盘上找F.class文件。java D,这样的话类加载器就会去硬盘上找D.class文件。
  • 文本编辑器Sublime的安装
    • 一个比记事本功能强大一点的文本编辑器。
  • 编写第一个Java程序
    • 第一个Java程序的目的是为了测试电脑上的java环境好用不好用。所以必须要关心第一个java程序是什么意思,照抄就行。大小写严格照抄。
    • 新建一个文件:HelloWorld.java。
    • 使用Sublime文本编辑器打开HelloWorld.java文件,并且编写java源代码。
  • 编译
    • javac命令可以编译java源程序。
    • javac命令怎么用:
      • javac java文件的路径
      • javac E:\Java零基础入门到项目实战\源码\HelloWorld.java 【这个路径是绝对路径】
      • javac HelloWorld.java 【这个路径是相对路径,需要当前路径下存在HelloWorld.java文件才可以使用这种方式。】
  • 运行
    • java 命令可以运行java程序。
    • java命令怎么用?
      • java 类名 (注意:不是java A.class,不是java B.class,是java A ,java B)
      • java后面不是文件的路径,java后面跟的是类名。(你记住就行。)
      • 运行java程序的第一步:必须先让DOS命令窗口切换到class文件所在的目录下才行。

5. 打印酒店管理系统的主页面

  • 解释HelloWorld程序
  • 单行注释
  • 怎么输出中文
  • 输出"120"和120有什么区别。
  • 打印酒店管理系统欢迎页面
  • 解决 \ 带来的问题。

6. 关于课件与服务群的说明

第二章 Java基础语法

1. 标识符与关键字

  • 标识符

    • 什么是标识符
      • 凡是在java源代码当中,程序员有权利去命名的单词,都是标识符。
    • 标识符可以标识什么
      • 类名
      • 方法名
      • 变量名
      • 常量名
      • 接口名....
    • 标识符命名规则(不符合命名规则的单词,编译器是会报错的。规则就是一种语法要求。)
      • 标识符只能由数字、字母、下划线、美元符号$组成,不能含有其它符号。
        • 字母包括:英文字母、中文、日文等等...
      • 标识符不能以数字开头。
      • 关键字不能做标识符。
      • 标识符严格区分大小写:A和a是不一样的。HelloWorld和helloworld是不一样的。
      • 标识符理论上没有长度的限制,但最好不要太长。
    • 标识符命名规范(规范:行业的默认的编写规范。大家都这么写,你最好也遵从这个规范。)
      • 当你的程序不符合规范的时候,编译没问题,但是对于别人来说,可能可读性比较差。符合命名规范的程序,可读性比较强。大家一看就明白。
      • 命名规范包括哪些呢?
        • 类名、接口名:首字母大写,后面每个单词的首字母大写。例如:HelloWorld、StudentService、OrderService
        • 方法名、变量名:首字母小写,后面每个单词的首字母大写。例如:getName、userAge
        • 常量名:全部大写,单词和单词之间采用下划线衔接,例如:LOGIN_SUCCESS、MATH_PAI
        • 见名知意:一看到这个名字就知道这个程序是干啥的。
        • 遵循驼峰命名方式,单词和单词之间很好的区别。
    • 要求很快判断出标识符是否合法
      • public1(合法)
      • 1public(不合法:不能以数字开头)
      • hello world (不合法:不能有空格)
      • $abc (合法)
      • _abc (合法)
      • class (不合法:关键字不能做标识符)
      • 中文 (合法)
      • ab% (不合法:标识符中不能含有%。)
    • 注意:在sublime工具中,默认以绿色高亮显示的,都是标识符。
  • 关键字

    • 什么是关键字

      • java语言中所有的关键字都是全部小写的。无一例外。
      • 开发java语言的时候,提前定义好的一些具有特殊含义的单词,就是关键字。
      • 关键字是不能拿来做标识符的。关键字相当于语言自身已经将该单词占有了,我们程序员不能用。当然也不能随便写。
      • public static void class,这些都是关键字。
    • 关键字有哪些

      关键字 含义
      abstract 表明类或者成员方法具有抽象属性
      assert 断言,用来进行程序调试
      boolean 基本数据类型之一,声明布尔类型的关键字
      break 提前跳出一个块
      byte 基本数据类型之一,字节类型
      case 用在switch语句之中,表示其中的一个分支
      catch 用在异常处理中,用来捕捉异常
      char 基本数据类型之一,字符类型
      class 声明一个类
      const 保留关键字,没有具体含义
      continue 回到一个块的开始处
      default 默认,例如,用在switch语句中,表明一个默认的分支。Java8 中也作用于声明接口函数的默认实现
      do 用在do-while循环结构中
      double 基本数据类型之一,双精度浮点数类型
      else 用在条件语句中,表明当条件不成立时的分支
      enum 枚举
      extends 表明一个类型是另一个类型的子类型。对于类,可以是另一个类或者抽象类;对于接口,可以是另一个接口
      final 用来说明最终属性,表明一个类不能派生出子类,或者成员方法不能被覆盖,或者成员域的值不能被改变,用来定义常量
      finally 用于处理异常情况,用来声明一个基本肯定会被执行到的语句块
      float 基本数据类型之一,单精度浮点数类型
      for 一种循环结构的引导词
      goto 保留关键字,没有具体含义
      if 条件语句的引导词
      implements 表明一个类实现了给定的接口
      import 表明要访问指定的类或包
      instanceof 用来测试一个对象是否是指定类型的实例对象
      int 基本数据类型之一,整数类型
      interface 接口
      long 基本数据类型之一,长整数类型
      native 用来声明一个方法是由与计算机相关的语言(如C/C++/FORTRAN语言)实现的
      new 用来创建新实例对象
      package
      private 一种访问控制方式:私用模式
      protected 一种访问控制方式:保护模式
      public 一种访问控制方式:共用模式
      return 从成员方法中返回数据
      short 基本数据类型之一,短整数类型
      static 表明具有静态属性
      strictfp 用来声明FP_strict(单精度或双精度浮点数)表达式遵循IEEE 754算术规范
      super 表明当前对象的父类型的引用或者父类型的构造方法
      switch 分支语句结构的引导词
      synchronized 表明一段代码需要同步执行
      this 指向当前实例对象的引用
      throw 抛出一个异常
      throws 声明在当前定义的成员方法中所有需要抛出的异常
      transient 声明不用序列化的成员域
      try 尝试一个可能抛出异常的程序块
      void 声明当前成员方法没有返回值
      volatile 表明两个或者多个变量必须同步地发生变化
      while 用在循环结构中

2. 变量的声明与赋值

  • 字面量
    • 什么是字面量
      • 数据,程序运行过程中,要处理业务,实际上就是要处理数据。数据就是字面量。
    • java中都有哪些字面量(有哪些数据?)
      • 整数型数据:1 2 3 4 -100 0 120 911
      • 浮点型数据:1.2 3.14
      • 布尔型数据:true false。true代表真,false代表假。
      • 字符型数据:'a' '中' '国'。 java中所有的字符型字面量必须使用单引号括起来。并且字符型字面量的字符数量有且只有一个。'abc'这就是语法错误了。
      • 字符串型数据:"abc" "你好" "我好" "大家好" "中" "a" 。java中所有的字符串型字面量必须使用双引号括起来。只要是双引号括起来的,不管字符数量是多少个,都属于字符串型字面量。
  • 变量
    • 什么是变量
      • 变量就是内存当中的一块空间。变量是计算机存储数据的最基本的单元。
    • 怎么声明变量
      • java中的每一个变量都有三要素:
        • 数据类型(决定内存空间分配多大。)
        • 变量名(通过变量名可以重复访问该内存空间)
        • 值(数据/字面量:真正存储的数据)
      • 语法格式:
        • 数据类型 变量名;
    • 怎么给变量赋值
      • 重要语法:java中任何一个变量必须先声明,再赋值,才能访问。没有赋值就代表没有进行初始化。
      • 怎么赋值,语法格式是什么?
        • 变量名 = 值; (值就是字面量。)
        • 要求:“值”的数据类型必须和变量的数据类型一致。
        • 赋值原理:等号右边先执行,将右边的执行结果通过等号赋值给变量。
      • 声明和赋值可以在一起完成。
        • int i = 11;
      • 变量名不能重名。(在同一个域当中,在java中,可以将一个大括号看做一个域。)
    • 一行上可以声明多个变量
      • int a, b, c;
      • int a, b, c = 110; 表示a和b没有赋值,c赋值110
    • 变量的分类
      • 在方法体当中声明的变量叫做局部变量,局部变量只在当前方法体当中有效。也就是说,局部变量是在方法开始执行的时候分配内存空间,方法执行结束之后,该局部变量的内存就释放了。
      • 在方法体之外声明的变量叫做成员变量。成员变量又分为两种:
        • 带static关键字的:静态变量
        • 不带static关键字的:实例变量
    • 变量的作用域
      • 什么是作用域?
        • 变量的有效范围。
      • 其实,大家只要记住一句话就行:出了大括号就不认识了。一个大括号就是一个域。

3. 数据类型之int、String、boolean

  • 什么是数据类型,有什么用?
    • 变量有三要素: 数据类型、变量名、值。
    • 在java程序当中,任何一个数据都是有类型的,不同的数据类型,在程序执行的时候,会分配不同的大小的内存空间。所以数据类型是告诉JVM的,告诉JVM这个变量分配多大的空间,那个变量分配多大的空间。
  • 这里只描述三个常见的数据类型:
    • int (整数型):代表现实世界中的整数。
    • String (字符串类型):代表现实世界中的文字,字符串。
    • boolean (布尔类型):代表现实世界中的真和假。

4. 接收用户键盘输入

  • System.out.println("Hello World!");
  • 接收用户键盘输入:
    • 程序执行到某个位置之后,停下来等待用户的输入,用户输入信息之后,java程序可以捕捉到用户输入的数据/信息。
    • 这一段代码实际上是需要面向对象的知识才能听懂。但是为了后面的内容有意思,所以这里我们提前把代码写一下,你是听不懂的,听不懂没关系,你可以复制粘贴这一段代码,能够完成用户键盘输入即可。(知识屏蔽法。)
  • 主要代码:
    • java.util.Scanner s = new java.util.Scanner(System.in);
    • String msg = s.next();
    • int val = s.nextInt();

5. Java的常用运算符

  • 算术运算符
  • 关系运算符
  • 逻辑运算符
  • 赋值运算符
  • 字符串连接运算符
  • 条件运算符

6. 控制语句之if

  • 控制语句分为三大类
    • 分支语句
      • if语句
      • switch语句
    • 循环语句
      • for循环
      • while循环
      • do...while..循环
    • 转向语句
      • break语句
      • continue语句
      • return语句
  • if语句
    • if被翻译为如果
    • if语句有哪些语法格式?

7. 实现酒店管理系统的用户登录

8. 控制语句之for

9. 实现酒店管理系统的房间列表展示

10. 控制语句之while

11. 实现酒店管理系统前台交互功能

12. 什么是方法,有什么用?

  • 方法是一段可以被重复使用的代码片段。并且每一个方法都可以完成一个独立的功能。

13. 方法的声明与调用

  • 一个方法应该怎么定义?语法是什么?
  • 一个方法应该如何调用?语法是什么?

14. 方法执行时的内存变化

  • 栈数据结构
  • 方法执行时的内存变化

15. 一维数组的初始化与访问

public class ArrayTest01{
    public static void main(String[] args){
        int[] arr = {1,2,3,4,4,5};
        // 数组长度
        System.out.println(arr.length);
        // 读取第一个元素
        System.out.println(arr[0]);
        // 修改第一个元素
        arr[0] = 100;
        // 读取最后一个元素
        System.out.println(arr[arr.length - 1]);
        // 遍历一维数组
        for(int i = 0; i < arr.length; i++){
            System.out.println(arr[i]);
        }
    }
}

16. 二维数组的初始化与访问

public class ArrayTest02{
    public static void main(String[] args){
        int[][] arr = {{4,4,543,4,3453},{543,5643,7654},{3421,4321,5432,55465}};
        // 二维数组中有几个一维数组
        System.out.println(arr.length);
        // 访问第一个一维数组的第一个元素
        System.out.println(arr[0][0]);
        // 访问最后一个一维数组的最后一个元素
        System.out.println(arr[arr.length-1][arr[arr.length-1].length-1]);
        // 修改第一个一维数组的第一个元素
        arr[0][0] = 100;
        // 遍历二维数组
        for(int i = 0; i < arr.length; i++){
            for(int j = 0; j < arr[i].length; j++){
                System.out.print(arr[i][j] + " ");
            }
            System.out.println();
        }
    }
}

第三章 类和对象

1. 什么是面向对象的开发

  • Java语言是一门完全面向对象的编程语言。(以面向对象的方式进行代码实现,功能实现,业务实现。)

  • 这里的“对象”是什么?是相亲对象吗?不是的。这里的“对象”其实指的是现实世界当中实际存在的个体/事物。

  • 假设让你编写一段代码来模拟这样的一个场景:一个人抽烟的场景。(你在抽烟的这个场景当中都可以发现哪些事物呢?)

    • 打火机
    • 香烟
    • 一个会抽烟的人
    • 一个能够抽烟的场所

    以上的四个事物都是我们所说的“对象”。

  • 什么是面向对象开发呢?

    • 面向对象的开发方式实际上强调的是:将现实世界分割成不同的单元,每个单元是一个对象,然后对象与对象之间协作起来,形成一个系统。
    • java程序员实现的是软件,软件处理的是现实世界中的业务,所以现实世界中有什么,程序中就应该一一对应,例如现实世界中有银行卡,那么程序中也应该有一个银行卡对象。现实世界中有ATM机,那么程序中也应该有一个ATM机对象。现实世界中有一个美女,那么程序中也应该有一个美女对象。
    • 由于人类是以面向对象的方式去认识这个世界的,所以面向对象的开发方式更受欢迎。更容易实现功能。

2. 类的定义和对象的创建

  • 类是什么?

    • 类是一个模板。
    • 类实际上是不存在的。
    • 类是现实世界中对象和对象之间具有共同的特征,然后经过一个总结概括之后形成了一个模板信息,这个模板信息就是类。
  • 对象是什么?

    • 对象(Object),对象是实际存在的个体。(对象又被叫做实例,英语单词是:instance)
    • 刘德华、潘长江、姚明这些都是对象。
    • 我今天买了一个笔记本电脑,我手里拿着的这个笔记本电脑就是一个对象。你去年也买了一个笔记本电脑,你现在正在使用的这个笔记本电脑也是一个对象。
    • 你们家养了一条金鱼,你给它起名小花,这条金鱼小花,就是一个实际存在的对象。我家也养了一条黑色的鱼,我给它起名叫小黑,这个小黑就是实际存在的对象。
  • 在java开发中,要想有“对象”,必须先有“类”,对象是通过类这个模板造出来的。

  • 一个类可以创建多个对象(一个类可以实例化多个对象)。

  • 通过类创建对象的这个过程,有一个专业的术语,叫做:实例化

  • 类是多个对象的共同特征,这个共同特征包括什么?

    • 金鱼小花和金鱼小黑它们有哪些共同的特征呢?
      • 名字(name)、颜色(color)、游泳(swiming)
      • 名字、颜色这些静态的特征可以叫做:属性。
      • 游泳,这是一个动词,其实体现的是一种行为特征,在java程序中,对行为特征的描述采用方法来描述。
    • 类 = 属性 + 方法 (属性来源于状态,方法来源于动作。)
  • 类的定义,语法格式

    class 类名 {
        // 属性(来源于状态,描述的是状态)
        // 方法(来源于动作,描述的是动作)
    }
    
    • 类名:合法的标识符就行,见名知意。(首字母大写,后面每个单词首字母大写。)
    • 属性在java程序中以变量的形式存在:int i; boolean sex; String name; (变量三要素:数据类型、变量名、值。)
    • 方法

3. 抽象酒店管理系统的房间类

  • 类的抽取:我们观察酒店管理系统当中主要管理的是酒店当中的房间,一个一个房间对象都具有共同的特征,然后进行抽象,形成了:房间类(Room)。
  • 房间类有哪些属性呢?
    • 房间编号:no (int类型)
      • 一层:101、102、103、.....110
      • 二层:201、.......210
      • ...
      • 五层:501、........510
    • 房间类型:type (String)
      • 单人间
      • 标准间
      • 豪华间
    • 房间状态:state(boolean类型)
      • true表示占用
      • false表示空闲
    • 房间的平米数
    • 房间的单价
    • 房间是否带窗户.....

第四章 构造方法

1. 构造方法的定义和使用

  • 构造方法用来创建对象
  • 构造方法执行过程中可以给对象的属性赋值

2. 初始化酒店管理系统所有房间

第五章 实现酒店管理系统功能

1. 实现酒店管理系统房间预订功能

  • 预订房间的时候,一定是前台向系统当中输入预订的房间编号。
  • 预订房间之后,这个房间的状态一定是“占用”的

2. 实现酒店管理系统退房功能

  • 退房的时候,一定是前台向系统当中输入房间编号。
  • 退房之后,这个房间的状态一定是“空闲”的

3. 测试酒店管理系统使用并总结

你可能感兴趣的:(B站Java小白入门实践【从项目入手跨越零基础】动力节点老杜笔记)