static方法不能直接访问类内的非static变量和不能调用this,super语句分析

大家都知道在static方法中,不能访问类内非static成员变量和方法。可是原因是什么呢?

这首先要从static方法的特性说起。static方法,即类的静态成员经常被称为“成员变量”(class members),对于静态成员变量,我们叫类属性(class attributes),对于静态成员方法,我们叫类方法(class members)。其中静态成员变量:无论是否产生了对象或无论产生了多少对象的情况下,某些特定的数据在内存空间里只有一份。我们可以直接使用类名来访问这个static变量,还可以在类的非静态的成员方法中像访问其他非静态成员变量一样去访问这个静态成员变量。对于静态方法,该方法不必和对象绑在一起。访问方式有三种,类内:非静态成员方法可以直接访问静态成员方法,类外:类名.成员  对象.成员

从以上我们就可以知道,静态成员的最大特点是不用和对象绑定在一起。这个方便的特性,也成了它的一个包袱:当在静态成员的类外时,如果是直接用类名.静态成员的方式访问,静态成员直接访问了一个非静态的成员(该被访问成员一般是类内的,如果是类外的,可能就先创建对象了,因为不能直接访问,这里的直接访问与访问权限没有概念上的关系,访问权限是设定了访问的范围,直接访问则是一种访问方式)。这个时候就出现一个问题,非静态的成员是怎么访问的?如果可以直接访问,难道它也是可以脱离对象的吗?(静态成员的访问是脱离了对象的,而静态成员又直接访问了非静态成员)答案显然是否定的。所以在静态方法中不可以直接访问类内的非静态成员,如果要访问非静态成员,则要先创建对象。

也许会有这样的疑问:既然是出在了非静态成员身上,那么可不可以用对象.static方法直接访问类内的成员?这个样子的实质还是直接访问了非静态成员,并不是说用了对象.static方法访问就可以改变静态方法访问类内成员的方式.

简而言之:


转载于:https://www.cnblogs.com/hdk1993/p/4399833.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/460340.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++ Qt 访问权限总结

总结:C的访问修饰符的作用是以类为单位,而不是以对象为单位。 通俗的讲,同类的对象间可以“互相访问”对方的数据成员,只不过访问途径不是直接访问. 步骤是:通过一个对象调用其public成员函数,此成员函数可…

火山去水印链接_在线批量去水印下载快手图集视频、抖音、火山等平台方法技巧!...

不管是做自媒体还是做电商或是工作素材采集,都离不开视频,视频比文字更好展示出产品、细节内容,就好比我们经常看的抖音、快手、火山、皮皮虾之类的短视频里面就有很多优秀的素材,相信有采集过的朋友都会遇到平台水印这个问题吧&a…

输出素数

素数是指仅能被1和她自身整除的整数。(1 不是素数) 程序设计时 i 可以从2开始,到该整数的 1/2为止,用 i 一次去除需要判断的整数,只要存在可以整除该数的情况,即可以确定要判断的整数不是素数,…

php CI 实战教程:如何去掉index.php目录

Windows下自由创建.htaccess文件的N种方法.htaccess是apache的访问控制文件,apache中httpd.conf的选项配合此文件,完美实现了目录、站点的访问控制,当然最多的还是rewrite功能,即URL重写,PHP中实现伪静态的一个重要途径…

十字连接焊盘_你应该知道的焊盘基础知识

PADSTACK:就是一组PAD的总称。Copper pad:在布线层(routing layer),注意不是内层,任何孔都会带有一个尺寸大于钻孔的铜盘(copper pad)。对内布线层这个铜盘大概14 mils,外布线层更大。如果这里需要导线连接,那么这个可以提供一个可…

逆序输出字符串

