Java 常量与变量

标识符

  • 标识符可以由字母、数字、下划线_和美元符$组成,且不能以数字开头
  • 标识符完全区分大小写,即void是关键字,Void是合法的标识符
  • 标识符不能是 Java 关键字和保留字
  • 标识符命名最好能见名知意

关键字

img

gotoconst在 Java 中被定义为保留字,暂未使用

变量

  • 变量是程序中数据的零时存放场所
  • 变量的三元素:变量类型、变量名和变量值

变量的命名规则

  • 满足标识符命名规则
  • 符合驼峰法命名规范
  • 尽量简短、见名知意

类的命名规则

  • 满足 Pascal 命名规范

数据类型

数据类型介绍

数据类型

  1. 整型的应用场景

    • 整型主要用来存储整数,如:1,2,3等等。
    • 按照存储数据的范围不同分为四种,分别是:byte、short、int、long,数据表示范围依次增大。
    • byte类型主要对二进制数据进行存储,在文件输入输出流部分将会使用,用于二进制数据的传输。
    • short类型在有的需求中会用到,比如:对于登录账号的状态表示,一般用0表示正常,1表示冻结,2表示已删除。这里的数值比较固定,值也比较小,可以使用short类型表示。
  2. 浮点型的应用场景

    • 浮点类型表示小数,包括float和double两种类型,具体使用哪种数据类型,也是可以按照表示范围进行选择。但double类型使用相对较多。
    • 浮点型因为其表示方式的原因,会产生精度丢失的问题,所以会结合BigDecimal类进行使用

基本数据类型

数据类型说明字节数范围
byte字节型1-128~127
short短整型2-32768~32767
int整型4-2^31~2^31-1
long长整型8-2^63~2^63
float单精度浮点型4-3.40E+38~3.40E+38
double双精度浮点型8-1.79E+308~1.79E+308
char字符型20~65535
boolean布尔型1true/false

进制表示

  • 八进制:以 0 开头,包括 0-7的数字
  • 十六进制:以 0x或 0X 开头,包括数字 0-9,以及字母a-f 或 A-F

字面值

  1. 整形字面值
    • Java 中有三种表示整数的方式:十进制、八进制、十六进制
  2. 浮点型字面值
    • 浮点值字面值默认表示double 类型,也可以在值后面加 d 或者 D
    • 如需表示float 类型,需要在字面值后面加 f 或 F
  3. 字符型字面值
    • 字符型字面值用单引号内的单个字符表示
  4. 布尔字面值
    • 布尔值只能定义为 true false
  5. 字符串字面值
    • 字符串不属于基本数据类型
    • 双引号引起来的 0 个或多个字符

变量声明

  • 格式:变量类型 变量名;
  • int n;声明整形变量 n
  • long count;声明长整型变量 count

赋值

  • 使用=运算符进行赋值
  • =右边的值赋值给左边的变量
  • int n;n=3;定义 int 型变量 n,将 3 赋值给变量 n

变量定义

  • 可以在变量声明时给变量赋值:int n = 3;

类型转换

  • 类型转换分为自动类型转换和强制类型转换:char ch = (char)65536;
  • 自动类型转换也叫做隐式类型转换

Java 基本数据类型转换

常量

  • final int n = 5;

ASCII 码

  • ASCII(American Standard Code for Information Interchange,美国标准信息交换代码)
  • 基于拉丁字母的一套电脑编码系统
  • 主要用于显示现代英语和其他西欧语言
  • 使用 7 位或 8 位二进制组合来表示128 种或 256 种可能的字符

ASCII 码对照表

