无法从 static 上下文引用非 static 方法

23.10.12:无法从 static 上下文引用非 static 方法 原因是直接引用了 没有给final。 阅读详情
AI摘要

本文介绍了JAVA中静态方法的概念及其使用限制,重点解释了为什么静态方法无法直接调用非静态方法,并给出了具体的代码示例。

作为JAVA初学者总会碰到许多问题,今天这个问题比较基础,但是对于只看了一些书的我来说还是比较困难,通过搜索大致了解到:

1.用static修饰的方法称为静态方法,修饰变量则为静态变量,又分别叫做类方法或者类变量。 
静态方法中不能直接调用非静态方法。因为非静态方法不是独立存在的,它是依附于对象存在——即只有申明了对象,才能通过对象调用。而静态方法则可以直接通过类名调用,而不需要申明对象。因此直接引用非静态方法就会出错。

2.比如常见的main方法都是静态的,必须由static修饰,因此在main方法里调用类的其他非静态方法,都是需要先申明对象,才能用。否则就会出现引用非静态方法的错误。

3.静态方法可以不用创建对象就调用,非静态方法必须有了对象的实例才能调用.因此想在静态方法中引用非静态方法是不可能的,因为它究竟引用的是哪个对象的非静态方法呢?编译器不可能给出答案,因为没有对象啊,所以要报错.

以下给出两段代码,一段是修改前面定义的方法,一段是声明对象。

修改定义方法:

package JAVA4;

import java.util.Random;

public class E02 {
    static Random r = new Random(47);
    public static void compareRand(){//定义为静态方法,就可以在main方法中引用
        int a = r.nextInt();
        int b = r.nextInt();
        System.out.println("a = " + a + " b = " + b);
        if(a<b)
            System.out.println("a < b");
        else if(a>b)
            System.out.println("a > b");
        else System.out.println("a = b");
    }

    public static void main(String[] args) {
        for(int i =0;i<=25;i++)
            compareRand();
    }
}

进行对象声明: 

package JAVA4;

import java.util.Random;

public class E02 {
    static Random r = new Random(47);
    void compareRand(){
        int a = r.nextInt();
        int b = r.nextInt();
        System.out.println("a = " + a + " b = " + b);
        if(a<b)
            System.out.println("a < b");
        else if(a>b)
            System.out.println("a > b");
        else System.out.println("a = b");
    }

    public static void main(String[] args) {
        E02 test = new E02();//声明对象
        for(int i =0;i<=25;i++)
            test.compareRand();//通过test.来调用
    }
}

【实用运维脚本】Windows 批量 TCP 端口检测(tcping 一键巡检) 摘要:本文介绍一款高效的Windows批量TCP端口检测脚本,适配tcpingv0.39工具,实现多服务器一键巡检。脚本具有进度可视化、双日志输出、自动容错等优势,支持注释行过滤和UTF-8编码。 使用仅需三步: 1)下载tcping工具 2)编辑目标列表 3)运行脚本即可自动检测并生成带编号的检测报告。 该方案解决了手动检测效率低、易遗漏的问题,特别适合日常运维中的端口连通性检查,实测稳定可靠,开箱即用。 阅读详情

相关推荐

正交试验实战指南:从PICT工具到混合水平表应用

本文详细介绍了正交试验法在测试设计中的实战应用,从基础概念到PICT工具的高级使用技巧。通过混合水平表设计和工程化实践案例,帮助测试工程师高效解决参数组合爆炸问题,提升测试覆盖率与效率。特别适合兼容性测试和复杂系统验证场景。

weixin_29230865的博客 260

无法从静态上下文中引用非静态方法

静态方法中无法引用非静态方法

m0_54250366的博客 1万+

GNSS-RTK/INS紧组合里,那个‘杆臂改正’到底怎么算?一个公式讲清INS与天线位置的关系

本文深入解析GNSS-RTK/INS紧组合导航系统中的杆臂改正(Lever Arm Correction)原理与实现方法。详细介绍了杆臂效应的物理本质、数学建模及误差扰动分析,揭示了IMU与GNSS天线位置关系的核心公式,并提供了工程实现中的常见误区与验证方法。通过Python代码示例和紧组合量测模型处理流程,帮助开发者准确理解并应用这一关键技术。

weixin_33137081的博客 357

无法从static上下文引用非static方法

1.将鼠标方法报错的地方,按alt+enter,将Person改为静态。2.在class Person前加个static。

2301_79899777的博客 2325

51单片机AHT20-21源代码

传感器输出经过 标定的数字信号,标准 I 2 C 格式。AHT20 配有一个全新设计的 ASIC专用芯片、一 个经过改进的MEMS半导体电容式湿度传感元件和一个标准的片上温度传感元件,其 性能已经大大提升甚至超出了前一代传感器的可靠性水平,新一代温湿度传感器, 经过改进使其在恶劣环境下的性能更稳定。但是现在网上的大多数原码都是针对stm32等的这种多位单片机,而我们都知道51单片机是8位单片机,无法对浮点数进行运算,对32位的整数计算有时候也不是很准确,所以我对网上stm32的例程进行了修改。...

