Java编程思想--第2章“一切都是对象”

一、引用操纵对象

拥有引用,并不一定需要一个对象与之关联:

创建引用String s; 当你并未给s赋值的时候(即未初始化),此时发送信息给s,会返回运行时错误。

我们可以通过函数调用来理解:

    public List> combinationSum(int[] nums, int target) {
        List> list = new ArrayList<>();
        Arrays.sort(nums);
        backtrack(list, new ArrayList<>(), nums, target, 0);
        return list;
    }
    
    private void backtrack(List> list, List tmpList, int[] nums, int remain, int start) {
        ...

这个代码中,作为backtrack函数的形参,就是一种创建引用,真正的创建对象是在combinationSum函数中的backtrack函数调用。

值得一提的是:String s = "abcd"; Java语言的特性:字符串可以用带引号的文本初始化。


二、创建对象

我们关心对象放在哪儿?内存如何分配?对于我们理解算法,理解程序大有裨益。


1.寄存器:最快存储区,CPU内部,数量少,不能直接控制。

2.栈:位于通用RAM中,最大特点就是必须明确程序在栈上的项目的生命周期,以分配和释放内存,所以限制了灵活性,java对象不存储于其中。

3.堆:存放所有Java对象,执行new语句后动态创建对象,好处是灵活,坏处是于栈相比,进行存储分配和清理会耗费较多时间。

4.常量存储:通常直接存放在程序代码内部。



特例:基本类型

明确,不用new在堆上创建基本类型,而是采用和c,c++相同的方法,基本类型的变量直接存储值,放在栈上,目的是提高效率。


本类型如下:

boolean, char, byte, short, int, long, float, double, void


Java的基本类型特点如下:

1)Java确定每种基本类型所占存储空间的大小,例如:int 32bits, long 64bits... 它们不像其他大多数语言那样随着机器硬件架构的

变化而变化,所以Java程序更具有可移植性。

2)所有数值类型都有正负号,不用去寻找无符号的数值类型

3)提供包装器类,可以在堆中创建一个非基本对象,来表示对应基本类型。比如:char c = 'x',包装器类写法:Character c = new Character('x').   在Java SE5中提供了自动包装功能: Character c = 'x'.


Java数组特点:

1)确保数组初始化【在c中,不少人吃过亏 ,滑稽】

2)确保不能范围之外被访问

你可能感兴趣的:(Java)