很多人可能会问,明明我是开发Android的,为毛要学Java的知识。
也有很多初学的朋友说,我java可不可以不学,直接学Android?
在此我说下我的理解:
Android目前主流的开发语言是java和kotlin,作为开发语言本身,如果你掌握得不够深,也许你依然能够依葫芦画瓢写出程序,但是深入到性能调优、内存泄露时,排查一些由于多线程或引用替换引发的Bug时,你会觉得力不从心,因为你对语言还只是停留在用的层面,而没到驾驭的程度。所以建议一定要学好java的基本功。如果你熟练掌握了,你会发现再去学习另一门语言,很快就能融入进去。
java书籍推荐如下:Thinking in java
Android学习书籍推荐如下: Android第一行代码 Android开发艺术探索
Java的存储
言归正传,今天我们来学习java的存储。程序在运行时,对象是存储在哪里的,数据又是怎么存放的?这块也是面试官特别喜欢问的技术点:
-
寄存器
最快的存储区域。java中代码不可控制,C/C++可以代码申请该区域
-
栈
在函数中定义的一些基本类型的变量数据和对象的引用变量都在函数的栈内存中分配。
-
堆
堆内存用来存放由new创建的对象和数组。 在堆中分配的内存,由Java虚拟机的自动垃圾回收器来管理。
-
方法区
被Java虚拟机加载的类信息、常量、静态变量。
Java的数据类型分为两种:基本数据类型和引用类型。
基本数据类型
public class Test {
static boolean bool;
static byte by; // 8 bit
static char ch; // 16 bit
static double d; // 64 bit
static float f; // 32 bit
static int i; // 32 bit
static long l; // 64 bit
static short sh; //16 bit
public static void main(String[] args) {
System.out.println("Bool :" + bool);
System.out.println("Byte :" + by);
System.out.println("Character:" + ch);
System.out.println("Double :" + d);
System.out.println("Float :" + f);
System.out.println("Integer :" + i);
System.out.println("Long :" + l);
System.out.println("Short :" + sh);
}
}
打印结果如下:
Bool :false
Byte :0
Character:
Double :0.0
Float :0.0
Integer :0
Long :0
Short :0
注释中标明了每种数据类型所占的位数。
PS: 这里再简单科普下字符,字节,位 ,B,KB,M这些的关系
Bit 意为“位”或“比特”,是计算机运算的基础,属于二进制的范畴;
Byte意为“字节”,是计算机文件大小的基本计算单位;
1个字节(Byte) = 8 位(Bit)
1个字符 = 2 个字节
1KB = 1024 Byte(字节) = 1024*8 Bit( 位)
1MB = 1024KB
这样大家应该理解我们平时文件大小含义了。