Java基础教程-01-Java简介与变量介绍

Java基础教程-01-Java简介与

1. 计算机基本概念

1.1 计算机组成

计算机由计算机硬件和计算机软件组成.

  1. 计算机硬件: 你的眼睛能看的见, 你的手能摸得着的东西.
    1)中央处理器(CPU)
    • 由运算器和控制器组成.
    2)存储器
    • 内存: 内存条(代数, 睿频).
    • 外存: 硬盘(SSD: 固态硬盘, HSD: 混合盘, HDD: 机械硬盘), U盘.
    3)输入设备
    • 键盘, 鼠标
    4)输出设备
    • 显示器.
  2. 计算机软件: 能在计算机上运行的程序.
    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 分类
  1. 第一代高级语言:
    例如: C语言, 以面向过程为编程思想, 唯一一门可以直接操作计算机硬件的高级语言
  2. 第二代高级语言:
    例如: C++, 以面向对象为编程思想, 没有默认的垃圾回收机制.
  3. 第三代高级语言: 目前市场上应用最多的语言
    例如: Java, C#, 以面向对象为编程思想, 而且有默认的垃圾回收机制(GC).
  4. 第四代高级语言: 未来的发展趋势, 现在还处于发展初期
    简单理解: 以面向问题编程思想为主, 也就是说: 告诉计算机做什么, 而不是怎么做.
    例如: 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 步骤

  1. 新建一个系统变量: JAVA_HOME, 它的值就是你安装的JDK的路径(注意: 不要带bin这一级)

在这里插入图片描述
注意: 变量值不要带bin目录.

  1. 在path中配置你刚才设置好的JAVA_HOME环境变量.
    格式: %JAVA_HOME%\bin
    解释: %JAVAHOME%表示引入该系统变量的值, 即: C:\Software\OfficeSoftware\jdk1.8.0112
  2. 测试
    – 方式一: 在DOS窗口中输入"javac 或者 java", 能看到对应的一坨指令即可.
    – 方式二: 在DOS窗口中输入"java -version", 可以看到当前配置的JDK的版本.

5. HelloWorld案例(掌握)

5.1 程序的开发步骤

Java程序的开发步骤一共3步, 分别是:
- 编写
- 编译
- 执行
图解:
在这里插入图片描述

5.2 编写源代码

  1. 在D:\BaseClass\EmploymentClass0520\JavaSE\Day01\code文件夹中创建HelloWorld.java文件.
  2. 用记事本打开HelloWorld.java文件.
  3. 在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(漏洞)
• 解决方案
多看, 多思考, 多尝试, 多总结

遇到的问题

  1. 非法字符.
    注意: 我们使用的符号全部都是英文状态下的符号
  2. 注意字母的大小写.
    注意: Java是严格区分大小写的. 也就是说: A和a不是一回事儿.
  3. 文件后缀名的问题.
    千万不要出现 HelloWorld.java.txt 这种情况
  4. 在编译或者运行时, 指令及文件名不要写错了.
    //编译的格式
    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 安装
  1. 双击安装包ideaIU-2018.3.4.exe进行安装, 选择next进行下一步.

在这里插入图片描述

  1. 修改安装路径, 然后选择next.

在这里插入图片描述

  1. 选择64bit(64位), 然后选择next.
    在这里插入图片描述
  2. 直接选择next, 然后开始安装即可(这个过程需要点时间, 请耐心等待).

在这里插入图片描述
5. 安装成功.
在这里插入图片描述

6.3.4 首次启动
  1. 不导入任何配置, 选择Do not import settings, 然后选择OK.
    在这里插入图片描述
  2. 设置用户界面主题, 可以根据自己的喜好进行设置, 然后选择Next: Default plugins.

在这里插入图片描述3. 这个界面是告诉我们, 当前的IDEA可以开发哪些程序, 默认这些模块都是选中的, 如果明确知道不需要使用某些模块, 可以通过Disable All禁用掉此模块. 这里我们不需要禁用, 直接选择Next: Featured plugins即可.
在这里插入图片描述
4. 这个界面是JetBrains公司提供给我们的可选择性安装的5个小插件, 我们可以根据需求进行选择, 这里建议安装最后一个插件IDE Features Trainer, 它可以帮助我们快速使用IDEA. 然后选择Start using IntelliJ IDEA即可.
在这里插入图片描述

  1. 因为IDEA的旗舰版是收费的, 这里我们选择Evaluate for free(免费试用30天).

在这里插入图片描述

6.4 创建项目和模块

  1. IDEA版项目组成简介.
    简单理解: 一个Java程序 = 一个IDEA中创建的项目.

