Java语言基础

一、 初识计算机和Java语言

1.1 计算机的基本概念

用于高级计算、使用广泛的设备,主要由计算机硬件和计算机软件两个部分组成
硬件:看得见,摸得着
软件:看得见,摸不着

1.2 常见的主要硬件

中央处理器(CPU)、内存硬盘、输入输出设备、主板、机箱、电源等辅助设备。
Java重点是CPU、内存、硬盘
硬盘里面的核心就是一张光盘

1.3 主要硬件的讲解

  • CPU
    • 中央处理器(Central Processing Unit)
    • 运算核心和控制核心
    • 功能主要是解释计算机指令以及处理计算机软件中的数据
  • 内存
    • Memory,也称内存储器
    • 用于暂时存放CPU中的运算数据,以及与硬盘等外部存储器交换的数据
    • CPU可以直接访问内存的数据,而且效率高
    • 缺点:容量小,不能实现永久存储,断电会造成数据丢失
    • 关于内存容量的科普:
      • Byte -> KB -> MB -> GB -> TB -> PB
      • 1byte 是八位,有八个二进制数,如10100011
  • 硬盘
    • 机械硬盘、固态硬盘
    • 永久存放数据,容量大且断电不影响
    • CPU不能直接访问,访问数据时需要先加载到内存中
  • 输入输出设备
    • 键盘:标准输入设备(注意不是鼠标)
    • 显示器:标准输出设备

1.4 常见的主要软件

系统软件和应用软件
主流操作系统:Windows、Unix、Linux、IOS、 Android

1.5 计算机的体系结构

Java语言基础

1.6 计算机语言的概述

  • 第一代语言:机器语言
    • 指令以二进制形式存在,穿孔卡片
  • 第二代语言:汇编语言
    • 助记符表示机器指令,如 ADD、SUB等
  • 第三代语言:高级语言
    • 如Java、Python、Scala、Go(谷歌)、Swift(苹果)等

1.7 Java语言的发展

  • 20世纪90年代 单片机系统 家电设备 Sun公司 绿色计划 用C++开发 1983年 跨平台
    命名为橡树,aok,但是被其他公司注册了,所以改名,Java,咖啡,爪哇岛
    后被Oracle收购
  • Java语言1995年问世
  • 历代版本
    1.0/1.2/1.3/1.4/5.0/6.0/7.0/8.0 …
    Java11.0 是比较稳定的版本,且长期支持

1.8 Java语言的主要版本

  • Java SE(Java platform,Standard Edition),Java平台标准版,是Java平台的基础
    • 包含了运行Java应用所需要的基础环境和核心类库
    • 定义了基于桌面应用的基础类库,通过使用这些类库,可以编写出丰富多彩的桌面应用
  • Java EE (Java Platform,Enterprise Edition),Java平台企业版
    • Java EE构建在Java SE基础上,用于构建企业级应用(以后工作最常用,但是Java SE是基础,所以也要学习)。
  • Java ME(Java Platform,Micro Edition),Java平台微型版
    • 随着安卓智能手机的普及,其已经面临淘汰

1.9 JDK安装目录相关概念

  • bin 二进制文件
  • conf 配置文件
  • include 头文件
  • jmods 模块文件
  • legal 授权文件
  • lib 库,JDK工具的一些补充jar包和源代码
    • javac.exe 编译器,主要用于将高级Java源代码翻译成字节码文件
    • java.exe 解释器,主要用于JVM对字节码文件进行解释并执行

(Java11的安装目录中没有jre,可以用命令生成jre文件夹)

jdk、jre、jvm之间的关系(掌握)

Java语言基础

1.10 编写Java程序的流程

  • 文本编辑器(TE,Text Editor)

    • 记事本,Notepad++,Edit Plus …
  • 集成开发环境(IDE,Integrated Development Environment)

    • Eclipse,MyEclipse、IDEA …
  • 编写Java程序的流程

    • 新建文本文档,将文件扩展名由xxx.txt修改为xxx.java
    • 使用记事本打开文件,编写代码后保存
    • 启动dos窗口,切换到 .java 所在路径中
    • 使用 javac xxx.java 进行编译,生成 xxx.class 的字节码文件
    • 使用 java xxx 进行解释执行, 打印最终结果

    java11新特性之简化的编译运行(编译和运行一步到位)

    • 使用java xxx.java 直接进行编译运行,打印最终结果(慎用)
    • 当同名的class文件存在时, 会发生错误, 把已存在的class文件删除才可一步到位运行
    • 还有出现其他错误, 因此该特性要慎用

1.11 常见的错误和简化的编译运行

  • 错误: 需要class, interface或enum => 通常都是class关键字拼写错误
  • 错误: 找不到符号 => 通常因为单词拼写错误或Java中不支持这样的单词
  • 错误: 需要’;’ => 通常都是因为少写分号,加上英文版分号即可
  • 错误: 非法字符: ‘\uff1b’ => 通常是因为出现了中文标点符号,修改为英文版即可
  • 错误: 在类 PrintTest 中找不到 main 方法, 请将 main 方法定义为: =>main写成了mian
    Java语言基础

1.12 注释和环境变量配置(掌握)

  • // 单行注释
  • /* */ 多行注释
  • /** */ 多行/文档注释, 从 /**开始, 到 */结束, 是一种支持提取的注释
  • 注: 多行注释不允许嵌套使用!
    Java语言基础
  • 以上环境变量配置不够完美
  • 应该添加一个 JAVA_HOME 的环境变量
    • 用于JDK版本的升级和后续Java EE 的学习
    • 配置过程如图所示:
      Java语言基础
      Java语言基础

1.13 跨平台原理

  • 核心在于JVM,同一个字节码文件 .class ,在不同操作系统上执行时, 由不同操作系统对应的JVM翻译成不同的机器指令
  • 一次编译, 到处使用

