博客
关于我
static、this、super关键字
阅读量:234 次
发布时间:2019-03-01

本文共 2334 字,大约阅读时间需要 7 分钟。

概述

在这里插入图片描述


只记

static~ : 直接用类调用 (也可以用对象调用,会自动转换为类名调用)

非static(实例)~ : 要用对象调用
【this和super用法一样!!!!】
this表示:当前对象的
super表示:父类的
在这里插入图片描述


static

static:静态的,可以看作是共享的变量或者方法,存储在方法区内存中。

1. static修饰:无需对象参与便有的定方法或者定变量

那么:
(1)直接:" 类名. " 去访问 (可以用对象调用,不会报错,它会自动转换为类名调用)
(2)static与this不能共存
(3)static方法中也不能直接有实例变量(对象都不滴有 你哪来的实例变量)
当然可以在static方法里面可以创建对象 然后去访问实例变量(这跟上述不冲突)
在这里插入图片描述

2. 无static修饰:必须要有对象参与才有确切值的方法或者变量

必须要用对象调用!
在这里插入图片描述在这里插入图片描述在这里插入图片描述

static代码块

在方法区内存加载顺序:类加载只加载一次!

  1. 进行逐行加载
  2. 遇见静态代码块(static{ … })直接执行!
  3. 遇见方法,加载方法属性(不加载方法体)
  4. 逐行加载结束

注:程序输出的“main方法”是主方法在栈内存中执行输出的!

在这里插入图片描述

用法:

在这里插入图片描述

对象初始时机:new 一次对象执行一次:
在这里插入图片描述

这两种语句块永远是父类先执行!

this

this表示当前对象:

在这里插入图片描述this很多情况下可以省略
在这里插入图片描述在这里插入图片描述只记二: this在构造方法中的特殊用法

this在构造方法中:

  1. this在构造方法中可以直接 this(…) 调用另一个构造方法 【在super部分深析】
  2. this在构造方法中代表使用该构造方法所创建的对象,所以可以 this.实例方法

在这里插入图片描述

重要:

public class Test01 {   		int i = 100;//实例变量	static int  j = 250;//静态变量		public static void main(String[] args) {   		//完整方式		Test01.methon();		//省略方式		methon();				Test01 t1 = new Test01();		t1.methon2();				System.out.println(t1.i);		System.out.println(j);//省略Test01.	}	public static void methon() {   		System.out.println("methon");		//完整方式		Test01.doSame();		//省略方式		doSame();				Test01 t2 = new Test01();		t2.doSame1();				System.out.println(t2.i);		System.out.println(j);//省略Test01.	}		public void methon2() {   		System.out.println("methon2");		//完整方式		Test01.doSame();		//省略方式		doSame();		//完整方式		this.doSame1();		//省略方式		doSame1();				System.out.println(i);//省略this.		System.out.println(j);//省略Test01.	}		public static void doSame() {   		System.out.println("doSome");	}	public void doSame1() {   		System.out.println("doSame1");	}}

在这里插入图片描述

super

this、super用法一样

只是:super通过当前构造方法调用父类中的构造方法【注意:没extends继承,则调用的就是Object类的构造方法】(只记三)

只是:this、super在子类构造方法中:

  1. this()、super()都是调用构造方法。其中this()调用本类中其他的构造方法,super()调用父类的构造方法
  2. this()、super()只能出现在构造方法第一句
  3. this()、super()只能出现一次
  4. this()、super()不能同时出现
  5. 若没有this()或super()写出(或者它们的重载方法),则每个构造方法都会默认第一行为super()

那么,无论怎样,父类中的构造方法一定会先实现!

在这里插入图片描述

所以,如果重载了一个父类的构造方法,那么建议写一个无参构造方法,不然子类中默认构造方法中的super();就会报错!【当然也可以改变子类中的super()成super(“小明”)】:

在这里插入图片描述

super内存分析

注意:

构造方法执行过程中一连串调用父类构造方法,但只创建了一个对象
super()调用父类构造方法实质是 初始化父类实例变量(父类特征),并不创建对象。这些初始化变量就包含在子类对象中,为子类对象所用。

在这里插入图片描述子类可以通过继承的get(),set()方法去操控没有继承的private变量:

(每个子类对象都是一个下图,各有各的对应父类的private变量)

在这里插入图片描述

this包含super:

在这里插入图片描述

super指向的是父类的一堆特征:
在这里插入图片描述
this.变量/方法,也可以 super.变量/方法 ( 方法与变量情况一样!)
在这里插入图片描述

super不能省:

当子类与父类存在同名变量,想要访问父类中的这个变量,就必须用super.

原因:同样是就近原则(this.不能省也是),name==this.name就近访问子类中的同名变量。用super.就可以访问父类中的这个同名变量。

转载地址:http://aqsv.baihongyu.com/

你可能感兴趣的文章
MySQL5.1安装
查看>>
mysql5.5和5.6版本间的坑
查看>>
mysql5.5最简安装教程
查看>>
mysql5.6 TIME,DATETIME,TIMESTAMP
查看>>
mysql5.6.21重置数据库的root密码
查看>>
Mysql5.6主从复制-基于binlog
查看>>
MySQL5.6忘记root密码(win平台)
查看>>
MySQL5.6的Linux安装shell脚本之二进制安装(一)
查看>>
MySQL5.6的zip包安装教程
查看>>
mysql5.7 for windows_MySQL 5.7 for Windows 解压缩版配置安装
查看>>
Webpack 基本环境搭建
查看>>
mysql5.7 安装版 表不能输入汉字解决方案
查看>>
MySQL5.7.18主从复制搭建(一主一从)
查看>>
MySQL5.7.19-win64安装启动
查看>>
mysql5.7.19安装图解_mysql5.7.19 winx64解压缩版安装配置教程
查看>>
MySQL5.7.37windows解压版的安装使用
查看>>
mysql5.7免费下载地址
查看>>
mysql5.7命令总结
查看>>
mysql5.7安装
查看>>
mysql5.7性能调优my.ini
查看>>