BinDecHex缩写/字符解释
00000000000NUL(null)空字符
00000001101SOH(start of headling)标题开始
00000010202STX (start of text)正文开始
00000011303ETX (end of text)正文结束
00000100404EOT (end of transmission)传输结束
00000101505ENQ (enquiry)请求
00000110606ACK (acknowledge)收到通知
00000111707BEL (bell)响铃
00001000808BS (backspace)退格
00001001909HT (horizontal tab)水平制表符
00001010100ALF (NL line feed, new line)换行键
00001011110BVT (vertical tab)垂直制表符
00001100120CFF (NP form feed, new page)换页键
00001101130DCR (carriage return)回车键
00001110140ESO (shift out)不用切换
00001111150FSI (shift in)启用切换
000100001610DLE (data link escape)数据链路转义
000100011711DC1 (device control 1)设备控制1
000100101812DC2 (device control 2)设备控制2
000100111913DC3 (device control 3)设备控制3
000101002014DC4 (device control 4)设备控制4
000101012115NAK (negative acknowledge)拒绝接收
000101102216SYN (synchronous idle)同步空闲
000101112317ETB (end of trans. block)传输块结束
000110002418CAN (cancel)取消
000110012519EM (end of medium)介质中断
00011010261ASUB (substitute)替补
00011011271BESC (escape)溢出
00011100281CFS (file separator)文件分割符
00011101291DGS (group separator)分组符
00011110301ERS (record separator)记录分离符
00011111311FUS (unit separator)单元分隔符
001000003220(space)空格
001000013321!
001000103422"
001000113523#
001001003624$
001001013725%
001001103826&
001001113927'
001010004028(
001010014129)
00101010422A*
00101011432B+
00101100442C,
00101101452D-
00101110462E.
00101111472F/
0011000048300
0011000149311
0011001050322
0011001151333
0011010052344
0011010153355
0011011054366
0011011155377
0011100056388
0011100157399
00111010583A:
00111011593B;
00111100603C<
00111101613D=
00111110623E>
00111111633F?
010000006440@
010000016541A
010000106642B
010000116743C
010001006844D
010001016945E
010001107046F
010001117147G
010010007248H
010010017349I
01001010744AJ
01001011754BK
01001100764CL
01001101774DM
01001110784EN
01001111794FO
010100008050P
010100018151Q
010100108252R
010100118353S
010101008454T
010101018555U
010101108656V
010101118757W
010110008858X
010110018959Y
01011010905AZ
01011011915B[
01011100925C\
01011101935D]
01011110945E^
01011111955F_
011000009660`
011000019761a
011000109862b
011000119963c
0110010010064d
0110010110165e
0110011010266f
0110011110367g
0110100010468h
0110100110569i
011010101066Aj
011010111076Bk
011011001086Cl
011011011096Dm
011011101106En
011011111116Fo
0111000011270p
0111000111371q
0111001011472r
0111001111573s
0111010011674t
0111010111775u
0111011011876v
0111011111977w
0111100012078x
0111100112179y
011110101227Az
011110111237B{
011111001247C|
011111011257D}
011111101267E~
011111111277FDEL (delete)删除

Unicode 编码

  • Unicode 编码的目标是支持全世界的字符集
  • 在值前面加\uchar u = '\u005d'

转移字符

转移字符描述ASCII 值
\a响铃007
\b退格008
\f换页012
\n换行010
\r回车013
\t水平制表009
\v垂直制表011
\\表示一个反斜杠字符\092
\'代表一个单引号字符'039
\"代表一个双引号字符"034
\?代表一个问号?063
\0空字符000
\ddd一到三位八进制数表示的任意字符
\xhh十六进制所表示的任意字符

面试题

数字类型

image-20201123220811706

IEEE754

Float 精度问题

public class FloatDemo {
    public static void main(String[] args) {
        float f1 = 423432423F;
        float f2 = f1 + 1;
        System.out.println("f1 == f2 :" + (f1 == f2));
    }
}

// f1 == f2 :true

生成随机数

import java.util.Random;

public class RandomDemo {
    public static void main(String[] args) {
      	// 生成 300 - 100 的随机数
        int max = 100;
        int min = 30;
        // [30,100)
        int random = new Random().nextInt(max + 1 - min) + min;
        System.out.println(random);

        int random2 = (int) (Math.random() * 70 + 30);
        System.out.println(random2);
    }
}

求 1-1000 的质数

public class PrimeNumber {
    public static void main(String[] args) {
        // 打印出 1 - 1000 之间的质数
        int round = 1000;
        for (int i = 2; i <= round; i++) {
            boolean prime = true;
            for (int j = 2; j < i; j++) {
                if (i % j == 0) {
                    prime = false;
                    break;
                }
            }
            if (prime) {
                System.out.println(i + " 是质数!");
            }
        }
    }
}