一、开篇 开篇写这一篇的时候,我就感觉到任重而道远。Java基础,这短短几个字,要怎么样才能用一篇博文梳理明白? 但还好,既然是知识体系,那么就是讲重点,讲概念。 二、基本类型
开篇写这一篇的时候,我就感觉到任重而道远。Java基础,这短短几个字,要怎么样才能用一篇博文梳理明白?
但还好,既然是知识体系,那么就是讲重点,讲概念。
二、基本类型与包装类型讲java,那必须从基本类型开始讲起,这是起点。java共有8种基本类型:
byte 1字节 8位 char 2字节 16位 short 2字节 16位 int 4字节 32位 float 4字节 32位 long 8字节 64位 double 8字节 64位 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,它也有自己的包装类型,大家可能不会注意它。就用一个简单的表格来强化记忆吧。
基本类型 | byte | char | short | int | float | long | double | boolean | void |
二进制占位 | 8 | 16 | 16 | 32 | 32 | 64 | 64 | 1 | - |
包装类 | Byte | Character | Short | Integer | Float | Long | Double | Boolean | Void |
提供一个简单的对比,面试官可能会问到噢。
基本类型:值直接存储在栈中,可以直接使用,不需要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,从而简化代码,但可读性大大降低。
6、初始化顺序:静态变量和静态语句块优先于实例变量和普通语句块,静态变量和静态语句块的初始化顺序取决于它们在代码中的顺序。存在继承的情况下,初始化顺序为:父类(静态变量、静态语句块)、子类(静态变量、静态语句块)、父类(实例变量、普通语句块)、父类(构造函数)、子类(实例变量、普通语句块)、子类(构造函数)
--结束END--
本文标题: Android知识体系梳理(2)-Java基础篇
本文链接: https://lsjlt.com/news/29562.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-01-21
2023-10-28
2023-10-28
2023-10-27
2023-10-27
2023-10-27
2023-10-27
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0