在这里插入图片描述
详细图解
在这里插入图片描述
2. 选择Create New Project, 新建项目.
在这里插入图片描述
3. 新建一个空项目.
在这里插入图片描述
4. 指定项目名和项目的保存位置.
在这里插入图片描述5. 新建模块.
在这里插入图片描述

  1. 第一次使用IDEA, 需要关联JDK.

在这里插入图片描述
7. 创建Java模块.
在这里插入图片描述

  1. 指定模块名和路径, 然后选择Finish.

在这里插入图片描述

  1. 第一次创建模块时, 如果模块没有自动关联JDK, 则需要我们手动设置下关联.

在这里插入图片描述
10. 设好以后, 格式如下, 至此, 模块创建完毕.
在这里插入图片描述

  1. 第一次进入到项目界面, 会弹出如下对话框.

在这里插入图片描述

6.5 HelloWorld案例(IDEA版)

  1. 在src源代码包下创建自定义包 com.itheima.demo01
    在这里插入图片描述

在这里插入图片描述
2. 在com.itheima.demo01包下创建HelloWorld类.

在这里插入图片描述
在这里插入图片描述

  1. 编写源代码, 然后在代码编辑区右键, 选择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. 整数常量.
    例如: 1, 2, 3, 11, 22, 521
  2. 小数常量.
    例如: 5.21, 13.14
  3. 字符常量.
    解释: 字符的意思是说只能有一个值, 而且要用单引号括起来
    例如: ‘A’, ‘B’, ‘c’, ‘10’(这样写会报错, 因为10是由1和0两个值组成的)
  4. 字符串常量.
    解释: 字符串常量值都要用双引号括起来
    例如: “abc”, “传智播客”, “黑马程序员”, “大数据”
  5. 布尔常量
    解释: 比较特殊, 值只有两个
    • true, 相当于正确
    • false, 相当于不正确
  6. 空常量
    解释: 比较特殊, 值只有一个: 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 数据类型的取值范围图解

在这里插入图片描述
记忆

  1. byte类型的取值范围是: -128 ~ 127,char类型的取值范围是: 0 ~ 65535
  2. 默认的整形是: int类型, 默认的浮点型(即: 小数类型)是: double类型.
  3. 定义long类型的数据时, 数据后边要加字母L(大小写均可), 建议加L
  4. 定义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. 通过声明变量并赋值的方式实现.
  2. 通过先声明, 后赋值的方式实现.

参考代码
• 方式一: 声明变量并赋值.

 	//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 注意事项

  1. 变量未赋值,不能使用.
  2. 变量只在它所属的范围内有效.
  3. 一行上可以定义多个变量,但是不建议.

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 命名规则

  1. 标识符只能包含52个英文字母(区分大小写)、0 ~ 9数字 、$(美元符号)和_(下划线)。

  2. 标识符不能以数字开头。

  3. 标识符不能和Java中的关键字重名。

  4. 最好做到见名知意.

    例如: name表示姓名, age表示年龄.

11.3 命名规范

  1. 类, 接口的命名规范: 每个单词的首字母都大写, 其他字母全部小写.(大驼峰命名法)
    例如: HelloWorld, VariableDemo.
  2. 变量, 方法的命名规范: 从第二个单词开始, 每个单词的首字母都大写, 其他字母全部小写(小驼峰命名法).
    例如: zhangSanAge, studentName
  3. 常量(指的是: 自定义常量)的命名规范: 所有字母都大写, 单词之间用_(下划线)隔开.
    例如: MAXVALUE, MINVALUE, PI
    注意: 目前先了解即可, 面向对象部分详细解释.
  4. 包的命名规范: 所有字母全部小写, 多级包之间用.(点符号)隔开, 一把是公司的域名反写.
    例如: 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 需求
  1. 定义两个int类型的变量a和b, 分别赋值为10, 20.
  2. 通过输出语句打印变量a和b的和.
  3. 定义int类型的变量c, 接收变量a和b的和.
  4. 打印变量c的值.
  5. 定义两个变量aa和bb, 一个是int类型的数据, 另一个是byte类型的数据.
  6. 定义变量cc接收 变量aa和bb的和.
  7. 分别设置变量cc的数据类型为byte类型和int类型, 观察结果并打印.
12.3.2 解释

当byte类型的数据和int类型的数据的数据进行计算时, 会自动将byte类型的数据提升为int类型, 然后再计算.
在这里插入图片描述

12.3.3 思考
  1. 如果是int类型的数据和double的数据相加, 结果是什么类型?
  2. 如果是char类型的数据和int类型的数据相加, 结果是什么类型?
  3. 如果是boolean类型的数据和int类型的数据相加, 结果是什么类型?
12.3.4 结论

转换规则为:

  1. 范围小的类型向范围大的类型提升,byte、short、char 运算时直接提升为int 。
  2. 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.

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值