java回忆录—this和super的比较
Posted minigeek
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java回忆录—this和super的比较相关的知识,希望对你有一定的参考价值。
在JAVA程序中似乎经常见到“this”,自己也偶尔用到它,但是到底“this”该怎么用,却心中无数!很多人一提起它,就说“当前对象”,可到底什么是当前对象,是什么当前对象,他自己也不清楚。
先说下构造函数:
构造方法注意事项
如果你不提供构造方法,系统会给出默认构造方法
如果你提供了构造方法,系统将不再提供
构造方法也是可以重载的
this主要要三种用法:
1、表示对当前对象的引用
2、表示用类的成员变量,而非方法参数,注意在函数参数和成员变量同名是进行区分!其实这是第一种用法的特例,比较常用,所以那出来强调一下。
例子:
public class Test2
public static void main(String[] args)
Student s = new Student(10);
class Student
int age;
String name;
public Student(int age)
this.age = age++;
System.out.println(age+";"+this.age); //参数与成员变量同名,用this区分开
结果:
3、用于在构造方法中引用满足指定参数类型的构造器(其实也就是构造方法)。
例子:
class Student
int age;
String name;
public Student(int age)
this.age = age;
public Student(int age,String name)
this(age); //this调用一个参数的构造函数,且必须放在第一行,只能调用一次
this.name = name;
但是这里必须非常注意:只能引用一个构造方法且必须位于开始!
还有就是注意:this不能用在static方法中!所以甚至有人给static方法的定义就是:没有this的方法!虽然夸张,但是却充分说明this不能在static方法中使用!
super主要有两种用法:
1)表示当前类的父类的引用
2)调用父类的同名成员变量或者方法(super.成员变量/super.成员方法)
2)显示地调用父类的构造器(super(parameter1,parameter2....)
这里就不多说,跟this的用法类似。
在子类构造函数中不显示调用父类构造函数的话,默认在子类构造函数的第一行调用父类的无参构造函数。
跟this一样要注意的是:如果是用在子类构造器中,则必须是子类构造器的第一个语句。
例子:
public class Test2
public static void main(String[] args)
new Circle();
class Draw
public Draw(String type)
System.out.println(type+" draw constructor");
class Shape
private Draw draw = new Draw("shape");//1
public Shape()
System.out.println("shape constructor");//2
class Circle extends Shape
private Draw draw = new Draw("circle");//3
public Circle()
System.out.println("circle constructor");//4
结果:
这例子主要讲类继承时构造器的调用顺序和初始化顺序。
要记住一点:父类的构造器调用以及初始化过程一定在子类的前面。
由于Circle类的父类是Shape类,所以Shape类先进行初始化,然后再执行Shape类的构造器。
接着才是对子类Circle进行初始化,最后执行Circle的构造器。
以上是关于java回忆录—this和super的比较的主要内容,如果未能解决你的问题,请参考以下文章
Java中super的运行原理(super如何在内存中运行的)以及super和this的对比