2021/9/19-java静态方法与非静态变量
问题来源:
在开学测试一个论文提交系统中频繁出现一个报错提示:Cannot make a static reference to the non-static method mainFrame() from the type paperManagement
为解决这一问题,我找到了以下答案(参考来源:CSDN 原创:弹指江山)
java静态方法中不能引用非静态变量
静态方法和静态变量是属于某一个类,而不属于类的对象。
静态方法可以在没有创建实例时使用,而申明为非静态的成员变量是一个对象属性,所以它只有在对象存在时引用。因此,如果在对象未创建实例时在静态方法中调用了非静态成员方法就是非法的,所以编译器会在这时报出错误。总而言,静态方法可以不用创建对象就调用,非静态方法则必须通过对象的实例来进行调用,因此如果在静态方法中不通过实例就引用非静态方法,引用的是哪个对象的非静态方法就不确定,所以不能执行。只要不是static修饰的方法,必须要通过对象来进行引用。
如:
class test
{
int a=3; //非静态变量
public static void main(String[] args) //静态方法
{
System.out.print(a); //成员变量不能直接调用,无法调用非静态变量a(a cannot be resolved to a variable)
}
}
因为静态方法的调用不是通过实例对象进行的,所以在静态方法中没有this指针,不能访问所属类的非静态变量和方法,只能访问方法体内的局部变量、自己的参数和静态变量,所以在static的主函数中调用非static的方法就是错的,应把方法放到另一个类,创建对象再调用,因为这个方法不是类的,即不是属于类的,而是属于具体的一个实例对象的。
记:
用static修饰的成员是属于类的,在static的方法里可以用类名直接调用,而不需要static修饰的成员是属于具体实例对象的,需要用对象名调用,且在static的方法里不可以调用。
原文地址:https://www.cnblogs.com/-yi123/p/15312667.html
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- 使用纯CSS给网站文章中的外链添加小图标
- iOS美团同款"ZSource"二进制调试实现
- 使用picocm来进行Linux下的串口调试
- vue-drawer-layout实现手势滑出菜单栏
- iOS面试之UI大全
- 基于Ant Design Vue封装一个表单控件
- Rust闭包的虫洞穿梭
- TS 设计模式08 - 发布订阅模式
- GrowingIO 数据采集 iOS SDK 测试实践
- Kubernetes 1.19.0——Pod(2)
- 极速40分钟写出SQLite数据展示与导出功能【技术创作101训练营】
- opencv cudacodec VideoReader 报错
- Flutter中富文件标签的解决方案
- JDK 15已发布,你所要知道的都在这里!
- [Concent速成] (1) 定义和共享模块状态