Java 数据类型 & 变量与常量 & 注释
一、数据类型
1、数据类型分类
Java 的数据类型分为两大类:
- 基本数据类型:整数、浮点数、字符型、布尔型
- 引用数据类型(对象类型):类、数组,字符串、接口等。
2、基本数据类型
四类八种基本数据类型:
数据类型 | 关键字 | 内存占用 | 取值范围 |
字节型 | byte | 1个字节 | -128~127 |
短整形 | short | 2个字节 | -32768~32767 |
整形 | int(默认) | 4个字节 | -2的31次方~2的31次方-1 |
长整型 | long | 8个字节 | -2的63次方~2的63次方-1 |
单精度浮点型 | float | 4个字节 | 1.4013E-45~3.4028E+38 |
双精度浮点型 | double(默认) | 8个字节 | 4.9E-324~1.7977E+308 |
字符型 | char | 2个字节 | 0~65535 |
布尔类型 | boolean | 1个字节 | true、false |
(1)整数类型
整数用来存储整数数值,可以是正整数,负数,有3种表示形式:
0B101 // 二进制
-88 // 十进制
0123 //八进制必须以 0 开头
0x25 // 十六进制必须以 0X 或 0x 开头
int类型为默认的整数类型,对于long 类型的值,在定义是在数字后加 L 或 l,表示该数值为长整型。
(2)浮点数类型
浮点数默认的是double类型,如果想要为float类型数据赋值,、应在后面加 F 或 f 。
(3)字符类型(Java中使用Unicode编码来表示)
1、char c1 = ‘A’;
2、char c2 = 65;
3、char c3 = ‘\u0041’
4、转义字符 “\” 是一种特殊的字符变量,不同的字符代表不同的意义。
'\n' 表示换行(line)
'\t' 表示制表符(Tab)
'\\' 表示斜杠
'\"' 表示双引号
'\'' 表示单引号
'\r' 表示回车键
'\b' 表示删除键 BackSpace
(4)布尔类型
只有 true 、false 两个字值。
注:在java语言中,boolean类型不能参与运算
Tips:
(1)Java中的默认类型:整形类型是 int、浮点类型是 double。
(2)字符串不是基本类型,而是引用类型。
(3)浮点型可能只是一个近似值,并非精确的值。
(4)数据范围与字节数不一定相关,例如float数据范围比long更加广泛,但是float是4字节,long是8字节。
(5)浮点数当中默认类型是double。如果一定要使用float类型,需要加上一个后缀F。如果是整数,默认为int类型,如果一定要使用long类型,需要加上一个后缀L。推荐使用大写字母后缀。
二、变量与常量
1、关键字(keywords):
是指在程序中,java 已经定义好的单词,具有特殊含义。
Java关键字表:
int | public | this | finally | boolean | abstract |
continue | float | long | short | throw | throws |
if | goto | default | byte | do | case |
strictfp | package | super | void | try | switch |
else | catch | implements | private | final | class |
extends | volatile | while | synchronized | instanceof | char |
protected | import | transient | default | double | interface |
return | break | for | static | new |
2、标识符
是指在程序中,用来标识类名、变量名、方法名、数组名、文件名的有效字符序列。
- 命名规则:(硬性要求)
- 标识符可以包含 英文26个字母(区分大小写)、0-9数字、$()美元符号 和 _(下划线) 组成。
- 标识符不能以数字开头。
- 标识符不能是关键字(包含保留字)和特殊值。
- 严格区分大小写,长度没有限制,但不能使用空格。
- 命名规范:(软性建议)
- 类名规范:首字母大写,后面的每个单词首字母大写(大驼峰式)。
- 方法名规范:首字母小写,后面每个单词首字母大写(小驼峰式)。
- 变量名规范:全部小写。
- 常量名规范:全部大写,每个单词之间用下划线(_)分割。
- 包名规范:全部小写。
- 见名知意,望文生义的原则
- 命名规则:(硬性要求)
3、变量
(1)在程序执行过程中,值可以被改变的量称为变量。
作用:用来存储值(数据)。在 Java 中,变量本质上,就是代表一块内存区域,变量中的数据是存储在 JVM 内存中。
(2)变量的分类:
类型 | 含义 | 数据举例 |
整数常量 | 所有的整数 | 0,1,578,-6 |
小数常量 | 所有的小数 | 3.14,-0.1 |
字符常量 | 单引号引起来,只能写一个字符,必须有内容 | 'a',' ','中' |
字符串常量 | 双引号引起来,可以写多个字符,也可以不写 | "a","hello","中国" |
布尔常量 | 只有两个值 | true、false |
空常量 | 只有一个值 | null |
(3)变量的定义(声明变量)
变量定义的格式包括三个要素:数据类型、变量名、数据值。
语法:
(1)数据类型 变量名 = 数据值; // 一步到位的格式,声明并赋值
(2)数据类型 变量名; // 声明一个变量,
变量名 = 数据值; // 赋值,将右边的数据值,赋值交给左边的变量
(3)数据类型 变量名称1,变量名称2,变量名称3 = 值,变量名称4,变量名称5 =值2; //多个相同类型的变量声明并赋值
Tips:
(1)如果创建多个变量,那么变量之间的名称不可以重复。(在同一作用域内)
(2)对于 float 和 long 类型来说,字母后缀 F 和 L 不要丢掉。
(3)java 语言是强类型的编程语言,要求数据类型必须和值的类型相同
(4)如果使用byte或者short类型的变量,那么右侧的数据值不能超过左侧类型的范围。
(5)没有进行赋值的变量,不能直接使用;一定要赋值之后,才能使用。
(6)变量使用不能超过作用域的范围。
【作用域】:从定义变量的一行开始,一直到直接所属的大括号结束为止。
(7)可以通过一个语句来创建多个变量,但是一般情况不推荐这么写。
// 同时创建了三个全都是int类型的变量
int a, b, c;
// 各自分别赋值
a = 10;
b = 20;
c = 30;
System.out.println(a); //
System.out.println(b); //
System.out.println(c); // 30 // 同时创建三个int变量,并且同时各自赋值
int x = 100, y = 200, z = 300;
System.out.println(x); //
System.out.println(y); //
System.out.println(z); //
(4)变量的有效范围
变量被定义出来后只是暂存在内存中,等到程序执行到某一个点,该变量会被释放掉,也就是变量的生命周期。变量的有效方位能够访问该变量的区域,若超出该区域,则在编译的时候出现错误。根据“有效范围”可以分为以下两类:
a. 成员变量
在类中定义的变量称为成员变量,成员变量在整个类中都有效。成员变量又可分为两种:静态变量和实例变量。
Demo:
class var{
int x = 45;
static int y = 80;
}
x 为实例变量,y 为静态变量(也称类变量)。如果在成员变量的类型前面加上关键字 static 这样的成员变量就称为 静态变量。
静态变量的有效范围可以跨类,甚至可在整个应用程序之内。对于静态变量,除了能在定义它的类中存取,还能直接以 “类名.静态变量” 的方式在其他类内使用。
b. 局部变量
在类的方法体重定义的变量,方法内部定义,在 { } 之间的代码中声明的变量称为局部变量。局部变量只在当前代码块有效。
在类的方法中声明的变量,包括方法的参数,都属于局部变量。局部变量只在当前定义的方法内有效。局部变量的生命周期取决于方法,当方法被调用时,为变量分配空间,方法调用结束后,则释放局部变量的内存空间,局部变量销毁。
Tips:局部变量与成员变量同名时,成员变量将被隐藏。即这个成员变量在此方法中暂时失效。
4、常量
在程序执行过程中,值不变的量,即固定不变的量称为常量。也被称为 "final变量"。
常量在整个程序中只能被赋值一次,在为所有的对象共享值时,常量非常有用。
语法:
final double PI = 3.14159; // 声明 double 型的常量PI 并赋值
三、数据类型转换
类型转换是从一种类型更改为另一种类型的过程。如果从低精度数据类型向高精度转换,则永远不会溢出,总是成功。相反,从高精度向低精度转换,可能出现信息丢失,有可能失败。
1、自动转换(隐式转换)
将 取值范围小的类型 自动提升为 取值范围大的类型。
Demo:
public static void main(String[] args) {
int i =1;
byte b = 2;
// byte x = b + 1; 报错
// int类型和 byte 类型运算,结果是 int类型
int j = b + i;
System.out.println(j);
}
转换原理图解:
byte 类型内存占有1个字节,在和 int 类型运算会提升为 int 类型,自动补充 3个字节,因此计算后的结果是 int 类型。
转换规则:范围小的类型向范围大的类型提升,byte、short、char 进行算术运算时直接提升为 int 类型。
byte --> short、char --> int --> long --> float --> double
总结:
a、特点:代码不需要进行特殊处理,自动完成。
b、规则:数据范围从小到大
2、强制转换(显式转换)
强制类型转换:
数据类型 变量名 = (数据类型) 被转数据值;
Demo:
public static void main(String[] args){
// short 类型变量,内存中2个字节
short s = 1;
/*
出现编译失败
s 和 1做运算的时候,1是int类型,s 会被提升为 int 类型
s+1 后的结果是 int 类型,将结果在赋值 short 类型时发生错误
short 内存2个字节,int 类型4个字节
必须将 int 强制转成 short 才能完成赋值
*/
s = s + 1; // 编译失败
s= (short) (s+1); // 编译成功
}
转换原理图解:
注意:
- 浮点转成整数,直接取消小数点,可能造成数据损失精度。
- int 强制转成 short 去掉2个字节(溢出),可能造成数据丢失。
总结:
a、特点:代码需要进行特殊的格式处理,不能自动完成。
b、格式:范围小的类型 范围小的变量名 = (范围小的类型) 原本范围大的数据;
注意事项:
a、 强制类型转换一般不推荐使用,因为有可能发生精度损失、数据溢出。
b、 byte/short/char 这三种类型都可以发生数学运算,例如加法“+”.
c、 byte/short/char 这三种类型在运算的时候,都会被首先提升成为int类型,然后再计算。
d、 boolean 类型不能发生数据类型转换
3、ASCII 编码表
字符与数字的对照关系表(编码表):当有 字符 类型的变量参与运算的时候,会把字符转变为相应的数字,然后再进行计算。
将所有的英文字母,数字,符号都和十进制进行了对应,因此产生了世界上第一张编码表ASCII( American Standard Code for Information Interchange 美国标准信息交换码),里面只有字母数字和常用符号,并没有汉字。
Unicode码表:万国码。也是数字和符号的对照关系,开头0-127部分和ASCII完全一样,但是从128开始包含有更多字符。
Tips:
在 char 类型和 int 类型计算的过程中,char 类型的字符先查询编码表,得到97,再和1求和,结果为98。char类型提升 为了int类型。char类型内存2个字节,int类型内存4个字节。
四、注释(comment)
注释:就是对代码的解释和说明。其目的是让人们能够更好轻松地了解代码。为代码添加注释,是十分必要的,并不影响程序的编译和运行。
分类:
- 单行注释:以 // 开头 换行结束
- 多行注释:以 /* 开头,以 */ 结束
- 文档注释:以 /** 开头,以 */ 结束,(文档注释只能注释类和函数,编译文档注释源文件 javadoc -d -doc 源文件名称)
- 单行注释:以 // 开头 换行结束
五、扩展知识(编译器的两点优化)
1、自动类型转换问题
对于byte/short/char三种类型来说,如果右侧赋值的数值没有超过范围,那么javac编译器将会自动隐含地为我们补上一个(byte)(short)(char)。
(1)如果没有超过左侧的范围,编译器补上强转。
(2)如果右侧超过了左侧范围,那么直接编译器报错。
Demo:
// 右侧确实是一个int数字,但是没有超过左侧的范围,就是正确的。
// int --> byte,不是自动类型转换
byte num1 = /*(byte)*/ 30; // 右侧没有超过左侧的范围
System.out.println(num1); // 30 // byte num2 = 128; // 右侧超过了左侧的范围 // int --> char,没有超过范围
// 编译器将会自动补上一个隐含的(char)
char zifu = /*(char)*/ 65;
System.out.println(zifu); // A
2、编译器的常量优化
在给变量进行赋值的时候,如果右侧的表达式当中全都是常量,没有任何变量,那么编译器javac将会直接将若干个常量表达式计算得到结果。
short result = 5 + 8; // 等号右边全都是常量,没有任何变量参与运算编译之后,得到的 .class字节码文件当中相当于【直接就是】:short result = 13; (右侧的常量结果数值,没有超过左侧范围,所以正确。)
注意:一旦表达式当中有变量参与,那么就不能进行这种优化了。
Demo:
public static void main(String[] args) {
short num1 = 10; // 正确写法,右侧没有超过左侧的范围, short a = 5;
short b = 8;
// short + short --> int + int --> int
// short result = a + b; // 错误写法!左侧需要是int类型,含有两个变量 // 右侧不用变量,而是采用常量,而且只有两个常量,没有其他
short result = 5 + 8;
System.out.println(result); short result2 = 5 + a + 8; // 18 错误,里面有变量
}
Java 数据类型 & 变量与常量 & 注释的更多相关文章
- JAVA数据类型,变量,转换,常量,运算符
java数据类型: Java基本类型共有八种,基本类型可以分为三类: 1.字符类型char,用单引号赋值 2.布尔类型boolean 3.数值类型byte.short.int.long.float.d ...
- JAVA基础——变量和常量
JAVA的变量和常量知识总结 一.认识java标识符 标识符就是用于给 Java 程序中变量.类.方法等命名的符号. 使用标识符时,需要遵守几条规则: 1. 标识符可以由字母.数字.下划线(_).美 ...
- Java学习笔记三:Java的变量、常量、变量的类型及使用规则
Java的变量.常量.变量的类型及使用规则 每一种语言都有一些具有特殊用途的词,Java也不例外,它们被称为关键字.关键字对 Java 的编译器有着特殊的意义. 一:Java中的关键字: 注:Java ...
- Java 之变量和常量(2)
Java中的关键字: Java 语言中有一些具有特殊用途的词被称为关键字.关键字对 Java 的编译器有着特殊的意义,在程序中应用时一定要慎重哦!! Java 中常用关键字: 问:这么多,记不住啊.. ...
- [Java] 数据类型, 变量, 运算符, 表达式
title: [Java] 变量与表达式 你已经学会输出 Hello world 了, 那么现在, 我们来学习关于变量的知识 基本数据类型 在 Java 中, 有 8 种基本的数据类型: 名称 描述 ...
- Java(变量和常量)
变量 可以变化的量.可以通过变量来操控内存中的数据:变量可以指代的是内存中的一块空间,而这块空间的位置是确定的但里边要放什么东西还不确定. Java是强类型语言,每个变量都要声明其类型. Java变量 ...
- Java 静态变量,常量和方法
static 关键字 例如:在球类中使用PI这个常量,可能除了本类需要这个常量之外,在另外一个圆类中也需要使用这个常量.这时没有必要 在两个类中同时创建PI这个常量,因为这样系统会将这两个不在同一个类 ...
- C语言基础学习基本数据类型-变量和常量
变量和常量 什么是变量和常量?有些数据在程序运行前就预先设定,并在运行过程中不发生变化,称之为常量:有些数据在程序运行中可能发生变化或被赋值,称之为变量. 使用变量前必须先声明一个变量.变量定义的语法 ...
- Java的变量与常量
常量: 在程序运行期间,固定不变得量. 常量的分类: 字符串常量:凡是用双引号引起来的部分,叫做字符串常量.例如:“abc”.“Hello”.“123”. 整数常量:直接写上的数字,没有小数点.例如: ...
随机推荐
- CentOS7 下使用 Firewall防火墙系统封禁允许IP和端口的访问 端口转发 IP转发方法
CENTOS7的防火墙系统默认已经从iptable改成了firewall,使用方法也有所不同,下面是详细介绍 一.管理端口 列出 dmz 级别的被允许的进入端口 # firewall-cmd --zo ...
- GLIBC中的库函数fflush究竟做了什么?
目录 目录 1 1. 库函数fflush原型 1 2. FILE结构体 1 3. fflush函数实现 2 4. fclose函数实现 4 附1:强弱函数名 5 附2:属性__visibility__ ...
- Linux系统中python默认版本为python2.7,修改为python3 项目上传码云
# 查询系统本系统中安装的python版本 ls -l /usr/bin/python* 1.在虚拟机上新建虚拟环境 # 系统中python默认版本为python2.,可以将其修改为python3 # ...
- 【CF848B】 Rooter's Song
题目链接 \(solution\) 类似于蚂蚁那道题的做法 弹性碰撞相当于交换位置并继续前进,考虑一个起点\((x,0)\),时间为\(t\)出发的\(dancer\),相当于从\((x,-t)\)的 ...
- tensorflow数据加载、模型训练及预测
数据集 DNN 依赖于大量的数据.可以收集或生成数据,也可以使用可用的标准数据集.TensorFlow 支持三种主要的读取数据的方法,可以在不同的数据集中使用:本教程中用来训练建立模型的一些数据集介绍 ...
- Maven 基本概念——根目录、项目创建、坐标
1. MavenProjectRoot(项目根目录) |----src | |----main | | |----java ——存放项目的.java文件 ...
- 最新版IntelliJ IDEA2019破解方法、补丁、注册码(激活码),永久激活
最新版IntelliJ IDEA2019破解方法.补丁.注册码(激活码),永久激活 目录 1.打赏记录 2.适用版本(适用于Windows及MacOS系统) 3.下载补丁 4.JetbrainsIde ...
- netcore容器与配置文件操作
using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Configuration.Json; using Micro ...
- 【操作系统之九】Linux常用命令之netstat
一.概念netstat命令用于显示与IP.TCP.UDP和ICMP协议相关的统计数据,一般用于检验本机各端口的网络连接情况.netstat是在内核中访问网络及相关信息的程序,它能提供TCP连接,TCP ...
- spring boot2X整合Consul一使用RestTemplate实现服务调用
Consul可以用于实现分布式系统的服务发现与配置 服务调用有两种方式: A.使用RestTemplate 进行服务调用 负载均衡——通过Ribbon注解RestTemplate B.使用Feign ...