来自许老师的宝藏秘籍-2

————————图解Java程序的结构、变量和类型

一.目录

  • Java程序的结构
  • 变量和数据类型
    • 变量
    • 类型的种类和值
      • 基本类型
      • 引用类型

二.Java程序的结构

​ 学习一个新东⻄,建议先看它的结构,这样有了整体的认知之后,再去学习细节,就能更好的认识到每个细节点在整体中的位置和作用,可以更好的理解整体和局部之间的关系。比如现在学的是 Java 程序语言设计,它的表现形式就是 Java 代码。写一个能跑的 Java程序,那就需要写个 class,class 里要有个 main 方法,这样就构成了一个完整的 Java 程序。

​ 其实上篇提到的 HelloWorld 程序就是一个完整的 Java 程序,它由访问修饰符、类类型、类命名、main 方法、执行语句、花括号和注释这几个核心要素构成。image-20210923205053751

  • ​ 1.访问修饰符决定了被修饰对象的可访问范围,被修饰对象可以是类、变量和方法,访问范围的标识有 public、protected、缺省(缺省就是什么都不写,默认)和 private。
  • ​ 2.类类型表明当前类的类型,有class(普通类)、enum(枚举类)、interface(接口类)和@interface(注解类,自己写注解,不是生成注释)。类名是当前类的标识,通过它来区别其它类。命名的时候一般大写字母开头,可以是字母数字下划线的组合,不过最规范的是大写字母开头的驼峰式命名 。

​ 3.main 方法是 Java 程序必备的一个东⻄,它是 Java 程序的执行入口,声明也是固定的。执行语句就是我们要编写的程序逻辑了,每条语句都要用;(分号)结束。

​ 4.花括号{}代表了当前内容的作用域,它总是成对出现。比如HelloWorld后边的{}里的内容,就只影响到当前这个 class,main(String[] args)后边的{}里的内容,就只影响到当前这个 main方法。

​ 5.注释是对代码逻辑的解释,它不是写一个 Java 程序必备的,也不会被编译到字节码文件里。好的代码注释,是能够提升代码的可读性和可维护性的。

注释有类注释(类头部位置)、方法注释(方法上面的)、行注释和多行注释。(类/方法注释——写法类似,但是方法注释一般有方法参数,方法返回值。类没有,但是类有其用途,作者,时间,版本等描述。)

三.变量和数据类型

1.变量

​ HelloWorld 程序一般用来辅助我们判断自己环境有没有配置好,如果 HelloWorld 能运行,就说明我们 Java 环境是好的,就可以专心编程和调试了。

​ 编程躲不开的一个概念就是变量。什么是变量呢?

​ 顾名思义,就是变化的量,这个概念起源于初中数学的代数,比如方程式中的 x和 y 都是变量,x 是自变量,y 是因变量,如果基于一定的规则,只要给定一个 x 的值,就一定能得到 y 的值。

​ 这非常契合编程的场景:给一个输入,运行一下程序,就能得到一个确定的输出。至于输出什么样的值,取决于这个程序要实现的功能以及给定输入的值。再来看下刚才那个方程式 :y=x+1,如果没有限定的话,x 其实可以是整数,也可以是小数,还可以是字符串。可是如果是个字符串,就无法按数学规则进行运算了。所以即便是方程式的场景,一般也会约定变量的一个类型,比如 x 是个整数。变量和数据类型变量MATLAB复制代码 y=x+11

​ 同样的,反映到 Java 里,Java 是一种静态类型语言,这意味着每个变量和每个表达式在编译时就需要知道类型。如果我们想定义一个变量 x,就需要指定一下它的类型,以便能够通过编译以及进行后续的运算。

​ 这也是 Java 变量的一个原则:先定义后使用,定义必须指定数据类型。

​ 比如较小的整数可以用byte num;表示。变量也可以做赋值操作,比如num = 10;就把 10 这个整数赋值给了 num 这个变量。

