首页 技术 正文
技术 2022年11月14日
0 收藏 538 点赞 2,504 浏览 2754 个字

一、this关键字

1.this概念

(参考:http://www.cnblogs.com/xdp-gacl/p/3636071.html

  this是一个引用,它指向自身的这个对象,它的内存分析如下图。假设我们在堆内存new了一个对象,在这个对象里假设有一个引用this,this指向这个对象自己,所以这就是this,这个new出来的对象名字是什么,我们不知道,不知道也没关系,因为这并不影响这个对象在内存里面的存在,这个对象只要在内存中存在,他就一定有一个引用this。

2.this在方法中的应用–区分成员变量与局部变量

   一个方法要运行的时候,一个jvm会在栈内存开辟一片属于这个方法的空间让这个方法在这个内存空间运行。

如果在一个方法中访问了一个变量,该变量只存在成员变量的情况下,那么java编译器会在该变量的 前面添加this关键字。 如果存在同名成员变量与局部变量时,在方法内部默认是访问局部变量的数据,可以通过this关键字指定访问成员变量的数据,如下图,通过this将成员变量i和局部变量i分开。

3.this在构造函数中的应用–调用其他构造函数以及区分成员变量与局部变量

this关键字调用其他的构造函数时,this关键字必须要位于构造函数中 的第一个语句。
    this关键字在构造函数中不能出现相互调用 的情况,因为是一个死循环。

public class ConstructFuction {    public ConstructFuction()
{ } public ConstructFuction(int id)
{
this(); //调用无参数额构造方法
System.out.println(id);
} public ConstructFuction(int id,int age)
{
this(id); //使用this调用其他构造函数
System.out.println(age);
} public ConstructFuction(int id,int age,String name)
{
this(id,age);
System.out.println(name);
}
}

4.this作为方法的返回值–返回对象本身

class ReturnObjectSelf
{
public String name="Hello World";
public ReturnObjectSelf returnObject()
{
return this;
}
}

5.this在内部类的使用

this在内部类中代表内部类,在外部类中代表外部类。

内部类调用外部类的成员变量,即可以直接调用,也可以用 类名.this.成员变量。

内部类调用外部类的变量时,要区分成员变量和局部变量,有冲突时,局部变量直接调用,成员变量用 类名.this.成员变量

public class InnerClassThis {    public String outer="Hello Outer";    //内部类
public class InnerClassTest
{
public String inner="Hello Inner"; public void showInfo()
{
System.out.print(this.inner);//内部类调用内部类成员变量
System.out.print(outer); //内部类调用外部类的成员变量
System.out.print(InnerClassThis.this.outer);
}
} public void partClass()
{
String outer = "Hello Outer Part"; class PartClassTest
{
public void showInfo()
{
System.out.println(outer); //内部类调用外部类局部变量
System.out.print(InnerClassThis.this.outer); //内部类调用外部类成员变量
}
} PartClassTest pct = new PartClassTest();
pct.showInfo(); }}

二、super关键字

super关键字代表了父类空间的引用。

super关键字的作用:
    1) 子父类存在着同名的成员时,在子类中默认是访问子类的成员,可以通过super关键字指定访问父类的成员。
    2) 创建子类对象时,默认会先调用父类无参的构造方法,可以通过super关键字指定调用父类的构造方法。

super关键字调用父类构造方法要注意的事项:
    1) 如果在子类的构造方法上没有指定调用父类的构造方法,那么java编译器会在子类的构造方法上面加上super()语句。
    2) super关键字调用父类的构造函数时,该语句必须要是子类构造函数中的第一个语句。
    3) super与this关键字不能同时出现在同一个构造函数中调用其他的构造函数。因为两个语句都需要第一个语句。

super关键字与this关键字的区别:
    1) 代表的事物不一致。
       1. super关键字代表的是父类空间的引用。   
       2. this关键字代表的是所属函数的调用者对象。
    2) 使用前提不一致。
       1. super关键字必须要有继承关系才能使用。
       2. this关键字不需要存在继承关系也可使用。
    3) 调用构造函数的区别:
       1. super关键字是调用父类的构造函数。
       2. this关键字是调用本类的构造函数。

public class SuperSon  extends SuperFather{    public static void main(String[] args) {
// TODO Auto-generated method stub
SuperSon ss = new SuperSon(); ss.overrideMethod();;
} public SuperSon()
{
super(10,"dengsenlin");//调用父类指定的构造函数,必须放到构造函数的首位
} @Override
public void overrideMethod()
{
super.overrideMethod(); //父类与子类具有相同的函数,通过super调用父类
System .out.println("I'm Son!");
}
}class SuperFather{
//无参数构造函数,子类默认调用该构造函数
public SuperFather()
{ }
//第一个参数构造函数
public SuperFather(int age)
{ } //第一个参数构造函数
public SuperFather(int age,String name)
{ } public void overrideMethod()
{
System.out.println("I'm father");
}
}
相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,088
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,565
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,413
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,186
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,822
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,905