zoukankan      html  css  js  c++  java
  • Thinking in java 16/3/8

    未完待续:最后更新16/3/8 22:25

    初始化

    构造器:和c++类似,每个类编写时都需要一个initialize()方法,创建对象时,如果没有构造器,java就会给对象调用相应的构造器

    构造器的名字与类名相同;

    构造器可以看作一个给类的对象初始化的函数,但是构造器有与函数(方法)大不相同

    相同点

    存在重载(overloading)

    {

    重载:使用同个函数名,通过参数列表不同,执行不同的函数体内部

    类中构造器和方法都存在函数重载

    }

    不同点

    构造器不存在返回值,没有返回值的意思是本身就不存在返回值,与void有本质不同,void只是返回一个空值,逻辑上也存在返回值

    重点

    {

      Tree t = new Tree(); 

      前一个Tree指类名,后一个Tree()指Tree类中的无参构造器,

      new Tree()虽然返回一个Tree类对象的引用,但是Tree()这个构造器并没有返回任何值

      其中的t指的的是生成一个Tree类对象的引用,所以在函数传递中,f(Tree t),其实也是复制一个对象引用,在f()中改变对象,也会引起原来的改变

      可以猜测,在java中所有对类对象的操作本质上都是通过类引用进行的

    }

    this关键字:

    this关键字只能在方法内部使用,表示调用方法的那个对象”,同一个类调用其他的方法不需要加this,可以通过return this返回对当前对象的引用

    通过对this的(显示或者隐示)引用,可以在方法内部使用本身的其他方法或者基本类型

    比如void f2(){f1(),return this};

    假设f1(),f2()都是类Tree的方法,f2()的定义中,f2()参数表隐式调用了本身,(Tree t'的引用,但new Ttee()生成一个确定对象,t'的引用也就有了意义),

    在f2()内调用this.f1()可以直接省略this.f1(),当然如果存在相同的标识符,this.不能省略,明确变量

    this另一个重要的作用:

    构造器中调用构造器

    通过给在一个构造器中this参数表来调用另个构造器,本质上是对构造器初始化的细化,每个构造器初始化一部分分段(变量)

    注意点

    尽管可以在一个构造器中通过this调用另一个构造器,但是一个构造器只能调用一次其他的构造器,也就是this只能使用一次,虽然可以迭代下去调用

    this要写在构造器最前面,不然对造成编译错误 by Thinking in java page 86

    重新思考static

    这时候我们明白了非static方法还是字段都是通过对象具体生成也有意义的,this是非静态类成员的载体,通过this.可以调用this内部的成员

    而static成员并不依靠某个具体的对象存在,不需要具体对象的生成,就可以通过类名.来调用非静态类成员,static方法内部不能调用非静态类,反过来倒是可以,

    因为如果没有具体对象生成,static调用的非静态类没有意义,我们直接通过类名调用static方法也就违法了

    思考:static方法是不是更像一个全局函数而"非一个对面对象"?                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     

    在一个谎言的国度,沉默就是英雄
  • 相关阅读:
    深入理解ThreadLocal
    JAVA守护线程
    JAVA THREAD.JOIN方法详解
    JAVA中断机制详解
    Socket中的异常和参数设置
    WebSocket实战
    程序里面的system.out.println()输出到其他位置,不输出到tomcat控制台。
    数据库连接未关闭,conn与rs未关闭
    Ajax简单应用-购物车
    1.链表和数组的区别在哪里?
  • 原文地址:https://www.cnblogs.com/EdsonLin/p/5252560.html
Copyright © 2011-2022 走看看