Java之变量与基本数据类型

91 阅读9分钟

Java语言概述

Java是一个通用术语,用于表示Java软件及其组件,包括Java 运行时环境 (JRE)、Java虚拟机 (JVM)以及插件。Java是SUN(Stanford University Network,斯坦福大学网络公司 )在1995年推出的一门高级编程语言。

首先看下Java技术体系平台的介绍

  1. Java SE(Java Standard Edition)标准版
    • 支持面向桌面级应用(如Windows下的应用程序)的Java平台,即定位个人计算机的应用开发
    • 以前称为J2SE
  2. Java EE(Java Enterprise Edition)企业版
    • 为开发企业环境下的应用程序提供的一套解决方案,即定位在服务器端的Web应用开发。JavaEE是JavaSE的扩展,增加了用于服务器开发的类库
    • 以前称为J2EE
  3. Java ME(Java Micro Edition)小型版
    • 支持Java程序运行在移动终端(手机、机顶盒)上的平台,即定位在消费性电子产品的应用开发。JavaME是JavaSE的内伸,精简了JavaSE 的核心类库,同时也提供自己的扩展类。
    • 以前称为J2ME

:Android开发不等同于Java ME的开发。

那么什么是JDK、JRE

  • JDK(Java Development Kit)是Java程序开发工具包,包含JRE和开发人员使用的工具
  • JRE(Java Runtime Environment)是Java程序运行时环境,包含JVM和运行时所需要的核心类库

两者关系如下图:

总结:JDK=JRE+开发工具集(例如Javac编译工具等);JRE=JVM+Java SE标准类库。

再来简单看下JVM: JVM(Java Virtual Machine,Java虚拟机)是一个虚拟的计算机,是Java程序的运行环境。JVM具有指令集并使用不同的存储区域,负责执行指令,管理数据、内存、寄存器。 JVM实现了程序的跨平台性和自动内存管理(内存分配、内存回收)。

关于JDK的版本选择:

  • 自Java 8版本发布以来,其后的每次更新,都会有小伙伴高呼:Java8 YYDS!
  • 论坛的声音:你发任你发,我用Java 8!

JDK的下载:

变量与基本数据类型

这里先来介绍下关键字和标识符。

关键字

定义:关键字是被Java语言赋予了特殊含义,用做专门用途的字符串或单词。例如class、public、static、void等。

特点:全部关键字都是小写字母。

:关键字一共50个,其中const和goto是保留字。true、false、null不在其中,虽然看起来像关键字,其实是字面量,表示特殊的布尔值和空值。

标识符

定义:标识符是Java中变量、方法、类等要素命名时使用的字符序列。即凡是自己可以起名字的地方都叫标识符。

标识符的命名规则(必须遵守):

  • 由26个英文字母大小写,0-9,_$组成
  • 数字不可以开头
  • 不可以使用关键字和保留字,但能包含关键字和保留字
  • Java严格区分大小写,长度无限制
  • 标识符不能包含空格

标识符的命名规则(建议遵守):

  • 包名:多单词组成时所有字母都小写,例如java.lang
  • 类名、接口名:多单词组成时,所有单词的首字母大写,例如HelloWorld
  • 变量名、方法名:多单词组成时,第一个单词首字母小写,第二个单词开始每个单词首字母大写,例如getAge
  • 常量名:所有字母都大写,多单词时每个单词用下划线连接,例如MAX_VALUE

:在起名字时,为了提高阅读性,要尽量有意义。

变量

Java中的注释类型:

//单行注释
/*
多行注释
*/
/**
@author 文档注释
@version
*/

变量是程序中不可或缺的组成单位,是基本的存储单元。

  1. 初识变量。
    • 变量是内存中的一个存储区域,包含数据类型、变量名和存储的值
    • 必须先声明再使用,作用域为其定义所在的一对{}内,变量只在作用域内才有效,同一作用域内不能定义重名的变量
  2. 变量的数据类型。
    • 基本数据类型:整数类型、浮点数类型、字符类型、布尔类型
    • 引用数据类型:数组、类、接口、枚举、注解、记录
  3. 变量的使用。
    • 变量的声明:
//格式:数据类型 变量名;
//例如存储一个整数类型的年龄
int age; 
//注:变量的数据类型可以是基本数据类型,也可以是引用数据类型
  • 变量的赋值:
//格式:变量名 = 值;
//可以用其他变量或表达式给变量赋值
int x = 1;
int y = 2;
int z = 2 * x + y;

基本数据类型

整数类型

整数类型有:byte、short、int、long。

整数类型各字段长度: :Java的整型常量默认为int类型,变量通常声明为int类型,除非不足以表示较大的数时才用long,定义long类型的变量赋值时需要以l或L作为后缀。

计算机存储单位:

位(bit):是数据存储的最小单位,二进制数系统中,每个0或1就是一个位,叫做bit(比特)。

字节(byte):是计算机用于计量存储容量的基本单位,一个字节等于8bit。

