要想学好Java编程,构造器、方法重载、this关键字、垃圾回收机制,这4关一定要过! (2)

你看,沉默王二没出版书籍,可以是一名写作爱好者;沉默王三虽然出版了书籍《Web全栈开发进阶之路》,但仍然和王二是好兄弟,并没有看不起王二(从来没说过:“王二,你个渣渣,连本书都没有出版,好意思说自己是写作爱好者?”)。是不是很和谐?

Java该如何区分重载方法(毕竟参数名相同)呢?上例中,你也看到了,参数个数的不同就可以区分;另外,参数的类型和顺序(不建议使用,因为这样做会让代码难以维护,见下例)也可以用来作为区分的条件。

程序清单2-2:难以维护的方法重载(靠顺序,别这样!)

class Writer {
    private String name;
    private int age;

    public Writer(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public Writer(int age, String name) {
        this.age = age;
        this.name = name;
    }
}
03、返回当前对象引用的this关键字

在很长一段时间里,我对this关键字都避而不见,因为我搞不懂它到底在干嘛,我所使用它的场合仅限于程序清单2-1(this.name指的是类的成员变量,而name指的是当前方法的参数)。直到我遇见了jQuery(一个快速、简洁的JavaScript框架)的链式调用。

程序清单3-1:jQuery的链式调用

$("#canvas").append("我是一块抹布")
            .show();

方法后面还能再紧跟一个方法,就好像一个胯下运球再接一个后仰跳投,超自然超连贯超燃的一连串动作,令人心情感到愉悦。这背后是什么原理呢?

程序清单3-2:jQuery的链式调用的背后

 var MyJQ = function(){
 }
 MyJQ.prototype = {
      append : function(content){
         console.log("添加内容");
         return this;
      },
     show : function(){
         console.log("将元素显示");
         return this;
      }
 };
 var myjq = new MyJQ();
 myjq.append("我是一块抹布").show();

看完程序清单3-2之后,你就会恍然大悟,原来方法的内部返回了一个this,而这个this就是当前对象的引用;也就是说,myjq.append("我是一块抹布").show();就相当于:myjq.append("我是一块抹布");myjq.show();。

理解了jQuery的链式调用,我们来模拟一下Java当中的链式调用(写作者做完运动后去睡觉)。

程序清单3-3:Java的链式调用

class Writer {
    public Writer sleep() {
        System.out.println("睡一觉");
        return this;
    }

    public Writer ml() {
        System.out.println("做运动");
        return this;
    }

    public static void main(String[] args) {
        new Writer().ml().sleep();
    }
}
04、理想国中的Java垃圾回收

对象要想被正确使用,必须先被初始化,这是一切的开端;那么,当对象不再被使用后,它就需要被清理掉,要善始善终。假如你遇到一个面试官,他要“强行”问你关于Java垃圾回收的一些问题,你可以提前做好下面这些准备。

Q:为什么要进行垃圾回收?
A:如果不进行垃圾回收,内存迟早都会被消耗空。除非内存无限大,我们可以任性的分配而不回收,但是事实并非如此。所以,垃圾回收是必须的。

Q:哪些内存需要回收?
A:所谓“要回收的垃圾”无非就是那些不可能再被任何途径使用的对象。

Q:Java是如何回收垃圾的?
A:深入理解 Java 垃圾回收机制

不过,在我的印象里,有一副爆笑的动态图令我印象深刻,它隐喻的是Java的垃圾回收机制

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpfgwg.html