在警报声中学习

变量及使用

标识符

表示各种各样的名字,也包括变量名,总的来说是一个表示名字的字符串

命名规范

开头必须是:

大小写字母
下划线
美元符号$
Unicode 字符集中编号为0xC0以及它后面的所有符号

  • (包括世界上绝大多数国家的语言字符,当然包括中文)
  • 0xC0是一个十六进制数

组成必须是:

0-9数字
大小写字母
下划线
美元符号$Unicode 字符集中编号为0xC0以及它后面的所有符号

  • (包括世界上绝大多数国家的语言字符,当然包括中文)

注意事项:

不能以数字开头
不能是Java中的保留字和关键字
严格区分大小写

约定俗成的规范

总体原则:不要使用拼音和汉字(专用另说)

命名方式

  • 大驼峰

    类名、接口名、注解名

  • 小驼峰

    变量、方法

包名

包名禁止大写

一级包名尽量只有一个单词,多个单词时分包, 域名反转

包名为单数名词

注意:
下划线加数字可以控制排序

除开以上:

标识符的命名尽量不要使用下划线和$

常量

在程序运行过程中,值可能发生改变的量

字面值常量

在Java中,所有直接写值的量都是字面值常量

整数
小数
字符
字符串
空常量---引用数据类型变量的独有取值,只有null一个

自定义常量

变量

在程序运行过程中,值一定不会发生改变的量

变量使用前需要声明和初始化

声明

声明变量的目的是告诉编译器,变量的数据类型和变量的名字

  • 语法:

    数据类型 变量名;

  • 局部变量

    仅仅声明的局部变量没有任何意义,相当于代码中根本没这个东西
    编译器在编译代码时,会自动忽略掉代码中的未初始化局部变量

    main方法内部的String也要初始化后才能使用

初始化

局部变量初始化 = 赋初始值的过程

注意事项

Java当中的整数字面值常量,默认当作int处理
Java当中的小数字面值常量,默认当作double处理

虽然Java语法允许一行定义多个相同数据类型的变量,但规范的Java代码禁止这样做

浮点数

精度问题

/* 十进制在表示小数时,经常会出现无限循环的情况,比如10/3,就是一个无限循环小数
 * 到了二进制当中,二进制小数也可能出现无限循环的情况
 * 典型的就是二进制小数0.1
 * 十进制的0.1如何转换成二进制的0.1呢?
 * 十进制正小数(0.开头)转换成二进制,先用小数部分乘以2,取结果的整数部分(必然是1或者0),
 * 然后小数部分继续乘2
 * 直到小数部分为0,或者已经达到了最大的位数
 * 最终的结果(0.开头)正序排列
 * 0.1 --> 二进制0.1
 * 0.1 * 2 = 0.4 ---> 0
 * 0.4 * 2 = 0.8 ---> 0
 * 0.8 * 2 = 1.6 ---> 1
 * 0.6 * 2 = 1.2 ---> 1
 * 0.2 * 2 = 0.4 ---> 0
 * ....
 * 二进制0.1本身就是一个无限循环小数,再加上浮点数本身的有效位数就有限
 * 所以浮点数的0.1用double表示和float表示,完全不是同一个数
 *
 * 以有效位数来说
 * float的有效位数,大概是7~8位
 * double的有效位数,大概16~17位
 */

数据类型转换

Java中变量的数据类型由某一种转换为另一种

自动类型转换

基本数据类型的数据类型转换必须在byte、short、int、long、float、double这些数值类型和char类型之间进行

boolean类型不参与基本数据类型的数据类型转换。(布尔类型不能做任何类型转换)

不需要写额外代码,完成类型转换, 是编译器主动帮助完成类型转换

转换条件

把小取值范围的数据类型 --> 大取值范围的数据类型

注意:

  1. 浮点数的所有类型取值范围都远大于任何整型以及char类型
  2. 基本数据类型的自动类型转换,全程无需写额外代码,那么它是绝对安全的吗?会不会带来数据失真呢?
    有可能
    当int --> float时就会
    long --> float
    long --> double 也会
  3. char类型作为数值类型,取值范围是[0,65535], 所以char类型的自动类型转换需要从int类型开始

强制类型转换

概念:
指的是编译器不会自主完成类型转换,需要程序员写额外代码完成类型转换

语法:
强转后的数据类型 变量名 = (强转后的数据类型)被强转的变量;

转换的条件:
把大取值范围的数据类型 --> 小取值范围的数据类型

问题:
出现数据丢失失真的情况

表达式类型提升

概念:
如果表达式当中存在多种数据类型变量参与运算,由于表达式的运算结果是唯一的,那么结果变量的数据类型将会提升到"最大取值范围"的那个

注意:

1. byte,short,char类型之间只要参与运算,那么结果一定是int
2. 只要表达式中存在任一变量,那么表达式的最终结果数据类型就遵循"表达式的类型提升"

posted @ 2023-02-27 20:48  颠三倒四不积极  阅读(58)  评论(0)    收藏  举报