wd0710的博客 4549

架构设计之架构治理

架构治理的本质是“用规则约束复杂性,用流程保障落地,用数据驱动优化”先定目标:明确量化的治理目标,避免盲目行动;立标准:建立覆盖分层、选型、接口、拆分的统一规范,奠定治理基础;强评审:通过架构评审把控设计环节,提前规避风险;全流程:将治理规则贯穿设计、开发、测试、部署、运维全生命周期;重保障:通过组织、流程、工具确保治理落地,而非“纸上谈兵”;持续迭代:随业务与技术演进优化治理规则,避免“一劳永逸”。

xiaolyuh的专栏 811

SpringBoot-无法从static上下文引用同非static方法

摘要:本文针对Java编程中"无法从static上下文引用非static方法"的错误进行分析。问题根源在于试图在static方法中直接调用非static方法。解决方案指出:应通过对象实例调用非static方法,而非直接通过类名调用。关键是要区分变量方法和类型方法的调用方式,在return语句中确保调用的是实例变量的方法而非类方法。

m0_62785037的博客 628

GPU硬件架构与微架构深度解析34-GPU安全架构深度解析

现代GPU不仅是图形处理器,更是高性能计算平台,安全架构设计至关重要。内存加密- 保护数据在传输和存储时的安全安全启动- 确保固件和软件的完整性隔离机制- 防止不同应用间的数据泄露密钥管理- 安全存储和处理加密密钥。

2301_79143213的博客 100

无法从 static 上下文引用非 static 方法 ‘s(int[])‘

关于无法从 static 上下文引用非 static 方法 的问题 原因: 静态方法中不能引用非静态变量 而这里main函数为静态方法 这里有两种解决方法 1.设置其他函数为静态方法 public class arrylist { public static String sa(int[] in){} public static void main(String[] args) { System.out.println(sa(a)); } } 2.实例化调用的静态

BlockCode的博客 4462

ADBC 全面解析:ABAP 开发者玩转 Native SQL 的实战指南

本文介绍了 SAP ABAP 中的 ADBC(ABAP Database Connectivity)技术,它是一种基于 ABAP 面向对象的类库,用于访问 Native SQL 接口。与 Open SQL 和 EXEC SQL 相比,ADBC 具有以下优势:支持特定数据库语法、可访问二级数据库连接、执行多种 SQL 操作且语法更 ABAP 化。文章通过示例展示了 ADBC 的基本用法,包括创建语句对象、执行查询和处理结果集。建议在需要数据库特有功能或二级连接时优先使用 ADBC,同时提供封装类来简化调用。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 308

泰山派rk3566 audio音频基础介绍

本文介绍了嵌入式系统中音频处理的基础知识,重点围绕RK3566平台的音频子系统展开。文章首先解释了音频信号从模拟到数字的转换过程,包括采样率、位深和声道等核心概念。随后详细分析了嵌入式音频开发中的关键接口:I2C用于控制音频编解码器,I2S作为专用音频数据传输总线,以及PCM作为原始音频格式和ALSA设备抽象的双重含义。通过对这些基础概念和接口的解析,为在RK3566平台上进行音频驱动开发和应用调试提供了理论基础。

qq_37077309的博客 294

JAVA static 方法 无法从静态上下文中引用非静态方法 和属性

一个方法用static 修饰,便是静态方法或者类方法。 静态方法不属于特定对象。 由于static方法在加载class时首先完成,比构造方法早,此时非static的属性和方法还没有完成初始化。 所以: 在static方法内部无法直接调用非static的方法,可以通过先实例化对象,再通过该对象调用非static方法, 在非static方法中可以调用static方法,通过直接调用 方法名()...

wenyunick的博客 5206

Weka学习笔记01:初探Weka世界

下载、安装和启动Weka、Weka数据格式

howard2005的专栏 1471

无法从 static 上下文引用非 static 方法报错解决

无法从 static 上下文引用非 static 方法报错解决

zyp3295613196的博客 1969

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

无法从 static 上下文引用非 static 方法 ‘toModel(com.ayetongzhi.dto.ReadArticleDTO)‘

这个错误是因为你在一个静态上下文中(例如静态方法或静态代码块)尝试调用一个非静态方法。非静态方法需要一个实例来调用,而静态方法不需要实例,因此在静态方法中不能直接调用非静态方法。

qq_42816270的博客 416

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Java报错Cannot make a static reference to the non-static method——无法从静态上下文中引用非静态方法。

Java报错Cannot make a static reference to the non-static method show() from the type Student怎么解决? Java如何解决无法对非静态方法的进行静态引用?

