1.目标任务
- 了解关键字和标识符的区别
- 掌握三种注释
- 了解Java的数据分类
- 掌握变量的含义,定义、赋值、读写
- 掌握数制、大进制转小进制、小进制转大进制
- 掌握正码、反码、补码;
- 掌握二进制的加法和减法;
2.Java语言基础的组成
Java语言基础由:关键字、标识符、注释、常量和变量、运算符、语句、函数和数组等组成。
3.关键字
3.1.关键字的定义和特点:
定义:被Java语言赋予了特殊含义的单词。
特点:关键字中所有字母都为小写。
3.2. 关键字一览表
所有的关键字都不需要记忆,在后期的学习中慢慢就会掌握。
(1)关键词列表
(2)示例, 下图中红色字体部分就是关键字:
4. 标识符
4.1. 定义及特点
定义:在程序中自定义的一些名称,例如:类名。
特点:由26个英文字母大小写,数字:0-9,符号:_、$组成。
4.2. 定义合法标识符规则
- 数字不可以开头,例如:2Demo就不可以。
- 不可以使用关键字,例如:public就不可以,因为public是关键字。
- 不可以包含”、$”以外的特殊符号,例如:“Demo Test”就不可以,其中的空格就是特殊符号。特殊符号”、$”能不使用时尽量不要使用,在有些第三方系统中有特殊用途。
- Java中严格区分大小写,例如:name 、Name、NAME是几种不同的标识符。
- 在起名称时,为了提高可阅读性,要尽量有意义。
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.练习前两种注释
5.4.练习第三种注释
5.5.注释的补充
1、对于单行和多行注释,被注释的文字,不会被JVM(java虚拟机)解释执行。所以,即使添加再多的注释,编译后生成的class文件占用硬盘字节多少不变。
2、对于文档注释,是java特有的注释,其中注释内容可以被JDK提供的工具javadoc所解析,生成一套以网页文件形式体现的该程序的说明文档,作为在线提示帮助文档。
3、多行注释、文档注释、不支持嵌套。
4、注释是一个程序员必须要具有的良好编程习惯。初学者编写程序必须养成习惯:先写注释再写代码。
5、将自己的思路通过注释先整理出来,再用代码去体现,因为代码仅仅是思路的一种体现形式而已。后续学习中体现出来。
6.Java语言的数据类型
任何再NB的语言,再NB的技术,都是人们在生产生活中解决某些问题时,通过归纳、总结、提炼而成,然后再回归到生产生活中检验有效后,得以推而广之的。Java也不例外,不要为了 理解技术而理解技术,不要为了学习技术而学习技术。
6.1. 生物学中有【物种分类】
为什么需要把生物分成很多很多不同的类型呢?
6.2. 工作有【职业分类】
百度百科《中华人民共和国职业分类大典》
第一大类:党的机关、国家机关、群众团体和社会组织、企事业单位负责人;
第二大类:专业技术人员;
第三大类:办事人员和有关人员;
第四大类:社会生产服务和生活服务人员;
第五大类:农、林、牧、渔业生产及辅助人员;
第六大类:生产、运输设备操作人员及有关人员;
第七大类:军人;
第八大类:不便分类的其他从业人员。
为什么需要把职业分成很多很多不同的类型呢?
6.3.程序语言中的【数据类型】
思考1:如果你需要为电商系统做一个后台系统,是否需要处理诸如:姓名、密码、手机号、是否注册、是否登录、商品、单价、数量、小计金额、总计金额、需要支付金额、快递地址、是否结算、折扣、支付金额是否足够等数据呢?
思考2:如果站在计算机的角度,如何才能【高效】的管理这些数据呢?
Java语言是【强类型】语言,对于每一个数据都必需有明确具体的数据类型,并按本类型的大小在内存中分配对应大小的空间,来存放这个数据。
Java语言中有【8种基本类型3种引用类型】
6.4.怎么用呢?
先等等,跟后面一块再练习。
7.生活中的常量与变量
7.1. 生活中的原型
1、有些人说话一言九鼎,生不改名死不改姓。西方有些政治人物胡说八道、朝说夕改,一日多变;
2、过去学习过的数学公式、物理公式中,有些值始终固定不变,有些值跟据上下文环境变化而变化;
3、语文中经常需要引用别人的原话。论文中经常需要引用别人的原文;
4、过去解方程题是,经常借助一些未知数符号,诸如:x、y、z和方程式子来解题;
7.2.小学应用题
7.3.数学公式中的常量
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:
(2) 、图解2:
我们可以在盒子内放入指定类型任何值。并且,这个盒子的值,我们想改变多少次,就可以改变多少次:
String message; // 声明一个变量名
message = ‘Hello!’; //给变量名赋值
message = ‘World!’; // 再次赋值,值改变了
System.out.println(message);//通过变量的名存取值用于输出显示
9.2.变量的声明、赋值、读取
规则:
(1)、声明变量名时,变量的类型必需位于变量名之前,中间用空格隔开;
(2)、变量名可以先声明、再赋值,也可以声明时直接赋值;
(3)、变量赋值时,前面是变量名,后面是值(或者算术表达式),中间的=号表示把后面的值赋给前面的变量名。
(4)、赋过值的变量名,才能用于读取;
(5)、同一个代码块内(什么是代码块,目前不要可以去理解),同一个变量名不能重复声明定义。
注意:
(1)、一个变量只能存放某同一类型的数据。
(2)、扩展延伸,变量的作用范围,一对{}之间有效,并且从定义处开始;
9.3.扩展延伸、数字的默认类型
(1)、整数数字,默认类型时int类型;
(2)、小数数字,默认类型是double;
(3)、double类型的小数精度比float类型的小数更高;
9.4. 常见错误
(1)、变量重复定义
(2)、变量没赋值就使用:
(3)、变量声明类型和赋值类型不一致:
(4)、变量声明类型和赋值类型不一致:
(5)、没有正确结束:
10.扩展延伸、类型转换**
类型转换在开发中也很常用,简单来说就是类型之间相互的转化,类型转换共分两种:自动类型转换和强制类型转换。
10.1.自动类型转换(隐式类型转换)
定义:自动类型转换就是不需要我们手动对类型来进行强制转换。
示例:
说明:int类型的变量占4个字节,当byte类型的变量与其相加的时候,首先会将byte类型的变量自动转化为4个字节的int类型,然后再进行加法操作。
10.2. 强制类型转换(显式类型转换)
定义:强制类型转换需要把类型进行手动转换,否则无法正常使用
错误原因:当byte类型的变量提升为int类型与int类型的常量200相加后,结果依然是int类型,再赋值给byte类型,当然会出现损失精度的错误。
解决方法:进行强制类型转换,也就是将占4个字节的int类型值,再强硬存储到占1个字节的byte变量中。
说明:结果为-53的原因是,200+3结果是203,换算成占1个字节空间的二进制也就是11001011。由于首位为1,所以是负数,除符号位外,其余部分取反加1,得1,0110101,即-53。
10.3.补充1、**只有数值类型才能进行加法操作,非数值类型不行。
示例:
2、char类型数据也可以和int类型相加,但是首先char类型数据会被自动提升为int类型。
示例:
说明:字符类型数据之所以能够自动提升为int类型是因为字符类型数据在计算机中也是用0、1表示的,int类型数据在计算机中也用0、1表示,所以char类型数据当然可以转换为int类型数据。但是,字符类型数据在计算机中使用0、1表示是按照何种顺序组合排列的则需要依据某个码表而定。Java中的内置码表是Unicode,既包含中文,也包含英文。
10.4.补充2、**通过强转也可以把数字强转成字符。
10.5. 表达式的数据类型自动提升:
所有的byte型、short型和char的值将被提升到int型。
如果一个操作数是long型,计算结果就是long型;
如果一个操作数是float型,计算结果就是float型;
如果一个操作数是double型,计算结果就是double型。
10.6. 面试难题:
说出报出如下错误的原因:
错误原因:涉及到编译器编译程序时候的细节,之所以byte b = 3 +7;,没有报错,是因为3和7都是常量,编译器知道结果是10,并且在byte范围之内,因此就自动进行了强转,所以不会报错。而b = b1 + b2;中b1和b2都是变量,编译器编译程序是一行一行编译的,它根本不知道b1和b2到底是多少,两个byte类型的数据相加时,首先都会被提升为int类型,他们的和也是int类型,其值可能会超过byte的范围,因此就会报错。
而如下程序则不会报错:
说明:原因是因为int类型的两个变量相加,最后还是int类型,虽然结果溢出,但是不会报错。
11. 进制**
- 电脑和网络中,无论是数据存储,还是数据计算、或者数据传输,都是采用二进制进行的;
- 一个大点的数字,写成二进制时,往往占二三十位很正常,数据位数长度越长,阅读越困难;
- 因此一般都把二进制换算成16进制的形式,缩短位数,方便读写;
- 但是人们在生活中,已经习惯用十进制读写;
- 于是,二进制、十进制、十六进制,便成了程序员常用的数字进制;
11.1.数字常用几种进制
- 二进制:有0-1两个数字,满2进1,用0b开头表示。如:0b11;
- 八进制(现在很少使用):有0-7八个数字,满8进1,用0开头表示,如:012;
- 十进制:有0-9十个数字,满10进1;
- 十六进制:有0-9A-F十六个数字,满16进1,用0x开头表示。如:0x4A2C;
11.2.计算器中的进制
(1) 入口 : 点击“开始”—>“所有程序”—>“附件”—>“计算器”。
(2)win10版计算器的四种表现形式
规律:进制越大,表现形式越短。
(3)在十进制下,输入1100。
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);
}
}
11.4.生活中的二进制原型
(1) 古代的结绳记事,有个疙瘩表示有一件事,没疙瘩当天没事。当需记录一个大事时,把多个小疙瘩拧成一个大疙瘩。
(2)现代生活中:
(2.1) 开关有两种状态,开和关;
(2.2)银行的磁条卡中,用强磁和弱磁表示强和弱;
(2.3)U盘和内存条中,用高电平和低电平表示高和低。
11.5.电脑中的二进制** **
- 一位二进制数,只有两个数字,从0开始计数,即0和1。用电子元器件表示时,只要有两种状态即可,于是用一个电子开关,开关两端是低电平时表示数字0、两端高电平时表示数字1。一个开关有两种状态,能记录两个数字。即2 ^1种状态,计数范围:0~2^1-1;
- 当需要表示多于两个数字时,再引入一个开关,通过排列组合(00,01,10,11),能表示2*2=4种状态,即2 ^2种;计数范围:0~2^2-1;
- 当需要表示多于四个数字时,再引入一个开关,通过排列组合(000,001,010,011,100,101,110,111),能表示222=8种状态,,即2 ^3种;计数范围:0~2^3-1;
- 为了规范管理,8个开关为一组,【简称一个字节(BYTE)8个字位(BIT)】,共有2222 222*2种排列组合 ,即2^8种状态; 计数范围:0~2^8-1;
- 为了进一步扩大计数范围,于是有8个一组的,16个一组的,32个一组的,64个有一组的,能计数的 范围分别是0~2^8-1 , 0~2^16-1 , 0~2^32-1 , 0~2^64-1。
- 能记正整数,如何记负整数呢? 把首位当做符号为,首位为0表示正数,首位为1表示负数。数学中数字零,在计算机中并入正数行列,即正数从0开始,负数从-1开始。
- 于是就有了整数的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:电脑中的ACSII编码表,点击跳转
附2:电脑中的UTF-8编码表,点击跳转
11.6.几个跟二进制有关的名词
- 1Byte = 8bit;
- 1KB = 1024Byte;
- 1MB = 1024KB;
- 1GB = 1024MB;
- 1TB = 1024GB;
- 64位的CPU、64位的操作系统,就是CPU底层标准字宽64个bit;
- 网络下载速率200KB中的KB就是上面的KB;
12.进制转换
(1)大进制向小进制转换时,采用【短除式】;
(2)小进制向大进制转换时,采用【进率式】;
(3)二进制、十六进制的【BCD码,或者8421码】;
(4)0~255以内十进制转二进制的口算速算法;
12.1. **十进制转二进制
(1) 原理:对十进制数进行除以2的短除式运算。
(2)示例:求十进制数6和11的二进制数。
(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) 原理:
- BCD码非常适合二进制和十六进制的互换,二进制和八进制的互换;
- 把二进制的数字,每【四个书写成一组】,例如: 0 0 1 1 0 1 0 1
每组内的四个二进制的进率十进制的值,从左向右依次为【8421】 :
0 0 1 1 0 1 0 1
8 4 2 1 8 4 2 1把每组内【字面值不为零的】,十进制【进率求和】后写成十六进制:
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.问题的出现**上述进制示例和练习中,都是正数,负数是否也适用?
- 数学中,负数书写时,在字面值前面惯上负号即可,例如-6、-10;
- 计算机中,把二进制数的首位当做符号为,能否把正数的二进制首位直接改成1,当做负数呢?例6的二进制为110,-6能否写成1000 0110呢?
- 如果能,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位)