​ 另外,变量也支持传递,比如byte num2 = num;就是把 num 的值传递给num2。

image-20210923205846044

​ 在计算机上,CPU 负责计算,内存负责存储待计算的数据。上图中的方块可以理解成一块内存,你会发现它是一块一块的。这就是内存的基本单位——byte(字节)。一个字节是 8 bit(位),也就是一个字节能容纳二进制00000000~11111111所有的数字。我们的程序也是字节维度使用内存,而内存空间是有限的,就需要有指标能衡量待存储的数据大小,以避免内存超限而引起程序崩溃。

​ 因此,程序运行的时候,需要告诉内存,要申请多大的内存空间,也就是图里面会用多少个小方块,其次是存的值是什么,也就是图里面小方块里的值。我们的变量 num 就是申请了一个字节的空间,然后存了数字 10。

​ 如果 num 要用的值超过了一个字节的限度,我们就无法使用 byte 这个数据类型了,就需要定义一种新的数据类型来支撑

2.类型的种类和值

     在 Java 的世界里,有基本类型和引用类型两种。
     相应地,有两种数据值可以存储在变量中,作为参数传递,由方法返回,并对其进行操作: 原始值和引用值。

image-20210923210122098

​ 基本数据类型在 Java 里可分为布尔类型和数字类型两大类:

image-20210923210242671

  • ​ 布尔类型表达是或者否,只有true和flase两个值,用关键字boolean表示。但 JVM 没有针对boolean的字节码指令,因此在虚拟机规范里,boolean类型在编译后会被int代替,占用4 个字节,如果是 boolean 数组,会被编译成byte数组类型,每个boolean数组元素占 1 个字节。实际情况就取决于各厂商发布的 JVM 实现了。

​ 数字类型包括了整型类型和浮点类型

  • ​ 整型类型根据取值范围的不同,细分成了byte、short、int、long和char五种,分别是 8 位、16 位、32 位、64 位有符号整数和 16 位无符号整数,分别占用一个字节、两个字节、四个字节、八个字节和两个字节的内存空间。

​ 整型类型的值是以下范围的整数:

  • byte: -128 到 127,包括边界值

  • short: -32768 到 32767,包括边界值

  • int: -2147483648 到 2147483647,包括边界值

  • long: -9223372036854775808 到 9223372036854775807,包括边界值

  • char: ‘\u0000’到‘\uffff’,包括边界值,也就是从 0 到 65535。char可表示标准的ASCII 或一个 Unicode 字符。

  • ​ ASCII 字符集占据 Unicode 字符集中的前 127 个值。

  • ​ 浮点数指小数,科学计数法表示的时候,小数点是可以“浮动”的,所以称为浮点数。

​ 浮点类型有float和double两种,其值分别为 32 位 IEEE 754 浮点数和 64 位 IEEE 754浮点数。

​ float可选地以后缀f或F结尾,double可选地以后缀d或D结尾。表格中的取值范围仅表示幅度,它可以是正也可以是负,负数场景在前面加个负号即可。

image-20210923210945129

image-20210923211037363

​ 变量定义的格式是数据类型变量名;或者数据类型变量名 = 变量值;

​ 数据类型相当于锁定了这个变量的一个数据范围,等号是赋值符号,代表把等号右边的值赋给左边的变量,使得这个变量在后边的运算中就携带了这个值的信息。Java 是强类型语言,所以如果等号右边给的值不在变量定义的数据类型范围内,就会编译报错,这也一定程度上避免了我们写错代码。

​ 上面提到的变量都是基本类型的,表达的都是非常基础的数值类的信息,那如果想表达更复杂的一些信息,那就要用到引用类型了。比如最常用的String就是引用类型,常常用它来表示字符串。它底层其实就是一个char[],也就是char类型的数组。引用类型相比于基本类型,它的核心差别在于,引用类型的变量它的内部存储的不是变量值,而是某个对象在内存中的地址。