zoukankan      html  css  js  c++  java
  • java读书笔记——this

    阅读书籍:《Fundamentals of JAVA Programming》(Fifth Edition)

    Page 149:LEARNING  ABOUT THE this REFERENCE

    C++和Java之中都是有指针的,但是有个显著的区别就是C++中的this是指针,而Java中是引用。

    Java中的this指的是它所属的对象本身。在类内部通常忽略使用this,比如:

        public int getEmpNum()
        {
            return empNum;
        }
        public int getEmpNum()
        {
            return this.empNum;
        }

    上述两个方法在类内部是完全相同的。

    你也许会疑问,那么使用this有什么用呢。请看下面的代码:

    public class Student
    {
    	private int stuNum;
    	private double gpa;
    	public Student(int stuNum,double gpa)
    	{
    		stuNum = stuNum;//Error
    		gpa = gpa;//Error
    	}
    }  

    上述代码中标记Error的地方是有错误的,在构造器中并不会使Student类的私有成员stuNum和gpa初始化。

    形参已经把私有成员覆盖掉了。。

    在构造器的块作用域中,默认的stuNum是传入的形参,而不是类的私有成员。

    public class Student
    {
    	private int stuNum;
    	private double gpa;
    	public Student(int stuNum,double gpa)
    	{
    		this.stuNum = stuNum;
    		this.gpa = gpa;
    	}
    }  

    这样this的作用你就明白了吧。

    this的产生还有一个重要的原因,那就是使得构造器重载更有效。

    只要看两段代码,你就明了了。

    代码一:

    public class Student
    {
    	private int stuNum;
    	private double gpa;
    	Student(int Num,double avg)
    	{
    		stuNum = Num;
    		gpa = avg;
    	}
    		Student(double avg)
    	{
    		stuNum = 999;
    		gpa = avg;
    	}
    		Student(int Num)
    	{
    		stuNum = Num;
    		gpa = 0.0;
    	}
    		Student()
    	{
    		stuNum = 999;
    		gpa = 0.0;
    	}
    }  

    代码二:

    public class Student
    {
    	private int stuNum;
    	private double gpa;
    	Student(int Num,double avg)
    	{
    		stuNum = Num;
    		gpa = avg;
    	}
    		Student(double avg)
    	{
    		this(999,avg);
    	}
    		Student(int Num)
    	{
    		this(num,0.0);
    	}
    		Student()
    	{
    		this(999,0.0);
    	}
    }  

    写到这里不知不觉的想到了super。那就下期再聊super。


     

  • 相关阅读:
    线程 & 进程 & 协程
    redis入门
    插入排序
    java多线程(7)实现一个线程池
    java多线程(6)模拟排队叫号程序,4个线程都干活并且结果正确
    java多线程(5)模拟排队叫号程序,不能出现交替执行的结果
    java多线程(4)模拟排队叫号程序,不能出现交替执行的结果
    java多线程(3)其实本节和多线程无关,简单的模板设计模式
    java多线程(2)连续重启一个线程报错
    java多线程(1)
  • 原文地址:https://www.cnblogs.com/unclejelly/p/4082123.html
Copyright © 2011-2022 走看看