简介:本人一开始是学嵌入式C语言方便的,4个月前转来学WEB方面的东西。学过c/c++, python, JAVA。已经学了JAVA一部分的相关知识了,也写过一些小小的程序,但是后来写大一点的项目的时候发现自己的代码太乱,思路不够清晰,代码也不够简洁易懂,所以翻开《JAVA编程思想》深入学习JAVA编程。文章不会把一些基础的东西讲得太详细,不是JAVA教程。
关于对象
- JAVA在所有平台的基本数据类型所占用的存储空间都是一样的(例如:c/c++在不同的平台x86/x64的int类型占用的字节数不一样。),所以JAVA的可移植性很强。
基本类型 | 大小 | 最小值 | 最大值 | 包装类型 |
---|---|---|---|---|
boolean | - | - | - | Boolean |
char | 16-bit | Unicode 0 | Unicode 2^16-1 | character |
byte | 8 bits | -128 | +127 | Byte |
short | 16 bits | -2^15 | +2^15-1 | Short |
int | 32 bits | -2^31 | +2^31-1 | Integer |
long | 64 bits | -2^63 | +2^63 -1 | Long |
float | 32 bits | IEEE754 | IEEE754 | Float |
double | 64 bits | IEEE754 | IEEE754 | Double |
void | - | - | - | Void |
所有的数据类型都是有正负号的,不用去寻找无符号的数值类型(我在嵌入式c语言中经常用到无符号的数据类型,32位的ARM CPU性能有限。)
String 不是基本的数据类型,char才是。
基本数据类型在创建以后如果没有初始化,JAVA会自动给一个默认的数值。
基本类型 | 默认值 |
---|---|
boolean | false |
char | '\uoooo'(null) |
byte | (byte) 0 |
short | (short ) 0 |
int | 0 |
long | 0L |
float | 0.0f |
double | 0.0d |
- BigInteger跟BigDecimal 可以支持任何精度的计算,用空间换取准确率。
- 创建一个数组对象的时候,实际上是创建了一个引用数组,并且每个引用都会自动被初始化为一个特定的值, 该值拥有一个自己的关键字null。编译器看到null,就知道这个引用没用指向任何对象。
当程序试图使用一个null的引用的时候,运行时会自动报错,以免反生更大的问题。在C/C++中,可以访问到数组外的内存空间,引发更大的问题。
关于null, String a = '';跟String a = null;是不同的,引用一个null的对象会报错。 - 作用域由花括号{}的位置决定,在作用域定义的变量只可用于作用域结束之前
{
int x = 12;
{
int q = 96;
}
//q is "out of scope"
}
以下代码在java中是不合法的,在C/C++是合法的
{
int x = 10;
{
int x = 100;
}
}
- 在JAVA中,不需要销毁对象。JAVA对象的不具备和基本类型一样的生命周期。当用new创建一个JAVA对象的时候,它可以存活与作用域之外。
{
String s = new String("a String ");
}
引用s的作用域终点已经消失了,但是s指向的String对象依然继续占据内存空间。(很多人觉得这个JAVA的好处,写程序不用花时间关注对象的销毁问题,但是我觉得这样对计算机的性能的发挥不能达到极致,幸好JAVA只是用来搞WEB比较多,游戏方面的确C++更强。)
因为对象占用的内存空间不用马上被销毁,JAVA有个垃圾回收器监视所有用new创建的对象,自动把那些不会再被应用的对象销毁。
- static关键字可用在数据,方法,对象。当声明一个事物是static时候,就意味着,这个域或方法不会与包含它的类 的任何对象关联在一起。
static int i = 0;
static int f = {}
static class c = {}
关于static后面再详细认真分析了,第二章就到这吧。