Java基础-学习笔记(七)——this关键字

1、this引用句柄

this指的就是调用该方法的对象

class A
{
    String name;
    public A(String x)
    {
        name=x;
    }
    public void func1()
    {
        System.out.println("my name is "+name);
    }
    public void func2()
    {
        A a2=new A("a2");
        a2.func1();
        this.func1();//可以去掉this,结果一致
        func1();
    }
    public static void main(String [] args)
    {
        A a1=new A("a1");
        a1.func2();
    }
}
/*
F:\java_example>java A
my name is a2
my name is a1
my name is a1
*/

在成员方法中,对访问同类中成员前加不加this引用,效果都一样,这就好像,我们是同一个公司的成员,,彼此在提及和自己公司相关的事时,不用说出公司名一样,当然也可以显式指出我们公司怎样怎样,每个成员方法内部都有一个this引用变量,指向调用这个方法的对象。

看似this可有可无,但在有些场合中还是非常有必要的

1)我们通过构造方法将外部传入的参数赋值给类成员变量,构造方法的形参名称与类的成员变量名相同

class Person

{

  String name;

  public Person(String name)

  {

    this.name=name;

  }

}

2)可作为对象进行传class Containe{

class Container
{
  Component comp;
  public void addComponent()
  {
    comp = new Component(this);
    /*comp = new Component(new Container());
此种做法是不合理的,因为我想要的是,把新创建的部件归到调用这个addComponent()的Container对象中。
如果我现在又新建一个Container类,那是会把这个部件归到新创建的Container类中,
为了只对应一个Container类,我们可以用this来表示我们的对象
*/
  }

}
class Component
{
  Container myCon;
  public Component(Container con)
  {
    myCon=con;
  }
}

  3)构造方法是产生对象时被java系统自动调用的,我们不能在程序中像调用其它函数一样来调用构造方法。但是我们可以在一个构造方法中通过this的形式调用其它重载的构造方法

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

  补充:关于java垃圾回收的机制

java有自动回收内存垃圾的机制,当一个对象变成垃圾,它所引用的其它对象在没有被别的有效的句柄引用的话,也会随之变成垃圾,也就是不用程序员再去做“释放对象在生存期间所占用的一些资源”这样的事。

finalize()方法是在对象被当成垃圾从内存中释放前调用,而不是在对象变成垃圾前调用,垃圾回收器的启用不由程序员控制,也无规律可循,并不是一产生垃圾它就会被唤起,因此这并不是一个很可靠的机制。

不过,java中提供了一个System.gc()方法,使用这个方法可以强制启动垃圾回收器回收垃圾。

posted @ 2015-11-05 20:46  巅峰之旅  阅读(186)  评论(0编辑  收藏  举报