转换关系:

  • 8 bit = 1 Byte
  • 1024 Byte = 1 KB
  • 1024 KB = 1 MB
  • 1024 MB = 1 GB
  • 1024 GB = 1 TB

浮点类型

浮点类型有:float、double。

浮点类型各字段长度: 浮点型常量有两种表示形式:

  • 十进制数形式:5.12
  • 科学计数法形式:5.12e2

float是单精度,尾数可以精确到7位有效数字,很多情况下精度很难满足需求。

double是双精度,精度是float的两倍,通常采用此类型。

定义float类型的变量赋值时需要以F或f作为后缀。

Java的浮点型常量默认为double类型。

:并不是所有的小数都可以精确的用二进制浮点数表示,二进制浮点数不能精确的表示0.1、0.01等这样10的负次幂。浮点类型float、double的数据不适合金融计算领域,需要使用BigDecimal类来表示精确保留精度。

字符类型

char型数据占2个字节,Java中所有字符都用Unicode编码,故一个字符可以存储一个字母、一个汉字或其他书面语的一个字符。

字符型变量有三种表示形式:

  • 使用单引号表示,例如char c = 'a'
  • 直接使用Unicode值表示,例如\uxxxx
  • 使用转义字符\,来将其后的字符转变为特殊字符型常量,例如char c = '\n'表示换行符

:char类型是可以进行运算的,因为都有对应的Unicode值,可以看做一个数值。

布尔类型

布尔类型用来判断逻辑条件,一般用于流程控制语句中。

boolean类型数据只有两个值,true和false,不能用0或非0的整数来代替。

:建议不要这样写:if(isFlag==true),很容易漏写一个=,老手都这样写:if(isFlag)

自动类型转换

规则:将取值范围或容量小的类型自动提升为取值范围或容量大的类型。

基本数据类型的转换规则如图: 当把存储范围小的值赋值给了存储范围大的变量时。

int i = 'A'; //char自动升级为int,其实就是把字符的编码值赋值给i变量了
double d = 10; //int自动升级为double
long num = 1234567; //右边的整数常量值如果在int范围呢,编译和运行都可以通过,这里涉及到数据类型转换
//byte bigB = 130; //错误,右边的整数常量值超过byte范围
long bigNum = 12345678912L; //右边的整数常量值如果超过int范围,必须加L,显式表示long类型。否则编译不通过

当存储范围小的数据类型与存储范围大的数据类型变量一起混合运算时,会按照其中最大的类型运算。

int i = 1;
byte b = 1;
double d = 1.0;
double sum = i + b + d; //混合运算,升级为double

当byte,short,char数据类型的变量进行算术运算时,按照int类型处理。

byte b1 = 1;
byte b2 = 2;
byte b3 = b1 + b2; //编译报错,b1 + b2自动升级为int
char c1 = '0';
char c2 = 'A';
int i = c1 + c2; //至少需要使用int类型来接收
System.out.println(c1 + c2); //113 

强制类型转换

规则:将取值范围或容量大的类型强制转换成取值范围或容量小的类型。

转换格式:数据类型1 变量名 = (数据类型1)被强转数据的值;

当把存储范围大的值强制转换为存储范围小的变量时,可能会损失精度或溢出。

int i = (int)3.14; //损失精度
double d = 1.2;
int num = (int)d; //损失精度
int i = 200;
byte b = (byte)i; //溢出

当某个值想要提升数据类型时,也可以使用强制类型转换。这种情况的强制类型转换是没有风险的,通常省略。

int i = 1;
int j = 2;
double bigger = (double)(i/j);

声明long类型变量时,可以出现省略后缀的情况。float则不同。

long l1 = 123L;
long l2 = 123; //此时可以看做是int类型的123自动类型提升为long类型
//long l3 = 123123123123; //报错,因为123123123123超出了int的范围
long l4 = 123123123123L;
//float f1 = 12.3; //报错,因为12.3看做是double,不能自动转换为float类型
float f2 = 12.3F;
float f3 = (float)12.3;

基本数据类型与String的运算

字符串string不是基本数据类型,属于引用数据类型,声明方式与基本数据类型类似。

运算规则: 任意八种基本数据类型的数据与String类型只能进行连接“+”运算,且结果一定也是String类型。

System.out.println("" + 1 + 2); //12
int num = 10;
boolean b1 = true;
String s1 = "abc";
String s2 = s1 + num + b1;
System.out.println(s2); //abc10true
//String s3 = num + b1 + s1; //编译不通过,因为int类型不能与boolean运算
String s4 = num + (b1 + s1); //编译通过

String类型不能通过强制类型()转换,转为其他的类型。

String str = "123";
int num = (int)str; //错误的
int num = Integer.parseInt(str); //正确的,借助包装类的方法才能转

最后,今天的内容就到这里,这是Java系列的第一篇,Java教程持续更新中,喜欢的话点个关注吧,下篇见!