JAVA-对象

来源:互联网 发布:软件测试的工资待遇 编辑:程序博客网 时间:2024/05/24 15:39

1、一切都是对象,用引用控制对象

    引用与对象是相互独立存在的

    例如:

        String s;  //定义一个引用s,s没有与任何对象关联

        String s = "hello"  //定义一个引用s,并与对象关联


2、对象的作用域

    {

        String s = new String("hello");

    }

    引用s在作用域终点处消失了,但是s所指向的String对象永远占据着内存空间


3、对象赋值和函数传参

    对象赋值,如:

        String s1 = "aaaaa";

        String s2 = "bbbbb";

        s1 = s2;            //s1与s2指向同一个对象"bbbbb"

    函数传参,如

        void set(String price){

            price = "100";           //传递的是String对象的引用,所以可以正确修改对象的值

        }


4、JAVA垃圾回收器

    垃圾回收器只回收由new分配的内存,当对象不是通过new(C/C++中malloc)而获得了一块"特殊"的内存区域,这种情况下,垃圾回收器(没法执行free方法)是没办法释放这块内存的。

    调用finalize方法,垃圾回收器会在下一次垃圾回收动作执行时,回收无效对象的内存。

    在C/C++中,在堆上创建对象的代价是十分昂贵的,但是在JAVA中,由于垃圾回收机制的存在,在堆上创建对象的速度竟然可以和C/C++相媲美(JAVA中所有对象,除了基本类型,都在堆上创建)。

    引用计数,由于对象之间的相互引用的问题,通常并不会在JAVA虚拟机中被使用。垃圾回收的思想:对于任何"活的对象",一定能够追溯到其存活在堆栈或者静态存储区中的引用,这个引用可能会贯穿数个对象的层次。