Java基础教程-01-Java简介与
1. 计算机基本概念
1.1 计算机组成
计算机由计算机硬件和计算机软件组成.
- 计算机硬件: 你的眼睛能看的见, 你的手能摸得着的东西.
1)中央处理器(CPU)
• 由运算器和控制器组成.
2)存储器
• 内存: 内存条(代数, 睿频).
• 外存: 硬盘(SSD: 固态硬盘, HSD: 混合盘, HDD: 机械硬盘), U盘.
3)输入设备
• 键盘, 鼠标
4)输出设备
• 显示器. - 计算机软件: 能在计算机上运行的程序.
1)系统软件: Windows操作系统, Mac操作系统, Linux操作系统.
2)应用软件:
• 概述: 我们程序员用编程代码开发的软件.
• 例如: Typora, 微信, QQ.
1.2 语言简介
1.2.1 什么是语言(Language)?
指的就是人与人之间进行沟通, 交互的载体, 方式.
1.2.2 什么是计算机语言(Computer Language)?
指的就是人与计算机之间进行交互的方式.
1.2.3 计算机语言的分类:
1.2.3.1 机器语言
简单理解: 由二进制0, 1这样的指令组成.
例如: 10010表示 加法.
1.2.3.2 汇编语言
简单理解: 用一些简单的字母表示二进制序列(0, 1)
例如: add表示 加法.
优点: 文件小, 执行速度快, 可以直接操作计算机的硬件
弊端: 可读性和可移植性相对较差, 对程序员来讲, 门槛较高.
1.2.3.3 高级语言
简单理解: 由一些纯英文字母(包含大小写) 和 一些特殊符号组成.
例如: +表示 加法.
优点: 语法相对简单, 可读性, 兼容性较强, 对程序员来讲, 门槛较低.
弊端: 种类繁多, 每种语言都有自己的语法, 每学一门语言, 都要学习新的语法.
1.2.3.4 分类
- 第一代高级语言:
例如: C语言, 以面向过程为编程思想, 唯一一门可以直接操作计算机硬件的高级语言 - 第二代高级语言:
例如: C++, 以面向对象为编程思想, 没有默认的垃圾回收机制. - 第三代高级语言: 目前市场上应用最多的语言
例如: Java, C#, 以面向对象为编程思想, 而且有默认的垃圾回收机制(GC). - 第四代高级语言: 未来的发展趋势, 现在还处于发展初期
简单理解: 以面向问题编程思想为主, 也就是说: 告诉计算机做什么, 而不是怎么做.
例如: Siri语言交互, 大数据云平台, 这些势必肯定会用到大数据框架等技术.
2. Java语言简介
2.1 为什么要学习Java语言
使用最广泛, 且简单易学
Java是一门强类型的语言
Java有非常完善的异常处理机制
Java提供了对于大数据的基础性支持
2.2 概述
Sun公司(Stanford University NetWork: 美国的斯坦福大学)在1995年推出的高级编程语言.
Java之父: 詹姆斯·高斯林(James Gosling)
Sun公司在2009年被甲骨文(Oracle)公司给收购了.
2.3 平台版本
J2SE: 标准版, 也是其他两个版本的基础. 在JDK1.5的时候正式更名为: JavaSE.
J2ME: 小型版, 一般用来研发嵌入式程序. 已经被Android替代了. 在JDK1.5的时候正式更名为: JavaME.
J2EE: 企业版, 一般开发企业级互联网程序. 在JDK1.5的时候正式更名为: JavaEE.
2.4 特点
1. 开源
指的是Java源代码是开放的.
2. 跨平台
指的是: 用Java代码编写的程序, 可以在不同的操作系统上运行.
原理: 由JVM保证Java程序的跨平台性, 但是JVM本身并不能跨平台.
图解:
3. 多态
4. 多线程
5. 面向对象
3. JDK和JRE(掌握)
3.1 概述
JDK: Java开发工具包(Java Development Kit), 包含开发工具 和 JRE.
常用的开发工具: javac, java
JRE: Java运行时环境(Java Runtime Environment), 包含运行Java程序时所需的核心类库和 JVM.
核心类库: java.lang, java.util, java.io
JVM: Java虚拟机(Java Virtual Machine)
作用: 用来保证Java程序跨平台性的, 但是JVM本身并不能跨平台.
3.2 图解
3.3 Java环境搭建
1. JDK的下载
Oracle官网: www.oracle.com
直接下载JDK的地址: https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html
2. JDK的安装
傻瓜式安装(下一步下一步就可以了)
安装路径(以后但凡是安装开发软件, 都要满足以下两点: )
不要直接安装到盘符目录下.
安装路径最好不要出现中文, 空格等特殊符号.
目录解释:
bin: 存放的是编译器和工具
db: 存数数据
include: 编译本地方法.
jre: Java运行时文件
lib: 存放类库文件
src.zip: 存放源代码的.
3. JDK的卸载
去控制面板直接卸载就可以了.
小技巧: windows徽标键 + 字母R -> control -> 然后敲回车, 这样可以直接打开控制面板.
4. Path环境变量配置(掌握)
4.1 目的
让我们可以在任意目录下都能使用JDK提供的常用开发工具, 例如: javac, java
4.2 步骤
- 新建一个系统变量: JAVA_HOME, 它的值就是你安装的JDK的路径(注意: 不要带bin这一级)
注意: 变量值不要带bin目录.
- 在path中配置你刚才设置好的JAVA_HOME环境变量.
格式: %JAVA_HOME%\bin
解释: %JAVAHOME%表示引入该系统变量的值, 即: C:\Software\OfficeSoftware\jdk1.8.0112 - 测试
– 方式一: 在DOS窗口中输入"javac 或者 java", 能看到对应的一坨指令即可.
– 方式二: 在DOS窗口中输入"java -version", 可以看到当前配置的JDK的版本.
5. HelloWorld案例(掌握)
5.1 程序的开发步骤
Java程序的开发步骤一共3步, 分别是:
- 编写
- 编译
- 执行
图解:
5.2 编写源代码
- 在D:\BaseClass\EmploymentClass0520\JavaSE\Day01\code文件夹中创建HelloWorld.java文件.
- 用记事本打开HelloWorld.java文件.
- 在HelloWorld.java文件中编写如下内容:
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello World!");
System.out.println("你好, 欢迎来到我的直播间, 记得刷礼物喲!");
}
}
注意: HelloWorld.java叫源代码文件, 是我们能看懂, 但是计算机看不懂的文件.
5.3 编译
通过javac指令将HelloWorld.java文件编译成HelloWorld.class字节码文件.
格式
在DOS窗口中输入如下内容:
javac HelloWorld.java
5.4 执行
通过java指令, 让计算机执行HelloWorld.class字节码文件.
格式
//在DOS窗口中输入如下内容:
java HelloWorld
注意: 直接写文件名即可, 不需要写文件后缀名, 即: .class
5.5 可能会遇到的问题
Bug
• 概述
在电脑系统或程序中,隐藏着的一些未被发现的缺陷或问题统称为bug(漏洞)
• 解决方案
多看, 多思考, 多尝试, 多总结
遇到的问题
- 非法字符.
注意: 我们使用的符号全部都是英文状态下的符号 - 注意字母的大小写.
注意: Java是严格区分大小写的. 也就是说: A和a不是一回事儿. - 文件后缀名的问题.
千万不要出现 HelloWorld.java.txt 这种情况 - 在编译或者运行时, 指令及文件名不要写错了.
//编译的格式
javac HelloWorld.java
//运行的格式
java HelloWorld
6. 常用的开发工具
6.1 概述
开发工具指的就是我们用来编写代码的软件.
6.2 分类
开发工具指的就是我们用来编写代码的软件, 常用的主要有以下几类:
• windows操作系统自带的记事本
缺点: 没有行号, 关键字不能高亮显示, 代码不能折叠.
• 高级记事本(Notepad++, Editplus)
优点: 有行号, 关键字能高亮显示, 代码能折叠.
缺点: 不方便我们调试, 不适合开发大型项目.
• 集成开发工具(IDE)
– 集成开发工具指的是集代码的编写, 编译, 运行, 调试, 重构等一系列功能于一体的软件.
– 常用的IDE如下:
• Eclipse
• MyEclipse
• IDEA
6.3 IDEA的下载和安装
6.3.1 概述
IDEA 全称 IntelliJ IDEA,是Java编程语言开发的集成环境。IntelliJ在业界被公认为最好的java开发工具,尤其在智能代码助手、代码自动提示、重构、J2EE支持、各类版本工具(git、svn等)、JUnit、CVS整合、代码分析、 创新的GUI设计等方面的功能可以说是超常的。IDEA是JetBrains公司的产品,这家公司总部位于捷克共和国的首都布拉格,开发人员以严谨著称的东欧程序员为主。它的旗舰版本还支持HTML,CSS,PHP,MySQL,Python等。免费版只支持Python等少数语言。
总结: IDEA这个软件是用ava语言开发的, 所以想使用IDEA, 你电脑上必须安装JRE.
6.3.2 下载
JetBrains公司官网: www.jetbrains.com
直接下载地址: www.jetbrains.com/idea/download/other.html
6.3.3 安装
- 双击安装包ideaIU-2018.3.4.exe进行安装, 选择next进行下一步.
- 修改安装路径, 然后选择next.
- 选择64bit(64位), 然后选择next.
- 直接选择next, 然后开始安装即可(这个过程需要点时间, 请耐心等待).
5. 安装成功.
6.3.4 首次启动
- 不导入任何配置, 选择Do not import settings, 然后选择OK.
- 设置用户界面主题, 可以根据自己的喜好进行设置, 然后选择Next: Default plugins.
3. 这个界面是告诉我们, 当前的IDEA可以开发哪些程序, 默认这些模块都是选中的, 如果明确知道不需要使用某些模块, 可以通过Disable All禁用掉此模块. 这里我们不需要禁用, 直接选择Next: Featured plugins即可.
4. 这个界面是JetBrains公司提供给我们的可选择性安装的5个小插件, 我们可以根据需求进行选择, 这里建议安装最后一个插件IDE Features Trainer, 它可以帮助我们快速使用IDEA. 然后选择Start using IntelliJ IDEA即可.
- 因为IDEA的旗舰版是收费的, 这里我们选择Evaluate for free(免费试用30天).
6.4 创建项目和模块
- IDEA版项目组成简介.
简单理解: 一个Java程序 = 一个IDEA中创建的项目.
详细图解
2. 选择Create New Project, 新建项目.
3. 新建一个空项目.
4. 指定项目名和项目的保存位置.
5. 新建模块.
- 第一次使用IDEA, 需要关联JDK.
7. 创建Java模块.
- 指定模块名和路径, 然后选择Finish.
- 第一次创建模块时, 如果模块没有自动关联JDK, 则需要我们手动设置下关联.
10. 设好以后, 格式如下, 至此, 模块创建完毕.
- 第一次进入到项目界面, 会弹出如下对话框.
6.5 HelloWorld案例(IDEA版)
- 在src源代码包下创建自定义包 com.itheima.demo01
2. 在com.itheima.demo01包下创建HelloWorld类.
- 编写源代码, 然后在代码编辑区右键, 选择Run HelloWorld.main(), 执行程序即可.
4. 如果提示错误: 找不到或无法加载主类 com.itheima.demo01.HelloWorld, 则修改下项目语言级别即可, 然后重启下IDEA.
具体步骤:
左上角的File -> Project Structure -> Project -> 修改Project SDK和Project language level两个选项的值 -> 然后关闭IDEA软件, 重新打开即可.
图解:
5. 目录解释.
6.6 基本配置和常用快捷键
6.6.1 基本配置, 详见下图: 
6.6.2 注意
隐藏不需要的文件, 需要在界面的lgnore files and folders选项值后加*.idea;*.iml;out;即可.
6.6.3 IDEA常用快捷键
常用的快捷键如下图:
6.7 导入和删除模块
6.7.1 删除项目
选择要移除的项目, 然后右键点击, 选择Remove Module, 即可移除该模块.
6.7.2 导入模块
选择IDEA软件左上角的File选项, 然后选择Project Structured, 选择Modules, 选择+(加号), 然后选择Import Module, 然后导入指定模块即可.
7. 注释(掌握)
7.1 概述
就是用来对程序进行解释和说明的文字.
大白话翻译: 注释是给我们程序员看的, 并不是给计算机看的.
7.2 分类
• 单行注释
//单行注释
• 多行注释
/*
多行注释
多行注释
*/
• 文档注释
/**
文档注释
文档注释
*/
8. 关键字(掌握)
8.1 概述
就是被Java语言赋予了特殊含义的单词.
8.2 特点
• 关键字是由纯英文字母组成的, 而且全部都是小写的.
• 常用的开发工具(Notepad++, IDEA)针对于关键字都会高亮显示.
8.3 常用的关键字(目前了解即可)
• public: 公共的权限, 目前先了解即可.
• class: 表示在创建一个类.
• static: 表示静态的意思.
• void: 表示方法的返回值类型.
8.4 定义Java源代码文件的格式
//类名可以自定义.
public class 类名 {
public static void main(String[] args) {
System.out.println(这里的内容可以随便写);
}
}
8.5 补充: 保留字
• 概述:
现在还不是关键字的单词, 但是却具有关键字的意义, 在以后的JDK升级版本中, 可能会被升级为关键字的单词.
• 常见的保留字:
goto, const
9. 常量(掌握)
9.1 概述
指的是在程序的执行过程中, 其值不能发生改变的量.
9.2 分类
• 自定义常量(目前先了解, 在面向对象的时候, 才会详细解释)
• 字面值常量
解释: 根据字面意思就可以划分的常量.
- 整数常量.
例如: 1, 2, 3, 11, 22, 521 - 小数常量.
例如: 5.21, 13.14 - 字符常量.
解释: 字符的意思是说只能有一个值, 而且要用单引号括起来
例如: ‘A’, ‘B’, ‘c’, ‘10’(这样写会报错, 因为10是由1和0两个值组成的) - 字符串常量.
解释: 字符串常量值都要用双引号括起来
例如: “abc”, “传智播客”, “黑马程序员”, “大数据” - 布尔常量
解释: 比较特殊, 值只有两个
• true, 相当于正确
• false, 相当于不正确 - 空常量
解释: 比较特殊, 值只有一个: null, 表示什么都没有.
注意: 空常量不能通过输出语句直接打印.
9.3 代码演示
public class ConstantDemo01 {
// 定义main方法,作为程序的主路口
public static void main(String[] args) {
//1. 输出整数常量
System.out.println(10);
System.out.println(20);
System.out.println("=============================");
//2. 输出小数常量
System.out.println(5.21);
System.out.println("=============================");
//3. 输出字符常量 要求值有且仅有一个
System.out.println('男');
//System.out.println('10'); // 这样写会报错 10 = 1 + 0
//System.out.println(''); // 这样写会报错
System.out.println("=============================");
//4. 输出字符串常量
System.out.println("落空空");
System.out.println("");
System.out.println("=============================");
//5. 输出布尔常量
System.out.println(true);
System.out.println(false);
System.out.println("=============================");
//6. 输出空常量 在java中 空常量不能直接输出
}
}
10. 变量
10.1 概述
• 在程序的执行过程中, 其值可以在某个范围内发生改变的量就叫变量.
• 从本质上讲, 变量其实是内存中的一小块区域. 例如:
– 商品的价格(5元,6元,4元)
– 钟表的时间(5点,6点,6点半)
– 人们的年龄(0岁,10岁,18岁……80岁)
– 程序员生涯的职位(开发工程师,开发经理,项目经理,CTO)
• Java中要求一个变量每次只能保存一个数据,而且必须要明确保存数据的数据类型。
解释:
– 数据类型:变量变化的范围就是数据类型
– 变量名:每个变量都有一个名字,方便存取。
– 初始化值:使用变量前,需要给变量赋值。
10.2 示例一: 变量入门
需求
定义变量, 记录班级的学生人数, 并将结果打印到控制台上.
参考代码
//1. 定义一个Java类, 类名叫: VariableDemo01
public class VariableDemo01 {
//2. 定义main方法, 作为程序的主入口, 所有代码都是从这里开始执行的.
public static void main(String[] args) {
//3. 定义一个int类型的变量, 变量名叫a, 初始化值为: 121
int a = 121;
//4. 通过输出语句, 将变量a的值打印到控制台上.
System.out.println(a);
}
}
10.3 数据类型
Java是一种强类型语言, 针对于每一个数据都给出了明确的数据类型.
解释:
区分一门语言到底是强类型语言还是弱类型语言的依据是: 看这门语言对数据的数据类型划分是否精细.
如果精细, 则是强类型语言, 如果不精细, 则是弱类型语言. 10.3.1 数据类型的分类
• 基本数据类型(简称: 基本类型)
– byte, short, char, int, long, float, double, boolean
• 引用数据类型(简称: 引用类型)
– String, 数组, 类, 接口, 目前先了解, 后续会详细讲解.
10.3.1 数据类型的分类图解
10.3.2 数据类型的取值范围图解
记忆
- byte类型的取值范围是: -128 ~ 127,char类型的取值范围是: 0 ~ 65535
- 默认的整形是: int类型, 默认的浮点型(即: 小数类型)是: double类型.
- 定义long类型的数据时, 数据后边要加字母L(大小写均可), 建议加L
- 定义float类型的数据时, 数据后边要加字母F(大小写均可), 建议加F
10.4 格式
• 方式一: 声明变量并赋值.
数据类型 变量名 = 初始化值;
//示例: 声明(定义)一个int类型的变量, 变量名叫a, 初始化值为: 10
int a = 10;
• 方式二: 先声明, 后赋值.
数据类型 变量名;
变量名 = 初始化值;
//示例
//1. 声明(定义)一个int类型的变量, 变量名叫a
int a;
//2. 把数字10赋值给变量a
a = 10;
10.5 示例二: 定义变量并打印
需求 定义变量, 分别记录上述的8种基本类型数据, 并将变量值打印到控制台上.
思路分析
- 通过声明变量并赋值的方式实现.
- 通过先声明, 后赋值的方式实现.
参考代码
• 方式一: 声明变量并赋值.
//1. 定义一个类, 类名叫: VariableDemo02
public class VariableDemo02 {
//2. 定义main方法, 作为程序的主入口.
public static void main(String[] args) {
//3. 测试byte类型.
//3.1 定义一个byte类型的变量, 变量名叫b, 初始化值为10.
byte b = 10;
//3.2 将变量b的值打印到控制台上.
System.out.println(b);
//4. 测试short类型.
//4.1 定义一个short类型的变量, 变量名叫s, 初始化值为20.
short s = 20;
//4.2 将变量s的值打印到控制台上.
System.out.println(s);
//5. 测试char类型.
//5.1 定义一个char类型的变量, 变量名叫c, 初始化值为'A'.
char c = 'A';
//5.2 将变量c的值打印到控制台上.
System.out.println(c);
//6. 测试int类型
int a = 10;
System.out.println(a);
//7. 测试long类型, 数据后记得加字母L.
long lon = 100L;
System.out.println(lon);
//8. 测试float类型, 数据后边加字母F.
float f = 10.3F;
System.out.println(f);
//9. 测试double类型.
double d = 5.21;
System.out.println(d);
//10. 测试boolean类型.
boolean bb = true;
System.out.println(bb);
}
}
• 方式二: 先声明, 后赋值
//1. 定义一个类, 类名叫: VariableDemo03
public class VariableDemo03 {
//2. 定义main方法, 作为程序的主入口.
public static void main(String[] args) {
//3. 测试byte类型.
//3.1 定义一个byte类型的变量, 变量名叫b.
byte b;
//3.2 把数字10赋值给变量b.
b = 10;
//3.3 将变量b的值打印到控制台上.
System.out.println(b);
//4. 测试char类型.
//4.1 定义一个char类型的变量, 变量名叫c.
char c;
//4.2 把字符'A'赋值给变量c.
c = 'A';
//4.3 将变量c的值打印到控制台上.
System.out.println(c);
//5. 测试int类型
int a;
a = 10;
System.out.println(a);
//6. 测试double类型.
double d;
d = 5.21;
System.out.println(d);
//7. 测试boolean类型.
boolean bb;
bb = true;
System.out.println(bb);
}
}
10.6 注意事项
- 变量未赋值,不能使用.
- 变量只在它所属的范围内有效.
- 一行上可以定义多个变量,但是不建议.
10.7 示例三: 变量进阶
需求
演示上述使用变量时的三个注意事项.
参考代码
//1. 定义一个类, 类名叫: VariableDemo04
public class VariableDemo04 {
//2. 定义main方法, 作为程序的主入口.
public static void main(String[] args) {
//3. 变量未赋值,不能使用.
int a;
//a = 10;
System.out.println(a); //这样写, 代码会报错, 因为变量a没有赋值.
//4. 变量只在它所属的范围内有效.
{
//大括号包裹起来的代码叫: 代码块.
//作用: 让变量尽可能早的从内存消失, 从而节约资源, 提高效率.
double d = 5.21;
System.out.println(d);
}
//下边这行代码会报错, 出了上述的大括号, 变量d就已经从内存中消失了, 无法访问.
System.out.println(d);
//5. 一行上可以定义多个变量,但是不建议.
int e = 10, f = 20, g = 30;
System.out.println(e);
System.out.println(f);
System.out.println(g);
}
}
11. 标识符
11.1 概述
标识符就是用来给类, 接口, 方法, 变量, 包等起名字的规则.
11.2 命名规则
-
标识符只能包含52个英文字母(区分大小写)、0 ~ 9数字 、$(美元符号)和_(下划线)。
-
标识符不能以数字开头。
-
标识符不能和Java中的关键字重名。
-
最好做到见名知意.
例如: name表示姓名, age表示年龄.
11.3 命名规范
- 类, 接口的命名规范: 每个单词的首字母都大写, 其他字母全部小写.(大驼峰命名法)
例如: HelloWorld, VariableDemo. - 变量, 方法的命名规范: 从第二个单词开始, 每个单词的首字母都大写, 其他字母全部小写(小驼峰命名法).
例如: zhangSanAge, studentName - 常量(指的是: 自定义常量)的命名规范: 所有字母都大写, 单词之间用_(下划线)隔开.
例如: MAXVALUE, MINVALUE, PI
注意: 目前先了解即可, 面向对象部分详细解释. - 包的命名规范: 所有字母全部小写, 多级包之间用.(点符号)隔开, 一把是公司的域名反写.
例如: cn.itcast, com.itheima
11.4 示例
需求
定义变量分别记录张三的年龄和性别(假设: 23, 男), 然后将变量值打印到控制台上.
参考代码
//1. 定义一个类, 类名叫: VariableDemo06
public class VariableDemo06 {
//2. 定义main方法, 作为程序的主入口.
public static void main(String[] args) {
//3. 定义变量, 记录张三的年龄.
int zhangSanAge = 23;
//4. 定义变量, 记录张三的性别.
char zhangSanSex = '男';
//5. 打印年龄.
System.out.println(zhangSanAge);
//6. 打印性别.
System.out.println(zhangSanSex);
}
}
12. 数据类型转换
12.1 概述
不同类型的数据之间可能会进行运算,而这些数据取值范围不同,存储方式不同,直接进行运算可能会造成数据损失,所以需要将一种类型转换成另外一种类型再进行运算。
即: Java程序中要求参与计算的数据,必须保证数据类型的一致性,如果数据类型不一致将发生类型转换。
12.2 分类
• 自动(隐式)类型转换
• 强制(显式)类型转换
12.3 自动(隐式)类型转换
指的是小类型转大类型,会自动提升为大类型,运算结果是大类型.
大白话翻译: 将取值范围小的类型自动提升为取值范围大的类型
12.3.1 需求
- 定义两个int类型的变量a和b, 分别赋值为10, 20.
- 通过输出语句打印变量a和b的和.
- 定义int类型的变量c, 接收变量a和b的和.
- 打印变量c的值.
- 定义两个变量aa和bb, 一个是int类型的数据, 另一个是byte类型的数据.
- 定义变量cc接收 变量aa和bb的和.
- 分别设置变量cc的数据类型为byte类型和int类型, 观察结果并打印.
12.3.2 解释
当byte类型的数据和int类型的数据的数据进行计算时, 会自动将byte类型的数据提升为int类型, 然后再计算.
12.3.3 思考
- 如果是int类型的数据和double的数据相加, 结果是什么类型?
- 如果是char类型的数据和int类型的数据相加, 结果是什么类型?
- 如果是boolean类型的数据和int类型的数据相加, 结果是什么类型?
12.3.4 结论
转换规则为:
- 范围小的类型向范围大的类型提升,byte、short、char 运算时直接提升为int 。
- boolean类型的数据只有true和false这两个, 所以boolean类型的数据不参与类型转换.
即: byte、short、char–>int–>long–>float–>double
图解:
12.4 强制(显式)类型转换
指的是手动将大类型转换成小类型,运算结果是小类型.
大白话翻译: 将取值范围大的类型强制转换成取值范围小的类型.
12.4.1 需求
尝试把小数1.5赋值给int类型的变量a, 并打印结果.
12.4.2 参考代码
public class DataTypeDemo02 {
public static void main(String[] args) {
//1. 定义int类型的变量a.
int a;
//2. 尝试将1.5赋值给变量a.
//这行代码会报错, 大范围的数据赋值给小范围的数据类型, 必须通过`强制转换`格式实现.
//a = 1.5;
a = 10; //这样写没问题.
//3. 打印结果.
System.out.println(a);
}
}
12.4.3 解释
• double 类型占8个字节,int 类型占4个字节。
• 1.5 是double 类型,取值范围大于int 。
• 可以理解为double 是8升的水壶,int 是4升的水壶,不能把大水壶中的水直接放进小水壶去。
• 想要赋值成功,只有通过强制类型转换,将double 类型强制转换成int 类型才能赋值。
• 比较而言,自动转换是Java自动执行的,而强制转换需要我们自己手动执行。
12.4.4 强制转换格式
数据类型 变量名 = (数据类型)要被转换的数据值;
//示例: 将1.5赋值给int类型,代码修改为:
int a = (int)1.5;
12.4.5 思考题
下述代码会不会报错, 如果会, 哪一行会报错, 为什么? 怎么修改代码?
public class DataTypeDemo03 {
public static void main(String[] args) {
short s = 11;
s = s + 3;
System.out.println(s);
}
}
12.4.6 图解
13. ASCII码表
观察下述代码, 打印结果是多少呢?
public static void main(String[] args) {
//字符类型变量
char c = 'a';
int i = 1;
//字符类型和int类型计算
System.out.println(c+i); //输出结果是???
}
在计算机的内部都是二进制的0, 1数据,如何让计算机可以直接识别人类文字呢?
于是就产生出了编码表的概念。
• 编码表:就是将人类的文字和一个十进制数进行对应起来组成一张表格。 ‘a’ -> 97 char:0-65535
• 存储字符时:需要查找ASCII码表,找到字符对应的数字,将数字转换为二进制数存放到计算机中
• 使用字符时:将对应的二进制数转换为十进制 找到ASCII表中对应的字符 显示出来
• 将所有的英文字母,数字,符号都和十进制进行了对应,因此产生了世界上第一张编码表ASCII码表.
• ASCII(American Standard Code for Information Interchange 美国标准信息交换码), 规则如下:
字符 数值
0 48
9 57
A 65
Z 90
a 97
z 122
注意:
在char类型和int类型计算的过程中,char类型的字符先查询编码表,得到97,再和1求和,结果为98。
char类型提升为了int类型。char类型内存2个字节,int类型内存4个字节。
14. 运算符
14.1 概述
• 运算符和表达式
– 运算符:用来连接常量或者变量的符号, 就叫运算符.
– 表达式:用运算符把常量或者变量连接起来符合java语法的式子就称之为表达式。
• 不同运算符连接的表达式体现的是不同类型的表达式。
例如:
– +(加号) 是运算符,并且是算术运算符。
– a + b:是表达式,由于+是算术运算符,所以这个表达式叫算术表达式。
14.2 分类
• 算术运算符
• 赋值运算符
• 比较(关系)运算符
• 逻辑运算符
• 三元(三目)运算符
14.3 算数运算符
算术运算符指的是用来对变量或者常量进行算术操作的, 例如: 加减乘除等.
14.3.1 分类
算数运算符包括 | 作用 |
---|---|
+ | 加法运算,字符串连接运算 |
- | 减法运算 |
* | 乘法运算 |
/ | 除法运算 |
% | 取模运算,两个数字相除取余数 |
++ | 自增运算符, 相当于自身 + 1 |
- - | 自减运算符, 相当于自身 - 1 |
14.3.2 注意
• Java中, 整数相除, 结果还是整数.
• + 符号在字符串中的操作:
– + 符号在遇到字符串的时候,表示连接、拼接的含义。
– “a”+"b"的结果是“ab”,连接含义
public static void main(String[] args){
System.out.println("5+5="+5+5);//输出5+5=55
}
14.4 自增自减运算符
符号 | 作用 | 声明 |
---|---|---|
++ | 自增 | 变量的值加1 |
- - | 自减 | 变量的值减1 |
解释: ++ 运算,变量自己增长1。反之,-- 运算,变量自己减少1,用法与++ 一致, 此处以++举例.
• 独立运算:
– 变量在独立运算时,前++和后++没有区别 。
– 变量前++ :例如 ++i 。
– 变量后++ :例如 i++ 。
• 混合运算:
– 和其他变量放在一起,前++和后++就产生了不同。
– 变量前++ :变量a自己加1,将加1后的结果赋值给b,也就是说a先计算。a和b的结果都是2。
public static void main(String[] args) {
int a = 1;
int b = ++a;
System.out.println(a);//计算结果是2
System.out.println(b);//计算结果是2
}
– 变量后++ :变量a先把自己的值1,赋值给变量b,此时变量b的值就是1,变量a自己再加1。a的结果是2,b的结果是1。
public static void main(String[] args) {
int a = 1;
int b = a++;
System.out.println(a);//计算结果是2
System.out.println(b);//计算结果是1
}
14.5 赋值运算符
符号 | 作用 | 说明 |
---|---|---|
= | 赋值 | a=10,将10赋值给变量a |
+= | 加后赋值 | a+=b,将a+b的值给a |
-= | 减后赋值 | a-=b,将a-b的值给a |
*= | 乘后赋值 | a*=b,将a×b的值给a |
/= | 除后赋值 | a/=b,将a÷b的商给a |
%= | 取余后赋值 | a%=b,将a÷b的余数给a |
• 赋值运算符,就是将符号右边的值,赋给左边的变量。
public static void main(String[] args){
int i = 5;
i+=5;//计算方式 i=i+5 变量i先加5,再赋值变量i
System.out.println(i); //输出结果是10
}
• +=符号的扩展
下面的程序有问题吗?
public static void main(String[] args){
short s = 1;
s+=1;
System.out.println(s);
}
分析: s += 1 逻辑上看作是s = s + 1 计算结果被提升为int类型,再向short类型赋值时发生错误,因为不能将取值范围大的类型赋值到取值范围小的类型。但是,s=s+1进行两次运算,+= 是一个运算符,只运算一次,并带有强制转换的特点,也就是说s += 1 就是s = (short)(s + 1),因此程序没有问题编译通过,运行结果是2.