JAVA基本数据类型、包装类与关键字

JAVA基本数据类型、包装类与关键字

基本数据类型

Java中共有8种基本数据类型,大致分为四大类:

  • 布尔型:boolean
  • 整数型:byte、short、int、long
  • 浮点型:float、double
  • 字符型:char

这八种基本数据类型的取值范围如下:

数据类型

数据类型代表含义默认值取值包装类
boolean布尔型flase0(false) 到 1(true)Boolean
byte字节型(byte) 0-128 到 127Byte
char字符型‘\u0000’(空)‘\u0000’ 到 ‘\uFFFF’Character
short短整数型(short)0-2^15 到 2^15-1Short
int整数型0-2^31 到 2^31-1Integer
long长整数型0L-2^63 到 2^63-1Long
float单浮点型0.0f1.4e^-45 到 3.4e^+38Float
double双浮点型0.0d4.9e^-324 到 1.798e^+308Double

包装类型

从上表中我们看到每种基本数据类型都有相应的包装类,通过包装类我们可以以对象的形式操作某些功能,包装类型总体又以下几点特性:

1、功能丰富
包装类本质上是一个对象,对象就包含有属性和方法,比如 hashCode、getClass 、max、min 等。

2、可定义泛型类型参数
包装类可以定义泛型,而基础类型不行。
比如使用 Integer 定义泛型,代码:

List<Integer> list = new ArrayList<>();

3、序列化
包装类都实现了 Serializable 接口,所以包装类天然支持序列化和反序列化。

4. 类型转换
包装类提供了类型转换的方法,可以很方便的实现类型之间的转换,比如 Integer 类型转换代码:

String age = "18";
int ageInt = Integer.parseInt(age) + 2;

5. 高频区间的数据缓存

此特性为包装类很重要的用途之一,用于高频区间的数据缓存,以 Integer 为例来说,在数值区间为 -128~127 时,会直接复用已有对象,在这区间之外的数字才会在堆上产生。
为什么会产生高频区域数据缓存?我们查看源码就能发现“线索”,源码版本 JDK 8,源码如下:

public static Integer valueOf(int i) {
  if (i >= IntegerCache.low && i <= IntegerCache.high)
    return IntegerCache.cache[i + (-IntegerCache.low)];
  return new Integer(i);
}

由此可见,高频区域的数值会直接使用已有对象,非高频区域的数值会重新 new 一个新的对象。

各包装类高频区域的取值范围:

  • Boolean:使用静态 final 定义,就会返回静态值;
  • Byte:缓存区 -128~127,全部缓存;
  • Short:缓存区 -128~127,部分缓存;
  • Character:缓存区 0~127,部分缓存;
  • Long:缓存区 -128~127,部分缓存;
  • Integer:缓存区 -128~127,部分缓存。

包装类的注意事项

  • int 的默认值是 0,而 Integer 的默认值是 null。

  • 推荐所有包装类对象之间的值比较使用 equlas() 方法,因为包装类的非高频区数据会在堆上产生,而高频区又会复用已有对象,这样会导致同样的代码,因为取值的不同,而产生两种截然不同的结果。

  • Float 和 Double 不会有缓存,其他包装类都有缓存。

  • Integer 是唯一一个可以修改缓存范围的包装类,在 VM optons 加入参数:
    -XX:AutoBoxCacheMax=666
    即修改缓存最大值为 666 ,将 Integer 最大缓存修改为 666 之后,667 不会被缓存,而 -128~666 之间的数都被缓存了。

关键字

Java的关键字对Java的编译器有特殊的意义,他们用来表示一种数据类型,或者表示程序的结构等,关键字不能用作变量名、方法名、类名、包名和参数。

  • 访问修饰符关键字(3个)
关键字意思解释
public共有的可跨包,默认选择
protected受保护的当前包内可用
private私有的当前类可用
  • 修饰方法、类、属性和变量(共9个)
关键字意思解释
static静态的属性和方法都可以用Static修饰,直接使用类名.属性和方法名。只有内部类可以使用static关键字修饰,调用直接使用类名.内部类类名进行调用。
final最终的不可被改变的方法和类都可以用final修饰。final修饰的类不能被继续。final修饰的方法不能被子类重写。
super调用父类的方法public void paint( Graphics g){spuer.paint(g);···}
this当前类的父类的对象调用当前类中的方法(表示调用这个方法的对象)
native本地用来声明一个方法是由与计算机相关的语言(如C/C++/FORTRAN语言)实现的
synchronized线程,同步表明一段代码需要同步执行
transient短暂声明不用序列化的成员域
volatile易失表明两个或者多个变量必须同步地发生变化 ,用于表示可以被多个线程异步修改的成员变量

静态块优先于其他方法/类的执行

  • 定义类、接口、抽象类和实现接口、继承类的关键字、实例化对象(6个)
关键字意思解释
classpublic class A(){}
interface接口有方法体但是没有实现
abstract声明抽象表明类或者成员方法具有抽象属性,可以有也可以没有已经实现的方法体
implements实现表明一个类实现了给定的接口
extends继承表明一个类型是另一个类型的子类型,这里常见的类型有类和接口
new创建新对象用来创建新实例对象
  • 包的关键字
关键字意思
import引入包的关键字
package定义包的关键字
  • 数据类型的关键字(12个)
    除了文章开篇介绍的8种数据类型的关键字以外,还有以下几种关键字
关键字意思
void无返回值
null空值
true
false
  • 条件循环(共12个)
ifelse
whilefor
switchcase
defaultdo
breakcontinue
returninstance

insatnce是一个二元操作比较符,返回boolean类型数据。

  • 错误处理
关键字意思解释
try捕获异常public class A(){}
catch处理异常try 关键字用于包含可能引发异常的语句块。
finally有没有异常都要执行
throw抛出一个异常对象throw 语句将 java.lang.Throwable 作为参数。Throwable 在调用栈中向上传播,直到被适当的 catch 块捕获。
throws声明一个异常可能被抛出把异常交给上级管理,自己不处理异常。
  • 保留关键字
关键字意思解释
const常量,常数用于修改字段或局部变量的声明。它指定字段或局部变量的值是常数,不能被修改。
goto转到指定跳转到标签,找到标签后,程序将处理从下一行开始的命令。

总结以下,Java种一共有51+2个保留字=53个关键字,记住这些关键字有助于我们理解程序,快速开发。

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值