void re(char *str, int len); void re2(char *str); int main() { char str[1024] “I am from ShangHai”; //char str[1024] “a b c d e f”; re(str, strlen(str)); printf("first : |%s|\n", str);re2(str); printf("second : |%s|\n", str);…

利用stat命令获取Linux文件系统和文件的详细状态信息

用途:stat命令用于显示文件或文件系统的状态信息,来自于coreutils软件包,一般系统自带此命令工具,它能获取与文件系统及文件相关的许多信息,具体用途见stat的功能选项。这些信息包括inode、atime、ctime、mtime、文件&…

平面上最近点对

在二维平面上的n个点中,如何快速的找出最近的一对点,就是最近点对问题。 一种简单的想法是暴力枚举每两个点,记录最小距离,显然,时间复杂度为O(n^2)。 在这里介绍一种时间复杂度为O(nlognlogn)的算法。其实&#xff0c…

分词之后的如何做特征选择_特征选择怎么做?这篇文章告诉你

作者 | Pier Paolo Ippolito翻译 | Skura编辑 | 唐里原文标题:Feature Selection Techniques据《福布斯》报道,每天大约会有 250 万字节的数据被产生。然后,可以使用数据科学和机器学习技术对这些数据进行分析,以便提供分析和作出…

Shell脚本中循环语句for,while,until用法

循环语句:BashShell中主要提供了三种循环方式:for、while和until。一、for循环for循环的运作方式,是讲串行的元素意义取出,依序放入指定的变量中,然后重复执行含括的命令区域(在do和done 之间),…

我的扫描器设计

Web扫描器SeachPlan的设计与实现 姓名 李波 2014年6月 中图分类号:TP311. UDC分类号:004. Web漏洞扫描器SeachPlan的设计与实现 作 者 姓 名 李波 学 院 名 称 软件学院 指 导 教 师 XXX 答辩委员会主席 XXX …

git管理账户忘记了_强制找回GitLab管理员账户密码的方法

01. 概述如果gitlab的密码忘记了,由于没有邮箱服务支持,所以可以通过后台直接操作git-shell,先找回管理员的密码。操作步骤如下02. 环境使用docker部署的gitlab,因此需要多执行一步,如果是传统安装方法,不用…

无名管道pipe使用方法

有名管道pipe函数:int pipe(int filedes[2]); 下面程序通过创建进程&#xff0c;父进程写入数据&#xff0c;子进程读取数据&#xff0c;从管道中读取数据。 #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <sys/types.h> #i…

交换2个数值的方法

如何交换2个变量的值&#xff1f;一般来说&#xff0c;想到的方法是再找一个临时变量&#xff0c;通过一种顺序存放的方式来达到交换值的效果。 比如有a,b这2个变量。取同类型的变量temp。 temp a ; a b ; b temp ; 这样就完成了交换。但这样做的话会多使用一个temp的内存。…

mysql的char和varchar_MySQL的char和varchar

1.varchar类型的变化MySQL 数据库的varchar类型在4.1以下的版本中的最大长度限制为255&#xff0c;其数据范围可以是0~255或1~255(根据不同版本数据库来定)。在 MySQL5.0以上的版本中&#xff0c;varchar数据类型的长度支持到了65535&#xff0c;也就是说可以存放65532个字节的…

【问题收集·知识储备】Xcode只能选择My Mac,不能选择模拟器如何解决?

网友问题:请问打开一个应用&#xff0c;只能选择My Mac&#xff0c;不能选择模拟器如何解决&#xff1f; 答案: 下面将问答过程记录如下&#xff1a; CHENYILONG Blog请问打开一个应用&#xff0c;只能选择My Mac&#xff0c;不能选择模拟器如何解决&#xff1f; 网友的问题 09…

typedef的使用方法

typedef是在计算机编程语言中用来为复杂的声明定义简单的别名&#xff0c;与宏定义有些差异。它本身是一种存储类的关键字&#xff0c;与auto、extern、mutable、static、register等关键字不能出现在同一个表达式中。 使用typedef为现有类型创建别名&#xff0c;定义易于记忆的…

SQL Server CLR全功略之一---CLR介绍和配置

Microsoft SQL Server 现在具备与 Microsoft Windows .NET Framework 的公共语言运行时 (CLR) 组件集成的功能。CLR 为托管代码提供服务&#xff0c;例如跨语言集成、代码访问安全性、对象生存期管理以及调试和分析支持。对于 SQL Server 用户和应用程序开发人员来说&#xff0…

mysql select 子查询_SELECT中常用的子查询操作

MySQL中的子查询 是在MySQL中经常使用到的一个操作,不仅仅是用在DQL语句中,在DDL语句、DML语句中也都会常用到子查询。 子查询的定义: 子查询是将一个查询语句嵌套在另一个查询语句中; 在特定情况下,一个查询语句的条件需要另一个查询语句来获取,内层查询(inner query)语…