Android知识体系梳理(2)-Java基础篇-基本类型、包装类型、关键字、final、static用法

一、开篇

开篇写这一篇的时候,我就感觉到任重而道远。java基础,这短短几个字,要怎么样才能用一篇博文梳理明白?

但还好,既然是知识体系,那么就是讲重点,讲概念。

二、基本类型与包装类型

讲java,那必须从基本类型开始讲起,这是起点。java共有8种基本类型:

  1. byte 1字节 8位
  2. char 2字节 16位
  3. short 2字节 16位
  4. int 4字节 32位
  5. float 4字节 32位
  6. long 8字节 64位
  7. double 8字节 64位
  8. boolean 特殊 1位

特殊的地方:boolean 只有两个值:true、false,可以使用 1 bit 来存储,但是具体大小没有明确规定。JVM 会在编译时期将 boolean 类型的数据转换为 int,使用 1 来表示 true,0 表示 false。JVM 支持 boolean 数组,但是是通过读写 byte 数组来实现的。

基本类型都有对应的包装类型,基本类型与其对应的包装类型之间的赋值使用自动装箱与拆箱完成。

Integer x = 2;     // 装箱 调用了 Integer.valueOf(2)
int y = x;         // 拆箱 调用了 X.intValue()

其实呢,java中还有一种特殊类型void,它也有自己的包装类型,大家可能不会注意它。就用一个简单的表格来强化记忆吧。

基本类型bytecharshortintfloatlongdoublebooleanvoid
二进制占位81616323264641-
包装类ByteCharacterShortIntegerFloatLongDoubleBooleanVoid

提供一个简单的对比,面试官可能会问到噢。

基本类型:值直接存储在栈中,可以直接使用,不需要new关键字,赋值是值的传递。初始值比如int是0。基本类型不能放在集合中直接使用。

包装类型:对象存储在堆中,通过对象的引用来调用,需要使用new来创建一个在堆中的对象,赋值也是通过传递引用。对象的初始值是null。所以集合中使用基本类型的包装类。

装箱过程中使用的是valueOf方法,这个方法会优先去从缓存池中取对象(比如Integer里面有个静态内部类IntegerCache,里面有个常量cache[],也就是Integer对象池,在对象池中Integer已经默认创建了数值【-128-127】的Integer缓存数据,这种以空间换时间的方式,我们称之为缓存池技术)。假如缓存池中有目标对象,则直接返回该对象的引用,如果没有则创建一个新对象并返回新对象的引用。备注:Integer、Short、Byte、Character、Long、Boolean这几个类的valueOf方法的实现是类似的,都会从缓存池中取,但Double、Float每次都会生成新的对象。

三、Java关键字

我们知道了数据类型,那么接下来,我们聊聊Java的关键字。

Java关键字是对Java编译器有特殊含义的字符串,是编译器和程序员的一个约定,程序员利用关键字来告诉编译器其声明的变量类型、类、方法特性等信息。Java语言共定义了如下所示的关键字。(引自百度百科)

关键字含义
abstract表明类或者成员方法具有抽象属性
assert断言,用来进行程序调试
boolean基本数据类型之一,声明布尔类型的关键字
break提前跳出一个块
byte基本数据类型之一,字节类型
case用在switch语句之中,表示其中的一个分支
catch用在异常处理中,用来捕捉异常
char基本数据类型之一,字符类型
class声明一个类
const保留关键字,没有具体含义
continue回到一个块的开始处
default默认,例如,用在switch语句中,表明一个默认的分支。Java8 中也作用于声明接口函数的默认实现
do用在do-while循环结构中
double基本数据类型之一,双精度浮点数类型
else用在条件语句中,表明当条件不成立时的分支
enum枚举
extends表明一个类型是另一个类型的子类型。对于类,可以是另一个类或者抽象类;对于接口,可以是另一个接口
final用来说明最终属性,表明一个类不能派生出子类,或者成员方法不能被覆盖,或者成员域的值不能被改变,用来定义常量
finally用于处理异常情况,用来声明一个基本肯定会被执行到的语句块
float基本数据类型之一,单精度浮点数类型
for一种循环结构的引导词
goto保留关键字,没有具体含义
if条件语句的引导词
implements表明一个类实现了给定的接口
import表明要访问指定的类或包
instanceof用来测试一个对象是否是指定类型的实例对象
int基本数据类型之一,整数类型
interface接口
long基本数据类型之一,长整数类型
native用来声明一个方法是由与计算机相关的语言(如C/C++/FORTRAN语言)实现的
new用来创建新实例对象
package
private一种访问控制方式:私用模式
protected一种访问控制方式:保护模式
public一种访问控制方式:共用模式
return从成员方法中返回数据
short基本数据类型之一,短整数类型
static表明具有静态属性
strictfp用来声明FP_strict(单精度或双精度浮点数)表达式遵循IEEE 754算术规范
super表明当前对象的父类型的引用或者父类型的构造方法
switch分支语句结构的引导词
synchronized表明一段代码需要同步执行
this指向当前实例对象的引用
throw抛出一个异常
throws声明在当前定义的成员方法中所有需要抛出的异常
transient声明不用序列化的成员域
try尝试一个可能抛出异常的程序块
void声明当前成员方法没有返回值
volatile表明两个或者多个变量必须同步地发生变化
while用在循环结构中

static的几种用法:

1、静态变量:又称为类变量,也就是说这个变量属于类的,类所有的实例都共享静态变量,可以直接通过类名来访问它。静态变量在内存中只存在一份。相对应的是实例变量:每创建一个实例就会产生一个实例变量,它与该实例同生共死。

2、修饰静态方法,静态方法是在类加载的时候就存在了,它不依赖于任何实例。所以静态方法必须有实现,不能是抽象方法。静态方法只能访问所属类的静态字段和静态方法,方法中不能有 this 和 super 关键字,因为这两个关键字关联了对象实例。

3、静态语句块,是在类初始化的时候会固定运行一次。

4、非静态内部类依赖于外部类的实例,也就是说需要先创建外部类实例,才能用这个实例去创建非静态内部类。而静态内部类不需要。

5、静态导包:import static xxx.xxx.xxxx,在使用静态变量和方法时不用再指明 ClassName,从而简化代码,但可读性大大降低。

聊聊使用static时的几个初始化顺序:静态变量和静态语句块优先于实例变量和普通语句块,静态变量和静态语句块的初始化顺序取决于它们在代码中的顺序。存在继承的情况下,初始化顺序为:父类(静态变量、静态语句块)、子类(静态变量、静态语句块)、父类(实例变量、普通语句块)、父类(构造函数)、子类(实例变量、普通语句块)、子类(构造函数)

final的几种用法:

1.定义到基本类型,表示值不能改变

2.定义到引用类型,只是引用地址不能修改了,但是引用对象的字段值可以修改。

3.定义到一个类,表示这个类不再能被继承

4.定义到方法,则表示这个方法不能被覆写

5.定义给某个方法的参数,表示在这个方法域中,此参数不能被改变。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值