m0_54066656的博客 7083

无法从 static 上下文引用非 static 方法 ‘findByAlbumName(java.lang.String)‘

此时报错,由于此方法是抽象方法,所以先如图创建对象。将代码改成自己写的对象的。

weixin_53383146的博客 324

无法从 static 上下文引用非 static 方法 ‘getSkuId()‘,其实就是你的名字错了,大小写注意一点

根据代码上下文,错误出现在buildReduceInventoryDto方法中调用WmsSubpackageLineVo.getSkuId()和getSubpackNum()的方式。非静态方法调用错误:getSkuId()和getSubpackNum()是WmsSubpackageLineVo类的实例方法(非static),不能直接通过类名调用。参数使用错误:应该使用当前方法参数中的wmsSubpackageLineVo对象来调用这些方法。

zw45607076875的博客 195

Java中静态上下文中无法引用非静态变量的解决办法以及偶然发现的stack overflow

Java中静态上下文中无法引用非静态变量的解决办法: 一、为什么不能引用? 初学者经常会遇到 non-static variable mainframe cannot be referenced from a static context  因为静态类的方法可以在没有创建实例对象时直接调用,而非静态的成员变量是一个对象属性,只有在对象存在时才可以引用。因此,如果在对象未创建实例时,我们在静...

会飞的小小猪的博客 1万+

由浅入深理解java的奇妙报错之无法从 static 上下文引用 ‘XXX.this‘

本文探讨了Java中静态方法(如main)直接实例化非静态内部类时的常见报错问题。通过ClassTest和Person类的示例,解释了在静态上下文中无法直接创建非静态内部类实例的原因:main作为静态方法运行时,其所在外部类ClassTest并未自动实例化,导致内部类Person找不到所需的"this"引用(即指向外部类实例的指针)。文章强调非静态内部类的实例化必须依赖外部类实例,并澄清了main方法作为独立入口无需外部类实例即可运行的特性,揭示了初学者常见的关于类加载顺序的误解。

alZerNest的博客 201

Error:java: 无法从静态上下文中引用非静态 变量 this

Error:java: 无法从静态上下文中引用非静态 变量 this 分析: 出现这种错误首先先分清什么是静态什么是非静态,它们之间的关系是什么? 静态方法中不能引用非静态变量 非静态方法中能引用静态变量 其次要明白类与类之间要分开定义,不能嵌套,这是语法规定 错误原因代码如下: public class Demo { public static void main(String[] arg...

纳兰青华的博客 4044

Java错误记录(1)引用static变量

Error: java: 无法从静态上下文中引用非静态 作者:tiandawangliang 来源:优快云 原文:https://blog.youkuaiyun.com/tiandawangliang/article/details/50469318 版权声明:本文为博主原创文章,转载请附上博文链接! 分析 main函数是静态函数,在runoob.com上查看修饰符static含义 Static修饰符 静态...

tomatoOu的博客 245

static访问规则全拆解:从JVM内存看懂静态上下文为何不能直接调非静态成员

在Java编程中,static关键字是高频语法点之一,但许多开发者对静态方法与普通成员之间的访问限制只停留在“静态不能访问非静态”的结论上。从JVM内存布局来看,静态变量在类加载时分配且全局共享,而实例变量则随对象创建而独立存在。静态方法体内不持有this引用,因此无法定位具体对象的成员,编译器便会报出“Cannot make a static reference to non-static method/field”。理解这套规则,有助于掌握工具类设计、静态导入、方法隐藏以及并发共享等工程实践。实际开发中

weixin_33428613的博客 274

Java 报错:无法从静态上下文中引用非静态方法

在 Java 编程中,Cannot make a static reference to the non-static method 错误通常发生在静态上下文中直接调用非静态方法时。静态方法属于类本身,而非静态方法依赖于对象实例。要解决此问题,可以通过创建对象实例来调用非静态方法,或者将方法声明为静态。最佳实践包括理解静态与非静态的区别,避免在静态上下文中使用非静态资源,并根据方法逻辑合理选择静态或非静态声明。通过这些方法,可以有效避免此类错误,提升代码质量。

C_V_Better的博客 1811

java:无法从静态上下文中引用非静态方法

编辑以下代码: public class t{ public int i; public void fun(){} public static void main(String...args){ i=3; fun(); } } 编译: javac t.java 得到以下报错: 原因: 在main函数中对类内部成员变量和方法进行调用是错误的,main方法为静态方法,而java中静态成员方法中不能引用非静态方法和变量 解决方法: 方法一:在构造函数中调用非静态方法和成员变量 public

m0_60352504的博客 1万+
上一篇: On Java 8 第四章笔记
下一篇: Mac微信防撤回安装教程——已失效
士千i
博客等级 码龄16年 9粉丝 19原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值