zoukankan      html  css  js  c++  java
  • 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()方法,使用这个方法可以强制启动垃圾回收器回收垃圾。

  • 相关阅读:
    php学习推荐
    python 安装numpy报错
    PHP最基础
    php自定义错误函数
    phpMyAdmin安装
    php链接mysql提示:Call to undefined function mysql_connect()
    POJ 1005 解题报告
    亚马逊在线笔试(2014/10/9)
    LeetCode 题目 word break 思路剖析与改进
    Dijkstra单源最短路算法的C++实现
  • 原文地址:https://www.cnblogs.com/tiantianxiangshang33/p/4940753.html
Copyright © 2011-2022 走看看