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

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

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

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

简而言之:

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

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

  1. Python:闭包(简介、使用方法、nonlocal修改闭包内使用的外部变量)、装饰器(定义、作用、通用装饰器、多个装饰器、带参数的装饰器、类装饰器、装饰器方式添加WEB框架的路由)

    一.闭包的介绍 闭包可以保存函数内的变量 当闭包执行完毕,外部函数的变量才释放. # 闭包的作用:可以保存外部函数的变量 # 闭包的形成条件 # 1.函数嵌套 # 2.内部函数使用了外部函数的变量或者 ...

  2. java访问成员变量和方法_如何访问类的成员变量和方法

    如何访问类的成员变量和方法 在Java应用程序中,经常需要访问类的成员变量和方法,以实现程序的功能,请问应该如何访问类的成员变量和方法?在Java中通过类的实例(即对象)点(.)运算符来访问类的成员变 ...

  3. 类内如何声明静态变量,常量问题

    类内声明静态变量: // static_variable.h class a {static int var; };// static_variable.cpp #include "stat ...

  4. python的类里的属性是否可以为列表_是否有Python方法可以访问类的所有非私有和非内置属性?...

    我想调用一种方法给我一个所有"非私有"的词典(我在这里使用"私有"一词,因为它在 Python中并不存在)和非内置属性(即那些在类上不要以单个或双下划线开头.像 ...

  5. JavaSE面向对象:继承、多态、Super、Object类、重写、static、final、静态成员、懒汉式、饿汉式、单例设计模式、初始化块、抽象类、抽象方法、接口

    感谢尚硅谷免费提供的视频 继承 ** 理解 ** 生活中的继承:子女继承了父母的财产或相貌或才华 java中的继承:一个类不用自己定义属性或方法,就已经具备了另一个类的属性和方法 把这种现象称为jav ...

  6. 一个static方法内可以调用非static方法吗?

    不可以. 因为非 static 方法是要与对象关联在一起的,必须创建一个对象后,才可以在该对象上进行方法调用,而 static 方法调用时不需要创建对象,可以直接调用. 也就是说,当一个 static ...

  7. java static方法

    static方法 1.static方法的作用访问static变量和static方法2.static方法的调用方式通过类名调用.通过对象名来访问3.不可以静态方法中不可以访问非静态变量 静态方法中不可以 ...

  8. 【JAVA类与对象----5(static、代码块)】

    一.为什么使用static class Student{private String name; //姓名private int age; //年龄private String classroom; ...

  9. uvm_primer ch7 static方法和变量

    uvm_primer static方法和变量 ch7 ch7 static方法和变量 ch7.1不要使用全局变量 ch7.2静态变量 ch7.2.1两种访问方法的途径 ch7.2.2queue队列 c ...

最新文章

  1. “是男人就下一百层”h5游戏全网最详细教学、全代码,js操作
  2. ML之NB:朴素贝叶斯Naive Bayesian算法的简介、应用、经典案例之详细攻略
  3. 阿里云天池平台官方出品!从0到1层层拆解天池大赛赛题 | 文末送书
  4. 《测试驱动数据库开发》——1.2 谁是目标读者
  5. Android P (2)---Android 9.0 “Pistachio Ice Cream”新功能和特性
  6. 制炭机行业调研报告 - 市场现状分析与发展前景预测(2021-2027年)
  7. 获取并反编译微信小程序源码(仅供学习)
  8. matlab 各类符号意义
  9. 线性代数的本质-基向量部分理解
  10. 金山wps支持java接口开发吗_金山wps开放平台使用踩坑实录
  11. 电驴 链接不到服务器
  12. 善用 Google 的 手气不错 I'm feeling lucky 搜索
  13. 计算机日常故障DIY维修有哪些,电脑故障排除及优化完全DIY
  14. veracrypt取消加密卷_VeraCrypt 加密个人隐私(便携式 )
  15. 《电商后台系统产品逻辑解析》学习笔记
  16. layui数据表格与后台交互进行渲染
  17. AS400 - DB2 for i的加密、解密
  18. Java 8 新特性Lambda 表达式
  19. [校园网]UDP绕过校园网,纯手工搭建Linux版
  20. 演讲实录:百度大规模深度学习应用实践和开源AI框架PaddlePaddle

热门文章

  1. leetcode256. 粉刷房子
  2. python随机出100道加法题_自动出题随机100题-20以内加减法全部算式
  3. linux加密框架 crypto 算法管理 - 算法查找接口 crypto_larval_lookup
  4. 程序员 面试笔记 C++ 程序设计的基础 第10章
  5. 目前基于区块链的档案防篡改系统的设计如何实现防篡改
  6. 大数据计算:如何仅用1.5KB内存为十亿对象计数
  7. ffmpeg-0.8 开源编码解码库从linux下移植到windows vs2005
  8. 如何删除虚拟机上的操作系统、删除新建的虚拟机
  9. spring 的4种事务管理(1种编程式+3种声明式)
  10. [转载]基于Aaf的数据拆分