这节我们主要是区分this 和 super这两个关键字的用法

起初我根本弄不清楚this super这两个关键字的用法,也不明白在代码实例中为什么既用this又用super,下面就是原因:

1.在Java中,this通常指当前对象,super则指父类的。

*当你想要引用当前对象的某种东西,比如当前对象的某个方法,或当前对象的某个成员,你便可以利用this来实现这个目的,当然,this的另一个用途是调用当前对象的另一个构造函数。

*如果你想引用父类的某种东西,则非super莫属。由于this与super有如此相似的一些特性和与生俱来的某种关系,我们一定要区分和掌握它们两个

2.this关键字的用法:

最普遍的情况就是,在你的方法中的某个形参名与当前对象的某个成员有相同的名字,这时为了不至于混淆,你便需要明确使用this关键字来指明你要使用某个成员,使用方法是

“this.成员名”,而不带this的那个便是形参。另外,还可以用“this.方法名”来引用当前对象的某个方法,但这时this就不是必须的了,你可以直接用方法名来访问那个方法,编译器会

知道你要调用的是那一个。见实例3.1

实例3.1

 /*定义类DomeThis*/
public class DomeThis {
public String name; //声明属性,成员变量
public int age;
public DomeThis(String name,int age){ //声明构造函数
this.name = name; //将构造函数中的name值赋给对象的name
this.age = age; //这里可以不加this
this.print();
} public void print(){ //声明打印方法
System.out.println("姓名"+name+" 年龄"+age); //这里的name和aga可以加this也可以不加
} public static void main(String[] args) {
DomeThis test = new DomeThis("zhang",3);
}
}

运行结果:

3.关键字super的用法

1)有人写了个很好的初始化属性的构造函数,而你仅仅想要在其中添加另一些自己新建属性的初始化,这样在一个构造函数中调用另外一个构造函数,可以避免重复的代码量,减少工作量;

2)在一个构造函数中调用另外一个构造函数的时候应该用的是同一块内存空间,在默认的构造函数中先初始化变量,调用另一个的时候覆写已经初始化的变量的值;

3)整个调用的过程和递归调用函数有点类似,不断充气球,直到整个气球膨胀起来,不断的深层递进,遇到停止标记,逐层的跳出来。

见实例3.2

 /*定义父类Tiger*/
public class Tiger { int age; // 年龄
int hight; // 身体高度 public Tiger(int age) { //定义构造函数
this.age = age;
print();
}
public void print() {
System.out.println("I'am a " + age + "岁 " + hight + "厘米高 的tiger!");
}
}

下面例子类JavanTiger 中的构造函数中的 super()可以不写,JAVA会默认调用父类的无参数的构造函数,但如果父类没有定义无参数的构造函数,没有语法错误,程序会自动退出,没有任何打印语句,这时候你需要手动调用其他父类的构造函数

 /*定义子类查看super的用法*/
public class JavanTiger extends Tiger {
public JavanTiger() {
super(1); // 调用父类有参数的构造函数
}
public static void main(String[] args) {
new JavanTiger();
}
}

运行结果:

这段代码中的 super(1)必须要写进去,否则编译器会报错。简单的总结一下,“this()是调用自己其他的构造函数,super()是调用自己继承的父类的构造函数“,如果只想调

用默认无参数的父类构造函数,不用在子类的构造函数当中写出来,但是实际编程的时候,总是会忽略这一点。

那么这两个关键字能不能同时出现在子类的一个构造函数当中纳?答案肯定是不能。先说下自己的理解:

1)在新建一个基类的时候,不论递归调用几次自身的构造函数,最终你都会去调用父类的构造函数,(不是显式调用的话,系统会调用默认无参数的父类构造函数);

2)JAVA 中规定使用 this 和 super 时必须放在构造函数第一行,只有一个第一行。见图1

 

大家如果看到我有错误的地方请多多指出,谢谢

