• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Java > Java this()和super()的使用注意

Java this()和super()的使用注意

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-28

通过本文主要向大家介绍了java this super,java中super和this,this和super的区别,this和super的用法,this和super的作用等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

Java this()和super()的使用注意

使用super和this应该注意这些:

1)调用super()必须写在子类构造方法的第一行,否则编译不通过。每个子类构造方法的第一条语句,都是隐含地调用super(),如果父类没有这种形式的构造函数,那么在编译的时候就会报错。

2)super()和this()类似,区别是,super从子类中调用父类的构造方法,this()在同一类内调用其它方法。

3)super()和this()均需放在构造方法内第一行。

4)尽管可以用this调用一个构造器,但却不能调用两个。

5)this和super不能同时出现在一个构造函数里面,因为this必然会调用其它的构造函数,其它的构造函数必然也会有super语句的存在,所以在同一个构造函数里面有相同的语句,就失去了语句的意义,编译器也不会通过。

6)this()和super()都指的是对象,所以,均不可以在static环境中使用。包括:static变量,static方法,static语句块。

7)从本质上讲,this是一个指向本对象的指针, 然而super是一个Java关键字。

为什么this或者super要放到第一行?

this() super()是你如果想用传入当前构造器中的参数或者构造器中的数据调用其他构造器或者控制父类构造器时使用的,在一个构造器中你只能使用this()或者super()之中的一个,而且调用的位置只能在构造器的第一行,在子类中如果你希望调用父类的构造器来初始化父类的部分,那就用合适的参数来调用super(),如果你用没有参数的super()来调用父类的构造器(同时也没有使用this()来调用其他构造器),父类缺省的构造器会被调用,如果父类没有缺省的构造器,那编译器就会报一个错误。
如下:

class A{ 
  public A(String name) 
  { 
    System.out.println(name); 
  } 
} 
 
class B extends A{ 
 
  public B(String name) { 
    super(name); 
  } 
   
} 
</div>

class A中没有构造无参的构造函数,如果在class B中的构造函数如果没有调用super(name)将会报错。

假如我们允许把this 和super放置到任何位置。那么请看下面代码:

class A{   
  A()   
  {     
    System.out.println("You call super class non-args constructor!");  
  } 
} 
 
 
 class B extends A 
 {    
  B()    
  {   
    //这里,编译器将自动加上 super();        
    System.out.println("You call subclass constructor!");    
  }          
  B(String n)     
  {         
    super();         
    this();//ERROR:编译错误 
    //实际就是调用了B(){...},而在B(){...}中编译器自动加上了super();这样就相当于两次调用了super();也就是说对父类进行了两次初始化。而在实例化一个对象时,一个构造方法只能调用一次,这说明this和super不能同时存在一个构造方法中。同时因为系统没有在第一行发现this()或super()调用,就会自动加上super(),如果没有将this()和super()放在第一行就会产生矛盾。因为总有一个super()在第二句上。所以该程序不能通过编译!!!  
  } 
 } 
</div>

也就是说你必须在构造器的第一行放置super或者this构造器,否则编译器会自动地放一个空参数的super构造器的,其他的构造器也可以调用super或者this,调用成一个递归构造链,最后的结果是父类的构造器(可能有多级父类构造器)始终在子类的构造器之前执行,递归的调用父类构造器。无法执行当前的类的构造器。也就不能实例化任何对象,这个类就成为一个无为类。 

从另外一面说,子类是从父类继承而来,继承了父类的属性和方法,如果在子类中先不完成父类的成员的初始化,则子类无法使用,应为在java中不允许调用没初始化的成员。在构造器中是顺序执行的,也就是说必须在第一行进行父类的初始化。而super能直接完成这个功能。This()通过调用本类中的其他构造器也能完成这个功能。

因此,this()或者super()必须放在第一行。

 感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • Java this()和super()的使用注意
  • Java this()和super()的使用注意

相关文章

  • 2017-05-28java中多态概念、实现原理详解
  • 2017-05-28Java面试问题知识点总结
  • 2017-05-28基于Servlet实现技术问答网站系统
  • 2017-05-28Java HTTP协议收发MQ 消息代码实例详解
  • 2017-05-28java连接数据库(代码分享)
  • 2017-05-28Java 多线程有序执行的几种方法总结
  • 2017-05-28Java使用NioSocket手动实现HTTP服务器
  • 2017-05-28SpringMVC结合ajaxfileupload实现文件无刷新上传代码
  • 2017-05-28SpringBoot远程访问redis服务器问题剖析
  • 2017-05-28Java异常继承结构解析_动力节点Java学院整理

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • JAVA JSP页面技术之EL表达式整理归纳总结
    • Java 加密解密基础分类及模式归纳整理
    • Java递归算法详解(动力节点整理)
    • Spring Data JPA 简单查询--方法定义规则(详解)
    • Spring Boot 快速入门指南
    • Java 中 Reference用法详解
    • java对象拷贝详解及实例
    • java Spring AOP详解及简单实例
    • jstl之map,list访问遍历以及el表达式map取值的实现
    • java中添加按钮并添加响应事件的方法(推荐)

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有