写在前面:

视频是什么东西,有看文档精彩吗?

视频是什么东西,有看文档速度快吗?

视频是什么东西,有看文档效率高吗?

2. java 程序的5大部分

诸小亮:“师弟,接下来我们就要聊一聊 Java 程序的构成了”

张小飞:“好啊,终于开始正题了”

“一个完整的 Java 程序由很多部分共同组成,比如:关键字、标识符、注释、常量、变量。。。”

“停停停,师兄,您的意思是,之前的程序里有这么多东西?但是看着没你说的这么复杂啊”

“之前的只是入门程序,里面包含的东西并不全,只包含的有关键字、标识符这两项”

“原来是这样”

1. Java内置的——关键字

诸小亮:“咱们首先看——关键字”

关键字:Java 定义的,一些有特殊含义的单词(都是小写)

下图中,高亮的就是关键字

“师兄,不是用 IDEA 吗,怎么又用上记事本了”

“这可不是记事本,而是 Notepad++,是一个文本编辑器,刚才的 IDEA 只是让你熟悉一下,前期我们以Notepad++ 为主来编写程序,让你练一练手速 ”

“那刚才还安装 idea 干嘛?”张小飞不满的说到

“熟悉一下嘛,idea后面会用的,另外,在命令行中执行程序是非常重要的,会让你有很大的收获,这是每个人都应该体验的一个过程,一定要相信我”诸小亮郑重的说到

“明白” 张小飞看到师兄的表情,也不由的重视起来

“不过,关键字只有上面的 4 个吗?”

“不是的,关键字有很多,不过我们现在不会一个个的介绍,之后写程序的时候遇到一个说一个”

“。。。。,好吧”

2. 自己定义的——标识符

诸小亮:“接下来,我们学习——标识符

标识符:是自己在程序中自定义的名称

下图红框中的都是:

张小飞:“我总结一下:java定义的叫关键字,我们自己定义的叫标识符,是这个意思吧”

“没错,不过标识符不能随便定义,要遵守一些规则:”

标识符只能由 a-z,0-9, _ 和 $ 组成,还需注意:○ 数字不可以开头○ 不能使用关键字○ 在起名字的时,为了提高阅读性,要尽量有意义

“师兄,能不能列举几个例子”

“当然可以,看看这几个:”

合法标识符: age、name、$address、 _xiaofei非法标识符: 123abc、+salary、 #abc特别注意:aa、bb、cc 这样的标识符虽然合法,但是阅读性极差,在工作中是禁止使用的

“好的,我大概明白了”

3. 容易理解的——注释

张小飞:“注释是什么意思?”

诸小亮:“Java 是外国人开发的,代码一般都是英文,相对来说不容易理解”

注释:可以让我们用一些文字对程序进行说明,提高代码的阅读性

比如:

“哦,原来如此,确实容易理解多了,不过,注释都是以 ‘//’ 开头吗?”

“在 Java 中的注释有 3 种:单行注释、多行注释、文档注释”

  • 单行注释:以“//”开头
  • 多行注释:以 “/" 开头 ,"/” 结尾,比如:

  • 文档注释:"/**“开头,”*/"结尾(一般用不上,了解一下就行)

张小飞:“那,每句代码都要写注释吗?”

诸小亮:“这倒不用,给你一个建议:写代码前,先写注释,把自己的思路用文字先写下来

“这我明白,就像写作文前,先写大纲一样,对吧”

“是这个道理,你理解的还挺快”诸小亮夸赞道

4. 了解一下的——常量

诸小亮:“来,我们接着聊常量

常量:固定值,不能改变,比如:12345678,这些数字在现实中都是固定的,8就是8,无法改变

张小飞:“怎么就无法改变呢?看我一刀下去,不就成俩 0 了?”

“那以后就能用这俩 0 来代替 8 这个数字了吗?”诸小亮微笑的问道

“这个,嗯。。。。。”

“你这一刀只是把这张纸分成了两份,但是数字 8 仍然是 8 ,所以说它是常量”诸小亮解释道

“那,按照您在这么说,3.14 也是常量了?”张小飞问道

“是的,Java中的常量分为以下几种:”