Java中this、super用法的更多相关文章

  1. java中this的用法?

    2008-07-28 08:10cztx5479 | 分类:JAVA相关 | 浏览4533次 java中this的用法? import java.awt.*; import java.awt.even ...

  2. 转:十八、java中this的用法

    http://blog.csdn.net/liujun13579/article/details/7732443 我知道很多朋友都和我一样:在JAVA程序中似乎经常见到“this”,自己也偶尔用到它, ...

  3. Java 中 synchronized的用法详解(四种用法)

    Java语言的关键字,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码.本文给大家介绍java中 synchronized的用法,对本文感兴趣的朋友一起看看吧 ...

  4. java成神之——java中string的用法

    java中String的用法 String基本用法 String分割 String拼接 String截取 String换行符和format格式化 String反转字符串和去除空白字符 String获取 ...

  5. java中stringBuilder的用法

    java中stringBuilder的用法 String对象是不可改变的.每次使用 System.String类中的方法之一时,都要在内存中创建一个新的字符串对象,这就需要为该新对象分配新的空间.在需 ...

  6. 第一篇 网站基础知识 第4章 Java中Socket的用法

    第4章 Java中Socket的用法 4.1 普通Socket的用法 Java中的网络通信是通过Socket实现的,Socket分为ServetSocket和Socket两大类,ServetSocke ...

  7. java中关键字super

    super关键字的作用 java中的super关键字是一个引用变量,用于引用父类对象.关键字“super”以继承的概念出现在类中. 主要用于以下情况:1.调用父类的方法   2.调用父类的变量  3. ...

  8. Java中的Socket用法

    转发链接:https://www.cnblogs.com/zhanglei93/p/6217384.html (1)Java中的Socket用法 Java中的Socket分为普通的Socket和Nio ...

  9. Java中的super与this解析

    好了,现在开始讨论this&super这两个关键字的意义和用法. 在Java中,this通常指当前对象,super则指父类的.当你想要引用当前对象的某种东西,比如当前对象的某个方法,或当前对象 ...

  10. Java中Synchronized的用法

    原文:http://blog.csdn.net/luoweifu/article/details/46613015 作者:luoweifu 转载请标名出处 <编程思想之多线程与多进程(1)——以 ...

随机推荐

  1. mysql 语句

    mysql sql语句大全 1.说明:创建数据库 CREATE DATABASE database-name 2.说明:删除数据库 drop database dbname 3.说明:备份sql se ...

  2. 取出ip address control的ip字符

    1.给这个空间设置control型变量 m_add; 2.定义4个字节型变量,来获取控件中的4个ip字节 BYTE a,b,c,d: m_add.GetAddress(a,,b,c,d): 3.定义I ...

  3. Win32工程中使用MFCdll的解决方法

    我的项目是Win32,先使用了 Standard Windows Libraries,可后期又要要使用MFC的dll,所以要更改工程属性 ,MFC 的dll可以使用了,但标准的windows的dll出 ...

  4. HDU4686 Arc of Dream 矩阵快速幂

    Arc of Dream Time Limit: 2000/2000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others)Tota ...

  5. Java_一些特殊的关键字详(?)解

    1. native. 在看JDK源码时,想知道Math包里比如cos, sin等函数是如何实现的(猜想的是用他们在0点的泰勒展开式近似),但是打开之后却发现只有一个函数声明,并且有关键字native, ...

  6. gitlab配置和搭建 ssh

    (1)查看自己之前是否生成过ssh密钥: cat ~/.ssh/id_rsa.pub 如果出现一段ssh-rsa开头的,表示已经生成了,可以跳过此步骤: (2)如果之前没有生成ssh密钥,使用命令: ...

  7. 设置三思LED的IP地址跟端口号

    出厂设置是:202.11.11.01 初始端口号是:2929 设置虚拟机的ip跟LED的ip在一个网段上,在虚拟机上telnet命令,登陆到LED上面. 在/etc/init.d/rcS文件中, #! ...

  8. asp.netMVC4(基础知识----传值问题分析)

    (1)一般在数据交互的时候,都会涉及到前后台间的相互传值,一般的情况下,方法也有多种,下面就后台定义变量往前台传值: 以下是后台代码: /// <summary> /// 展示举报信息 / ...

  9. js 读写cookie。不同路径会储存各自的cookie。而 在v.net环境下读写是在 / 根目录。

    所以如果全站不分path 的 话.应该显示的写上 path .设置为根目录 function setCookie(name, value) { document.cookie = name + &qu ...

  10. 排序算法 & 迷宫的深度, 广度优先

    内容提要 1. 我掌握的排序算法的时间复杂度 2. 我掌握的6种排序算法(插入, 冒泡, 选择, 归并, 快速, 希尔) 3. 迷宫的搜索方法(深度优先 + 广度优先) 各种排序的时间复杂度 名称 稳 ...