总结

Java语言基础

二、变量和数据类型

2.1 变量的基本概念

  • 声明变量以记录单个数据内容, 内容可以改变
  • 声明: 本质上是在内存中申请一个存储单元
  • 由于存放数据内容大小不一, 导致所需存储单元的大小不一样, 在Java语言中使用数据类型加以描述
  • 为了便于下次访问, 需要指定变量名, 用于记录该变量对应的存储单元

2.2 变量的声明和使用

  • 数据类型 变量名 = 初始值;
    • 其中 = 初始值 可以省略, 但是 ; 不能省略

2.3 变量使用是注意事项

  • Java是强类型语言,变量在使用前必须声明来指明变量的数据类型
  • 变量使用前必须初始化
  • 变量不能重复声明

2.4 标识符的命名规则(笔试)

  • 由数字、字母、下划线以及$等组成,其中数字不能开头
    (但是实际工作中只用英文单词,不得已时用数字,几乎不用下划线)
  • 不能使用Java语言的关键字,所谓关键字就是Java语言中用于表示特殊含义的单词
  • 区分大小写,长度没有限制但不宜过长
  • 尽量做到见名知意支持中文不推荐使用
  • 标识符可以给 类/变量/属性/方法/包 起名字

2.5 变量输入输出的案例实现

  • 提示用户从键盘输入自己的姓名和年龄信息并打印下来
    Java语言基础

2.6 变量输入输出案例的优化和手册介绍

  • 开发的两个原则
    • 变量随使用随声明
    • 尽可能减少重复代码
      Java语言基础
  • 官方库的使用
    • JDK中带有大量的API类, 是有Java系统带来的工具库, 这些工具数以万计!
    • 使用这些类可以大大简化编程, 提高开发效率。
    • 具体的API类功能, 可以参阅Java的参考手册

2.7 数据类型的分类

  • 在Java语言中数据类型主要分为两大类
    • (1)基本数据类型(记住)8个
      byte、short、int、long、float、double、char、boolean
    • 引用数据类型(了解)
      数组、类、接口、枚举、标注

2.8 常用的进制

  • 日常生活中采用十进制描述数据,逢十进一,十进制的权重是:
    100、101、102、102、104
  • 计算机的底层采用0和1组成的二进制序列进行数据的描述,逢二进一,二进制权重
    20、21、22、23
    • 注:有符号数即正负数在计算机中是以补码形式存储的
    • 二进制中的最高位(最左边)用于代表符号位,0表示非负数,1表示负数
  • 八进制和十六进制其实都是二进制的简写(是为了解决二进制表示大数时位数多的问题)

2.9 十进制与二进制之间的转换

(1)正十进制转换为二进制的方式

  • 方式一
    • 除二取余法,使用十进制整数不断地除于2取出,直到商为0时将余数逆序排列
      Java语言基础
  • 方式二(更简单,推荐
    • 拆分法,将十进制整数拆分为若干个二进制权重的和,有该权重下面写1,否则写0
      Java语言基础

(2)负十进制转换为二进制的方式

  • 先将十进制的绝对值转换为二进制,然后进行按位取反再加1(最高位也要按位取反
  • 负数的需要补码:按位取反,再加1
  • 如何验证转换得对不对:
    • 1 用微软计算器
    • 2 验证一个数加上其相反数,结果为0
      • 例如 -45转化为二进制的计算结果为 1101 0011
        为了验证对不对,求其相反数45的二进制结果 00101101 ,然后两者的二进制数相加
        (经过高位丢弃后,得到结果为0),即验证结果是正确的
        Java语言基础

原码、反码、补码(二进制数的码制)

  • 最高位用0表示非负数,1表示负数
  • 正二制数(真值)的原码、反码和补码都是一致的
  • 负二进制数(真值)
    • 原码:一个二进制数,用0和1代表符号,数值位不变,就得到与该二进制数真值对应的原码
      • 符号位 + 数值位,最高位为符号位,1(表示负数)
      • 0 有两种原码形式(0000 0000 和 1000 0000)
    • 反码:除了符号位,其余按位取反(1变成0, 0变成1)
      • 负数要用补码表示,这样子才能满足 正数+其相反数 = 0
    • 补码:在反码的基础上在最低位加上1
  • 0 可以看成是正数或者负数

判断一个二进制数的正负情况

  • 看一个二进制数是正数还是负数,要先看其在计算机中是以有符号存储还是无符号存储
    • 如果是无符号存储,则为正数
    • 如果是有符号存储,则为补码存储
      看最高位,最高位为0,为正数,最高位为1,是负数

(3)正二进制转换为十进制的方式

  • 跟(1)互逆(与除二取余法互逆)
  • 加权法Java语言基础

(4)负二进制转换为十进制的方式

  • 跟(2)互逆
  • 先减1再按位取反,合并为十进制整数后添加负号
    Java语言基础

2.10 单个字节表示的整数范围(重中之重, 面试经常出现)

  • 在计算机中单个字节表示八位二进制位,其中最高位(最左边)代表符号位,0代表非负数(0和正数),1代表负数
  • 单个字节所能表示的整数范围是: -128 ~ 127 (-27 ~ 27-1)
    Java语言基础

2.11 整数类型的概念

  • Java语言中描述整数数据的类型有:byte、short、int、long,推荐使用int类型, int 类型一般情况下够用了
byte 1字节 -27 ~ 27-1 (-128 ~ 127)
short 2字节 -215 ~ 215-1 (-32768 ~ 32767)
int 4字节 -231 ~ 231-1 (-2,147,483,648‬ ~ 2,147,483,647)
long 8字节 -263 ~ 263-1

2.12 整数类型的编程使用