1.目标任务

    1. 了解关键字和标识符的区别
    2. 掌握三种注释
    3. 了解Java的数据分类
    4. 掌握变量的含义,定义、赋值、读写
    5. 掌握数制、大进制转小进制、小进制转大进制
    6. 掌握正码、反码、补码;
    7. 掌握二进制的加法和减法;

    2.Java语言基础的组成
    Java语言基础由:关键字、标识符、注释、常量和变量、运算符、语句、函数和数组等组成。
    3.关键字
    3.1.关键字的定义和特点:
    定义:被Java语言赋予了特殊含义的单词。
    特点:关键字中所有字母都为小写。
    3.2. 关键字一览表
    所有的关键字都不需要记忆,在后期的学习中慢慢就会掌握。
    (1)关键词列表
    0402.数据类型、变量、进制 - 图1
    0402.数据类型、变量、进制 - 图2

    (2)示例 下图中红色字体部分就是关键字:
    0402.数据类型、变量、进制 - 图3

    4. 标识符
    4.1. 定义及特点
    定义:在程序中自定义的一些名称,例如:类名。
    特点:由26个英文字母大小写,数字:0-9,符号:_、$组成。
    4.2. 定义合法标识符规则

    1. 数字不可以开头,例如:2Demo就不可以。
    2. 不可以使用关键字,例如:public就不可以,因为public是关键字。
    3. 不可以包含”、$”以外的特殊符号,例如:“Demo Test”就不可以,其中的空格就是特殊符号。特殊符号”、$”能不使用时尽量不要使用,在有些第三方系统中有特殊用途。
    4. Java中严格区分大小写,例如:name 、Name、NAME是几种不同的标识符。
    5. 在起名称时,为了提高可阅读性,要尽量有意义。

    4.3.扩展延伸、Java中的名称规范补充
    (1)、包名:全部小写,不同的包之间用英文的点连接。
    例如:cn.ha.yunhe.ictxly.test01
    (2)、类名接口名:首字母大写。多单词组成时,所有单词的首字母大写。
    例如:Demo01,Demo0301,String
    (3)、变量名和函数名:首字母小写。多单词组成时,第二个单词开始每个单词首字母大写。
    例如:name,age,doSort,toUpper
    (4)、常量名:所有字母都大写。多单词时每个单词用下划线连接。
    例如:PI,LIGHT_BLUE
    5. 注释
    写代码,【阅读性第一】,功能性第二。
    提高代码可读性常用方法:
    (1)代码书写格式规范!
    (2)标识符用词含义清晰准确;
    (3)添加适当的注释说明
    5.1 定义及特点
    定义:用于标注、说明、解释程序的文字,就是注释。
    特点:给程序员看的,提高了代码的阅读性,系统底层遇到注释时忽略注释。
    5.2 Java中的注释格式
    1.第1种, 单行注释
    格式: // 注释文字
    快捷键: 添加注释【 ctrl+/】 取消注释【 ctrl+/】
    2.第2种,多行注释
    格式: / 注释文字 /
    快捷键 : 添加注释【 ctrl+shift+/】 取消注释【 ctrl+shift+ \】
    3.第3种,文档注释
    格式:/ 注释文字 */
    快捷键 : 添加注释【/
    回车】
    5.3.练习前两种注释
    0402.数据类型、变量、进制 - 图4
    5.4.练习第三种注释
    0402.数据类型、变量、进制 - 图5
    5.5.注释的补充
    1、对于单行和多行注释,被注释的文字,不会被JVM(java虚拟机)解释执行。所以,即使添加再多的注释,编译后生成的class文件占用硬盘字节多少不变。
    2、对于文档注释,是java特有的注释,其中注释内容可以被JDK提供的工具javadoc所解析,生成一套以网页文件形式体现的该程序的说明文档,作为在线提示帮助文档。
    3、多行注释、文档注释、不支持嵌套。
    4、注释是一个程序员必须要具有的良好编程习惯。初学者编写程序必须养成习惯:先写注释再写代码。
    5、将自己的思路通过注释先整理出来,再用代码去体现,因为代码仅仅是思路的一种体现形式而已。后续学习中体现出来。

    6.Java语言的数据类型
    任何再NB的语言,再NB的技术,都是人们在生产生活中解决某些问题时,通过归纳、总结、提炼而成,然后再回归到生产生活中检验有效后,得以推而广之的。Java也不例外,不要为了 理解技术而理解技术,不要为了学习技术而学习技术。
    6.1. 生物学中有【物种分类】
    0402.数据类型、变量、进制 - 图6
    为什么需要把生物分成很多很多不同的类型呢?
    6.2. 工作有【职业分类】
    百度百科《中华人民共和国职业分类大典》
    第一大类:党的机关、国家机关、群众团体和社会组织、企事业单位负责人;
    第二大类:专业技术人员;
    第三大类:办事人员和有关人员;
    第四大类:社会生产服务和生活服务人员;
    第五大类:农、林、牧、渔业生产及辅助人员;
    第六大类:生产、运输设备操作人员及有关人员;
    第七大类:军人;
    第八大类:不便分类的其他从业人员。
    为什么需要把职业分成很多很多不同的类型呢?
    6.3.程序语言中的【数据类型】
    思考1:如果你需要为电商系统做一个后台系统,是否需要处理诸如:姓名、密码、手机号、是否注册、是否登录、商品、单价、数量、小计金额、总计金额、需要支付金额、快递地址、是否结算、折扣、支付金额是否足够等数据呢?
    思考2:如果站在计算机的角度,如何才能【高效】的管理这些数据呢?
    Java语言是【强类型】语言,对于每一个数据都必需有明确具体的数据类型,并按本类型的大小在内存中分配对应大小的空间,来存放这个数据。
    Java语言中有【8种基本类型3种引用类型

    0402.数据类型、变量、进制 - 图7

    6.4.怎么用呢?
    先等等,跟后面一块再练习。
    7.生活中的常量与变量
    7.1. 生活中的原型
    1、有些人说话一言九鼎,生不改名死不改姓。西方有些政治人物胡说八道、朝说夕改,一日多变;
    2、过去学习过的数学公式、物理公式中,有些值始终固定不变,有些值跟据上下文环境变化而变化;
    3、语文中经常需要引用别人的原话。论文中经常需要引用别人的原文;
    4、过去解方程题是,经常借助一些未知数符号,诸如:x、y、z和方程式子来解题;
    7.2.小学应用题
    0402.数据类型、变量、进制 - 图8
    7.3.数学公式中的常量
    0402.数据类型、变量、进制 - 图9
    8. Java中常量的定义
    常量表示不能改变的数值。
    8.1. 扩展延伸、Java中常量的分类
    1. 整数常量:所有整数数字,如 1, 10 ,-100。
    2. 小数常量:所有小数数字,如:0.1 , 0.3 , 99.9。
    3. 布尔(boolean)型常量:只有两个数值,true、false。
    4. 字符常量:将一个数字字母或者符号用单引号( ‘ ‘ )标识,如:’a’。
    5. 字符串常量:将一个或者多个字符用双引号(“”)标识,如:”hello world”、”a”、””(空字符串)。
    6. null常量:只有一个数值就是:null。
    8.2.怎么用呢?
    先等等,跟后面一块再练习。
    9. 变量
    9.1. 变量的概念
    定义:内存中的一个存储区域,该区域有自己的名称(变量名)和类型(数据类型),该区域的数据可以在同一类型范围内不断变化。
    特点:通过变量名往内存区域存放特定类型的数据,然后通过变量名读取所存放的数据。
    意义:通过变量名,可以重复存放数据,并重复读取使用。
    理解:变量就如同数学中的未知数X。
    (1) 、图解1:0402.数据类型、变量、进制 - 图10
    (2) 、图解2:
    我们可以在盒子内放入指定类型任何值。并且,这个盒子的值,我们想改变多少次,就可以改变多少次:
    String message; // 声明一个变量名
    message = ‘Hello!’; //给变量名赋值
    message = ‘World!’; // 再次赋值,值改变了
    System.out.println(message);//通过变量的名存取值用于输出显示
    0402.数据类型、变量、进制 - 图11
    9.2.变量的声明、赋值、读取
    规则:
    (1)、声明变量名时,变量的类型必需位于变量名之前,中间用空格隔开;
    (2)、变量名可以先声明、再赋值,也可以声明时直接赋值;
    (3)、变量赋值时,前面是变量名,后面是值(或者算术表达式),中间的=号表示把后面的值赋给前面的变量名。
    (4)、赋过值的变量名,才能用于读取;
    (5)、同一个代码块内(什么是代码块,目前不要可以去理解),同一个变量名不能重复声明定义。
    0402.数据类型、变量、进制 - 图12
    注意:
    (1)、一个变量只能存放某同一类型的数据。
    (2)、扩展延伸,变量的作用范围,一对{}之间有效,并且从定义处开始;

    9.3.扩展延伸、数字的默认类型
    (1)、整数数字,默认类型时int类型;
    (2)、小数数字,默认类型是double;
    (3)、double类型的小数精度比float类型的小数更高;
    9.4. 常见错误
    (1)、变量重复定义
    0402.数据类型、变量、进制 - 图13
    (2)、变量没赋值就使用:
    0402.数据类型、变量、进制 - 图14
    (3)、变量声明类型和赋值类型不一致:
    0402.数据类型、变量、进制 - 图15
    (4)、变量声明类型和赋值类型不一致:
    0402.数据类型、变量、进制 - 图16

    (5)、没有正确结束:
    0402.数据类型、变量、进制 - 图17
    10.扩展延伸、类型转换**
    类型转换在开发中也很常用,简单来说就是类型之间相互的转化,类型转换共分两种:自动类型转换和强制类型转换。
    10.1.自动类型转换(隐式类型转换)
    定义:自动类型转换就是不需要我们手动对类型来进行强制转换。
    示例:
    0402.数据类型、变量、进制 - 图18
    说明:int类型的变量占4个字节,当byte类型的变量与其相加的时候,首先会将byte类型的变量自动转化为4个字节的int类型,然后再进行加法操作。
    10.2. 强制类型转换(显式类型转换)
    定义:强制类型转换需要把类型进行手动转换,否则无法正常使用
    0402.数据类型、变量、进制 - 图19
    错误原因:当byte类型的变量提升为int类型与int类型的常量200相加后,结果依然是int类型,再赋值给byte类型,当然会出现损失精度的错误。
    解决方法:进行强制类型转换,也就是将占4个字节的int类型值,再强硬存储到占1个字节的byte变量中。

    说明:结果为-53的原因是,200+3结果是203,换算成占1个字节空间的二进制也就是11001011。由于首位为1,所以是负数,除符号位外,其余部分取反加1,得1,0110101,即-53。
    10.3.补充1、**只有数值类型才能进行加法操作,非数值类型不行。
    示例:
    0402.数据类型、变量、进制 - 图20
    2、char类型数据也可以和int类型相加,但是首先char类型数据会被自动提升为int类型。
    示例:
    0402.数据类型、变量、进制 - 图21
    说明:字符类型数据之所以能够自动提升为int类型是因为字符类型数据在计算机中也是用0、1表示的,int类型数据在计算机中也用0、1表示,所以char类型数据当然可以转换为int类型数据。但是,字符类型数据在计算机中使用0、1表示是按照何种顺序组合排列的则需要依据某个码表而定。Java中的内置码表是Unicode,既包含中文,也包含英文。
    10.4.补充2、**通过强转也可以把数字强转成字符。
    0402.数据类型、变量、进制 - 图22

    10.5. 表达式的数据类型自动提升:
    所有的byte型、short型和char的值将被提升到int型。
    如果一个操作数是long型,计算结果就是long型;
    如果一个操作数是float型,计算结果就是float型;
    如果一个操作数是double型,计算结果就是double型。

    10.6. 面试难题:
    说出报出如下错误的原因:
    0402.数据类型、变量、进制 - 图23

    错误原因:涉及到编译器编译程序时候的细节,之所以byte b = 3 +7;,没有报错,是因为3和7都是常量,编译器知道结果是10,并且在byte范围之内,因此就自动进行了强转,所以不会报错。而b = b1 + b2;中b1和b2都是变量,编译器编译程序是一行一行编译的,它根本不知道b1和b2到底是多少,两个byte类型的数据相加时,首先都会被提升为int类型,他们的和也是int类型,其值可能会超过byte的范围,因此就会报错。
    而如下程序则不会报错:
    0402.数据类型、变量、进制 - 图24
    说明:原因是因为int类型的两个变量相加,最后还是int类型,虽然结果溢出,但是不会报错。
    11. 进制**

    1. 电脑和网络中,无论是数据存储,还是数据计算、或者数据传输,都是采用二进制进行的;
    2. 一个大点的数字,写成二进制时,往往占二三十位很正常,数据位数长度越长,阅读越困难;
    3. 因此一般都把二进制换算成16进制的形式,缩短位数,方便读写;
    4. 但是人们在生活中,已经习惯用十进制读写;
    5. 于是,二进制、十进制、十六进制,便成了程序员常用的数字进制;

    11.1.数字常用几种进制

    1. 二进制:有0-1两个数字,满2进1,用0b开头表示。如:0b11;
    2. 八进制(现在很少使用):有0-7八个数字,满8进1,用0开头表示,如:012;
    3. 十进制:有0-9十个数字,满10进1;
    4. 十六进制:有0-9A-F十六个数字,满16进1,用0x开头表示。如:0x4A2C;

    11.2.计算器中的进制
    (1) 入口 : 点击“开始”—>“所有程序”—>“附件”—>“计算器”。
    0402.数据类型、变量、进制 - 图25

    (2)win10版计算器的四种表现形式
    0402.数据类型、变量、进制 - 图26
    规律:进制越大,表现形式越短。

    (3)在十进制下,输入1100。
    0402.数据类型、变量、进制 - 图27

    11.3.Java中数字的四种进制
    public class Demo01 {
    public static void main(String[] args) {
    test01();
    }

    private static void test01() {
    int a=0b11;
    int b=11;
    int c=011;
    int d=0x11;
    System.out.println(a);
    System.out.println(b);
    System.out.println(c);
    System.out.println(d);
    }
    }
    0402.数据类型、变量、进制 - 图28
    11.4.生活中的二进制原型
    (1) 古代的结绳记事,有个疙瘩表示有一件事,没疙瘩当天没事。当需记录一个大事时,把多个小疙瘩拧成一个大疙瘩。
    (2)现代生活中:
    (2.1) 开关有两种状态,开和关;
    (2.2)银行的磁条卡中,用强磁和弱磁表示强和弱;
    (2.3)U盘和内存条中,用高电平和低电平表示高和低。
    11.5.电脑中的二进制** **

    1. 一位二进制数,只有两个数字,从0开始计数,即0和1。用电子元器件表示时,只要有两种状态即可,于是用一个电子开关,开关两端是低电平时表示数字0、两端高电平时表示数字1。一个开关有两种状态,能记录两个数字。即2 ^1种状态,计数范围:0~2^1-1;
    2. 当需要表示多于两个数字时,再引入一个开关,通过排列组合(00,01,10,11),能表示2*2=4种状态,即2 ^2种;计数范围:0~2^2-1;
    3. 当需要表示多于四个数字时,再引入一个开关,通过排列组合(000,001,010,011,100,101,110,111),能表示222=8种状态,,即2 ^3种;计数范围:0~2^3-1;
    4. 为了规范管理,8个开关为一组,【简称一个字节(BYTE)8个字位(BIT)】,共有2222 222*2种排列组合 ,即2^8种状态; 计数范围:0~2^8-1;
    5. 为了进一步扩大计数范围,于是有8个一组的,16个一组的,32个一组的,64个有一组的,能计数的 范围分别是0~2^8-1 , 0~2^16-1 , 0~2^32-1 , 0~2^64-1。
    6. 能记正整数,如何记负整数呢? 把首位当做符号为,首位为0表示正数,首位为1表示负数。数学中数字零,在计算机中并入正数行列,即正数从0开始,负数从-1开始。
    7. 于是就有了整数的4种类型.

    单字节byte类型, 取值范围: -2^7 ~ 2^7-1 , -128~127 ;
    双字节short类型, 取值范围: -2^15 ~ 2^15-1 , -32768~32767;
    四字节int类型, 取值范围: -2^31 ~ 2^31-1, 约-21.6亿~21.6亿;
    八字节long类型, 取值范围: -2^31 ~ 2^31-1 约-21.6亿21.6亿 ~21.6亿21.6亿;

    1. 计算中,可以利用电子开关电平的高电平和低电平两种状态,表示两个数字,是否亦可以表示两种文字或者符号呢?

    附1:电脑中的ACSII编码表,点击跳转
    附2:电脑中的UTF-8编码表,点击跳转
    11.6.几个跟二进制有关的名词

    1. 1Byte = 8bit;
    2. 1KB = 1024Byte;
    3. 1MB = 1024KB;
    4. 1GB = 1024MB;
    5. 1TB = 1024GB;
    6. 64位的CPU、64位的操作系统,就是CPU底层标准字宽64个bit;
    7. 网络下载速率200KB中的KB就是上面的KB;

    12.进制转换
    (1)大进制向小进制转换时,采用【短除式】;
    (2)小进制向大进制转换时,采用【进率式】;
    (3)二进制、十六进制的【BCD码,或者8421码】;
    (4)0~255以内十进制转二进制的口算速算法;
    12.1. **十进制转二进制
    (1) 原理:对十进制数进行除以2的短除式运算。
    (2)示例:求十进制数6和11的二进制数。
    0402.数据类型、变量、进制 - 图29
    (3) 巩固练习,把十进制的255、128、63、32、15分别转换成二进制。
    (4) 巩固练习,把十进制的255、128、63、32、15分别转换成八进制。
    12.2. 二进制转成十进制
    (1) 原理:逐一对每位数字进行数字字面值乘以对应的进率的积,求和。
    (2) 原理示例: 289的含义是2个100+8个10+9个1,即2个10^2+8个10^1+9个10^0;
    (3) 把0b110转换成10进制
    12^2+12^1+02 ^0 =14+12+01=6;
    (4) 把0b1011转换成10进制
    12^3+02^2+12 ^1+12 ^0 =18+04+12+11=11;
    (5) 巩固练习,把0b111 1111、0b1111 、0b11分别转换成十进制;
    (6) 巩固练习,把077、0x77、0xFF转换成十进制;
    12.3. BCD码**
    (1) 原理:

    1. BCD码非常适合二进制和十六进制的互换,二进制和八进制的互换;
    2. 把二进制的数字,每【四个书写成一组】,例如: 0 0 1 1 0 1 0 1
    3. 每组内的四个二进制的进率十进制的值,从左向右依次为【8421】 :

      0 0 1 1 0 1 0 1
      8 4 2 1 8 4 2 1

    4. 把每组内【字面值不为零的】,十进制【进率求和】后写成十六进制:

      0 0 1 1 0 1 0 1
      8 4 2 1 8 4 2 1
      2+1=3 4+1=5;
      5.把和按位从左向右排好,就是十六进制:
      0 0 1 1 0 1 0 1
      8 4 2 1 8 4 2 1
      2+1=3 4+1=5;
      0x35
      6.倒着走一遍就是把十六进制转换成二进制;
      7.把二进制每三个书写成一组,对应进率十进制的值,从左向右依次为【421】,就是二进制和八进制的换算;
      (2) 练习,把0x7F ,0xcc, 0x112233,先转换成二进制,然后再转换成八进制;
      (3) 练习,把上述的练习,倒着转换一遍;
      12.5. **0~255以内十进制转二进制的速算法
      (1) 原理:短除式的速算
      (2) 原理示例:
      十进制的 78
      对应二进制进率的十进制字面值 128 64 32 16 8 4 2 1
      把78拆分成进率的十进制字面值 64 + 8+ 4 +2
      有值的位置填1,无值的位置填0 0 1 0 0 1 1 1 0
      连写重写一遍: 0b0100 1110 或者 0b100 1110
      (3) 练习,把43、89、127 转换成对应的二进制;
      (4) 再利用BCD码,把上述的二进制转换成八进制和十六进制;
      13.正码、反码、补码
      13.1.问题的出现**

    5. 上述进制示例和练习中,都是正数,负数是否也适用?

    6. 数学中,负数书写时,在字面值前面惯上负号即可,例如-6、-10;
    7. 计算机中,把二进制数的首位当做符号为,能否把正数的二进制首位直接改成1,当做负数呢?例6的二进制为110,-6能否写成1000 0110呢?
    8. 如果能,6 + -6=0 ,

    0000 0110 6
    + 1000 0110 -6
    —————————————————-
    1000 1100 0
    不是0 问题在哪儿?
    13.2.正码
    正数的二进制,把字面值转换成二进制得到的值,称为正码,也称为源码。
    正数都是以正码方式存储、运算、传输的。
    13.3.反码和补码
    (1)、【负数】的存储、计算、传输都是以【补码】形式的。
    (2)、反码:正码连同符号位一起取反,例如 int 6,
    正码: 000 (前24位) 0000 0110(后8位),
    反码: 111(前24位) 1111 1001(后8位),
    (3)、补码:反码的最后位加1后的和就是补码,即反码加1.
    正码:000 (前24位) 0000 0110(后8位),
    反码:111(前24位) 1111 1001(后8位),
    + 1
    —————————————————————-
    补码:111(前24位) 1111 1010(后8位),
    (4)负数,先计算出对应正数的正码,然后取反+1,计算出反码,然后以反码出现。即【负数,正码取反+1得反码】。
    (5)正数:正数的反码就是自身,即正码。
    13.4.减法运算
    (1)、CPU中没有减法运算;
    (2)、所有的减法都变成 加负数 ,例如 6-6 ,等价于 6 + (-6);
    (3)、正数都以正码形式出现,负数以反码形式出现
    (4)、把CPU的加减法统一成加法,制造时CPU用加法运算器完成加减法运算,降低制造难度。
    示例 6-6 ,等价于 6 + (-6);
    6的正码:000 (前24位) 0000 0110(后8位),
    + -6的补码:111(前24位) 1111 1010(后8位),
    ———————————————————————————-
    1(溢出丢掉) 000(前24位) 0000 0000(后8位)