返回顶部
首页 > 资讯 > 移动开发 >Android知识体系梳理(2)-Java基础篇
  • 600
分享到

Android知识体系梳理(2)-Java基础篇

java基础JAVAAndroid 2022-06-06 13:06:29 600人浏览 八月长安
摘要

一、开篇 开篇写这一篇的时候,我就感觉到任重而道远。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、初始化顺序:静态变量和静态语句块优先于实例变量和普通语句块,静态变量和静态语句块的初始化顺序取决于它们在代码中的顺序。存在继承的情况下,初始化顺序为:父类(静态变量、静态语句块)、子类(静态变量、静态语句块)、父类(实例变量、普通语句块)、父类(构造函数)、子类(实例变量、普通语句块)、子类(构造函数)


作者:Liu_dede


--结束END--

本文标题: Android知识体系梳理(2)-Java基础篇

本文链接: https://lsjlt.com/news/29562.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作