整数常量 所有整数
小数常量 所有小数
布尔(boolean)型常量 只有两个数值:true、false,相当于我们中文:对、错
字符常量 将一个数字、字母、符号,用单引号(’ ')括起来
比如:‘1’、‘a’、‘冯’、‘$’
字符串常量 将一个、多个字符用双引号(“”)括起来
比如:“a”、“冯先生”、“fengxiansheng”、“12345678”
特殊的字符串:“”,表示空字符串
null常量 只有一个值 null,表示空,什么都没有的意思

“小飞啊,这些都能看懂吧”

“可以看懂,就是不知道怎么用”

“放心,之后的代码中会经常用到,目前只是了解一下”

5. 非常重要的——变量

1. 总述

诸小亮:“师弟,下面要介绍变量了,这是非常重要的,一定要仔细听”

张小飞:“师兄放心”

“变量:顾名思义,就是可以改变的值,比如:在数学中定义 x=3,y=4,z=x+y (xyz都是变量)”

在 Java 中定义变量,格式:数据类型 变量名 = 变量值;(注意:末尾有分号)

“师兄,这个数据类型是???”

“就是字面上的意思,比如:3是整数类型,3.14是小数类型(也叫浮点数类型)”

“原来如此,明白”

“Java中定义了 8 种基本数据类型,比如:”

良久,“师兄,我有 3 个问题,第一:byte、short、int、long都是整数类型,为什么有4种?”

诸小亮:“之所以分成4个类型,是因为每个类型占用的内存空间不同,来先给你普及一下基础知识:”

计算机中的单位换算:1 B/byte(字节) = 8 bit(比特)(位) 1 KB(千字节) = 1024 B/byte(字节) 1 MB = 1024 KB 1 GB = 1024 MB 1 TB = 1024 GB 1 PB = 1024 TB 1 EB = 1024 PB

编写代码时会设置大量的变量,在程序运行时每个变量都会占用一定的内存
但内存是比较珍贵的资源,如果用较小的空间就能够达到目的最好
比如:如果只做 100 以内的计算,那么使用 byte 类型就好

“原来如此,第二个问题:浮点数 和 布尔类型我能理解,不过这个字符,为什么取值也是数字呢”

“这个,之后的写代码时会给你详细解释的”

“好吧,那么第三:这些类型该如何使用呢?”

“这就是我们接下来要做的事情了”

2. 整数类型

“小飞啊,整数是我们工作中做常用的,所以一定要好好听,来,我们修改这个 Demo.java 文件”


注意:我们定义 byte b = 3; 这个 b 就是标识符

“师兄,您刚才还不是说不能用 aa、bb这样的标识符吗?现在。。。。。”张小飞无语到

“这个…嗯…,其实这个 b 是 byte 的意思,师弟,这不是工作,不用这么严格”

“好吧。。。。。”

“接着,我们在命令行对它进行编译:”


“师兄,您这样做的目的是???”

“马上你就知道了,我们继续修改:“

“你再次编译看看”

“师兄,这是不是编译失败了?”张小飞说到

诸小亮:“是的,我给你解释一下”

  • 在 Java 中,默认所有整数都是 int 类型,所以 300 被当成 int 类型
  • 代码中,要把 300 赋值给一个 byte 类型的变量,而 byte 的取值范围是 -128~127 ,容不下300,所以提示:“从 int 转换到 byte 可能会有损失
  • 而 byte b = 3; 虽然 3 也被当作 int,但 3 在 byte 的范围内,编译时会自动转为 byte 类型

张小飞:“原来是这样,我明白了,这表示之后使用整数时要先确定它具体是哪个类型

“没错,我们继续定义其他整数类型”诸小亮说到

“师弟,注意,上图的代码编译,还会报错:”

张小飞疑惑的问道:“这不对吧, 之前说过 long 类型的最大值是 2 的63次方 - 1,而 12345678900 远远小于这个值,为什么还报错呢?”

诸小亮:“原因:在 Java 中默认认为所有整数都是 int 类型,报错是因为 12345678900 超过了 int 的最大值”

“原来是这样,那该怎么办呢?”

“很简单,只需要在12345678900后面加上一个 L 就行了,表示这个数字是 long 类型,比如:”

“你再次编译试试看”

张小飞:“确实,修改后再次编译,不报错了:“

3. 自动类型提升

“师兄,自动类型提示是什么意思?”

“用代码演示一下你就明白啦,还是修改之前的代码:”

结果:

张小飞:“3+4=7,这不是很正常嘛”

诸小亮:“你仔细看,代码中,x是 byte 类型,y是 int 类型,为什么 x+y 的值 可以赋给 z 呢?

“是啊,为什么?”张小飞恍然大悟道

“这就是自动类型提升

不同类型数据计算时,小类型会自动转换为大类型

“你的意思是,x +y 时自动把 x 从 byte 升级到了 int 类型?”

“是的,你理解的完全正确,不过要注意一点:同类型计算也可能出问题,比如:”

public  static void main (String  []  args)  {short a=1;short b=2;short c= a + b;
}

结果:


张小飞:“这是为什么呢?a 、b 、c 都是 short 类型啊”

诸小亮:“因为:int 是 java 中整数的默认类型,小类型(byte、short)的计算同样会自动类型提升

“那,两个 int 类型做计算时,会自动提升为 long 类型?”

“这个倒是不会,记住:int 是 java 中整数的默认类型

“好吧,**int 是 java 中整数的默认类型,**这个你说了很多遍了,我记住了”

“很好,孺子可教也”

4. 强制类型转换

1. 演示

诸小亮:“师弟,你能参考自动类型提升,来解释一下什么是 强制类型转换 吗?”

张小飞思索了一下:“自动类型提升是小类型升级为大类型,强制类型转换是大类型转为小类型?”

“没错,是这个意思,我们先看一段代码:”

public static void main(String[] args){//计算 x + y,并输出结果byte x = 3;int y = 4;byte z = x + y;System.out.println(z);
}

“师兄,这段代码有问题吧”

“哦?你来说说看是什么问题”诸小亮好奇的问道

“x 是 byte 类型,y 是 int 类型,按照刚才的说法: x+y 时 x 会自动提升为 int 类型,所以 x+y 的结果是
int 类型 ,把一个 int 类型的值赋给 byte 类型的 z 不是有问题吗?如果我记得没错的话,编译的时候应该会提示:从 int 转换到 byte 可能会有损失”张小飞回答到

“厉害,你说的一点儿都不错,这是编译的结果:”


“但是,如果告诉你有一种方法可以让上面的代码赋值成功呢?你想不想知道?”

“师兄,你就别卖关子了,直接说吧”

“我们继续修改代码:”

“这样编译就不会报错,程序也正常运行:”

张小飞:“原来这就是强制类型转换啊,很简单嘛”

诸小亮:“是的,确实很简单,但是如果使用不当,也会造成一些问题的”

“什么问题?”

“来,我们再次修改代码,这次修改 y = 400”

“你看看最终输出的结果是多少”

“这个。。。,怎么会是一个负数?”

“因为:x + y =403,这是一个 int 类型的数值,强制转换为 byte 后,精度缺失造成的”

“精度缺失???”张小飞疑惑的问道

“是的,想要彻底明白这个问题,我们需要先聊一聊二进制

“。。。。。。二进制又是什么鬼”

2. 神奇的—二进制

诸小亮:“二进制:本质是一种计数方式,也是计算机语言

计数方式:十进制(满10进1),60进制(60s=1m),7进制(7天=1周),这些都是计数方式二进制比较特殊,是满 2 进 1,比如:1+1=10,10+1=11,11+1=100注意:二进制都由 0 和 1 组成

张小飞:“这个计数方式我能理解,不过它也是计算机语言?”

“是的,在计算机中,一切都是以二进制形式存在的,不同的 01 组合代表不同的含义使用不同的 01 组合代表世间万物,所以就有虚拟世界这一说法”

比如:01010代表:我,01011代表:你,0000000111111代表:他
注意:这里只是举个例子,并不是说 ‘我’ 在计算机中对应的就是:'01010'

张小飞:“有点儿意思,按照您的说法,数字在计算机中也是用二进制表示

诸小亮:“没错”

“师兄,可否让我见识一下,一个十进制数字用二进制怎么表示?”

“当然可以,网上有很多进制转换的工具,比如:https://tool.oschina.net/hexconvert/”

“这个,10 具体是怎么变为 1010 的呢?”张小飞问道

“转换的方法不是重点,重点是:int a = 10;,那它的二进制实际是:00000000 00000000 00000000 00001010”

良久,张小飞:“我明白了,因为 a 是 int 类型,占 4 字节 ,也就是占 32 个位对吧”

“是的,其实把一个数字换位二进制分两步:”

1. 利用上面的网址转换为二进制
2. 在左侧补0,具体补多少个0,就看它是那种类型的

张小飞:“我来试一下,如果 byte b = 3 ,那么它的二进制是:00000011”

“完全正确”

“师兄,如果是一个负数呢?您提供的网站工具是这样显示的:”

“上面给的不对,负数的二进制稍微麻烦一些,以 byte b = -10 为例,分为 3 步:”

1. 先获取它的正数的二进制,是:00001010,这称之为:-10 的原码
2. 将原码的每一位做取反,得到反码:11110101
3. 将反码+1:11110110,这就是 -10 的二进制

“师弟,其实这个负数的转换,了解一下就行了,实际时候用的并不是很多”

“好的,不过到现在我也不明白,这个跟 **精度缺失 **有什么关系呢?”

3. 最终解惑

诸小亮:“我们回忆一下:x + y = 403,是 int 类型,占 4 字节(32位),那么它的二进制。。。”

“403 的二进制是:00000000 00000000 00000001 10010011”张小飞抢着说到

“没错,而我们的代码是把 int 类型转为 byte 类型”

byte 类型,占 1 个字节,int 类型 转换为 byte,就是要丢掉3个字节,这就是精度缺失

“丢掉 3 个字节,那不是变成 00000000 了吗?这应该是 10 进制中的 0 啊”张小飞说到

“错了,应该是丢掉左侧的3个字节,那么剩下:10010011,而它的十进制就是 -109 ”诸小亮回复道

“原来如此”

“师弟,在告诉你一个结论:计算机中,二进制最左侧以 1 开头的都是负数

“明白!!!”

5. 小数类型

诸小亮:“我们接着看小数类型,也就是浮点数类型,这个就比较简单了”

float 和 double,double的精度更高一些精度:精确程度,小数越多,精确成度就越高

“但是,实际开发中一般不用 float ,为了数据的准确性,都使用double,比如:”

编译会报错:

张小飞:“让我猜一猜,报错的原因是:** Java 中默认认为所有小数都是 double 类型**”

“是的,如果要用 float 类型,需要在末尾加上一个 f,比如:”

6. 布尔和字符类型

诸小亮:“布尔类型很简单,定义一个boolean类型的变量如下:”

张小飞:“这个很容易理解,我疑惑的是 char 类型为什么是数字?”

“先看一段代码,然后再给你解释”

结果:

“师兄,说实话,这个代码和输出结果,让我更加的迷糊了”

“来,我给你解释一下:”

  • 计算机能理解的语言是:二进制,而人类的语言是:abc、你我他、0-9、!@#$%等,
  • 为了方便的跟计算机沟通,先辈们使用二进制跟人类语言做了个映射
    • 比如:01100001---->a,01100010---->b
    • 这种映射关系称为:ASCII编码表

“就是用二进制来表示世间万物嘛,这个我懂,但是没想到前辈们竟让做了一张表出来,这个表是什么样子的?”

“来看下面的这张图:”

“从图中可以看出,01100001转换为 10 进制就是 97,也就是字母 a,正因为这样,所以 char 类型的值可以是数字也可以是字符

“那为什么代码中两个输出,一个是数字,一个是字符呢?”张小飞接着问

“上面代码的执行过程是这样的:”

  • 计算机先把 97 转换为二进制:01100001
  • 执行 println 时,因为 c 是 char 类型,所以就通过ASCII编码表找到了a,并输出
  • 执行:c2 + 2 时,因为类型不同,c2先做类型提升(转换成97),所以最终结果是 int 类型的 99

张小飞:“原来如此,这下我就明白了”

诸小亮:“那么我们接着说,接下来是。。。。”

“停停停,师兄,这都中午了,该歇一歇了吧,肚子都饿扁了”

“哦?没想到时间过的这么快,那好吧,走吃饭去,回来后你好好练一练”

“啊?不会吧,正所‘食饱思眠欲’,吃过饭后不应该睡一觉吗?”

“大白天睡什么觉,浪费生命”

“这你就不懂了,睡觉是一种艺术,睡不好是你糟塌了,没听过吗?‘少睡一分钟,就缺少60秒的幸福’”

“行行行,我说不过你,不过下午可不会再给你时间练习的”

“放心吧,这也没多少东西,早就记牢了”

张小飞的Java之路——第三章相关推荐

  1. 张小飞的Java之路——第九章

    写在前面: 视频是什么东西,有看文档精彩吗? 视频是什么东西,有看文档速度快吗? 视频是什么东西,有看文档效率高吗? 诸小亮:"封装说完后,我们接着看面向对象的第二大特征--继承" ...

  2. 20145302张薇《Java程序设计》实验三报告

    20145302张薇<Java程序设计>实验三:敏捷开发与XP实践 实验内容 使用git上传代码 使用git实现代码开发实践 实现代码的重载 使用git上传代码 git init git ...

  3. 尚硅谷Java入门视频教程第三章——数组

    尚硅谷Java入门视频教程第三章 第二章复习 课后习题 复习 嵌套循环典型例题 Ecplise的安装使用 第3章:数组 3.1 数组的概述 3.2 一维数组的使用 3.3 多维数组的使用 3.4 数组 ...

  4. Java学习之路 第三章 流程控制

    第三章 流程控制 1.if条件语句 (1)简单的if条件语句语法: if(条件){语句: } 注意:a.条件必须最后返回一个布尔值. (2)嵌套if语句语法: if(条件1){if(条件2){...} ...

  5. Effective Java 读书笔记----第三章

    第三章 对于所有通用的方法 主要讲的是对Object类的非final方法(equals,hashCode,toString,clone和finalize)覆盖的一些规则 1.覆盖equals时请遵守通 ...

  6. 【JAVA SE】第三章 运算符、条件语句、switch结构、while循环、do…while循环、for循环、break关键字以及break和continue关键字

    第三章 运算符.条件语句.switch结构.for循环.break关键字以及break和continue关键字 文章目录 第三章 运算符.条件语句.switch结构.for循环.break关键字以及b ...

  7. Java并发编程 - 第三章 Java内存模型

    前言: Java 线程之间的通信对程序员完全透明,内存可见性问题很容易困扰 Java 程序员,本章将揭开 Java 内存模型神秘的面纱. 一.Java 内存模型的基础 1.1 并发编程模型的两个关键问 ...

  8. 移动通信学习之路----第三章

    移动通信第三章 知识点总结 第三章 组网技术基础 1.移动通信网的基本概念 2.无线电干扰 3.区域覆盖 4.信道(频率)的分配方法 5.提高蜂窝系统容量的方法 6.移动性管理 7.越区切换准则 8. ...

  9. 【流放之路-第三章】

    来到萨恩城废墟 来到平民窟 来到火葬场 发个传送门打完回城交所有任务再到贫民窟 来到下水道口 来到黑石陵墓 跑完试炼回城 退出重进 第三章买:漩涡.第二章:精准破坏.第一章:效能.第二章:元素集中 一 ...

最新文章

  1. MySQL Cluster(MySQL 集群) 初试
  2. SQL Server 表分区注意事项(转载)
  3. A Windows Mobile GPS Application Sample – Using Fake GPS
  4. BTrace实现浅析
  5. 《Java和Android开发学习指南(第2版)》——第2章,第2.10节本章小结
  6. Kali Linux 网络扫描秘籍 第四章 指纹识别(二)
  7. Python 之详解深拷贝和浅拷贝
  8. 深入浅出通信原理连载145-389(Python代码版)
  9. kubernetes(4)Pod的核心概念、Pod的调度
  10. 进程间通讯SendMessage
  11. 还在为 520 发愁吗?教你用 Python 写个表白神器
  12. 用CHATGPT做微信视频号和抖音大神,就这几步!
  13. IOS开发插件和工具总结
  14. 仿淘宝 打开app时识别淘口令和解析保存到本地的带二维码图片的网址
  15. 怎样学好英语?(多年英语学习经验总结)
  16. QGIS制图中面积小的区域不显示注记
  17. canvas 贝萨尔曲线
  18. 【编程语言】计算机编程语言
  19. 【Pygame实战】飞机射击大作:宇宙激战一触即发...这款超经典的射击游戏也该拿出来重启了~
  20. POJ 1753 翻棋子 (dfs+递归)。

热门文章

  1. 学习爬虫之Scrapy框架学习(3)---豆瓣top250电影完整版信息获取及如何存储到mysql数据库;Scrapy shell和Scrapy选择器;使用到日志的学习!
  2. python求语音信号短时能量、短时过零率、语谱图
  3. java的rest教程,REST接口
  4. linux内核的原子操作简述
  5. part1:推荐一些适合练手、课程设计、毕业设计的python小项目源码,无任何下载门槛
  6. sql server出生年月减去退休年月 计算年龄
  7. foxmail邮箱怎么导入邮件_Foxmail怎样导入和导出邮箱账户和邮件
  8. 最简单的单层神经网络实现鸢尾花分类
  9. Zookeeper 原理与优化
  10. git切换master项目,新建分支new branch