广告
返回顶部
首页 > 资讯 > 后端开发 > JAVA >无法从静态上下文中引用非静态方法
  • 527
分享到

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

java 2023-09-04 18:09:19 527人浏览 泡泡鱼
摘要

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

原因:

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

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

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

实例:

一、

  1 public class Solution {  2     public static void main(String[] arvgs){  3         System.out.println("请输入股票价格");  4         int[] profit = {1, 2, 3, 4, 5, 6};  5         6         maxProfit(profit, 5); // 报错  7           8     }  9     public int maxProfit(int prices[], int day){ 10         int maxprofit = 0; 11         for (int i = 0; i < day - 1; i++){ 12             for (int j = i + 1; j < day; j++) { 13                 int profit = prices[j] - prices[i]; 14                 if (profit > maxprofit)   15                     maxprofit = profit; 16             }        17         }    18         return maxprofit; 19     }    20 }   ~          

由于main方法其实是一个静态方法,而maxProfit方法并没有实例化,

所以会报错 错误: 无法从静态上下文中引用非静态 变量 this

  1 public class Solution {  2     public static void main(String[] arvgs){  3         System.out.println("请输入股票价格");  4         int[] profit = {1, 2, 3, 4, 5, 6};  5         Solution solution = new Solution();  6         solution.maxProfit(profit, 5);  7           8     }  9     public int maxProfit(int prices[], int day){ 10         int maxprofit = 0; 11         for (int i = 0; i < day - 1; i++){j 12             for (int j = i + 1; j < day; j++) { 13                 int profit = prices[j] - prices[i]; 14                 if (profit > maxprofit)   15                     maxprofit = profit; 16             }        17         }    18         return maxprofit; 19     }    20 }   ~          

二、


第一种:将需要调用的方法/变量设置成static,就可以直接调用了

第二种:先创建一个实例对象,通过实例对象调用non-static方法就可以变成直接调用的变量/方法

三、成员内部类中不能有静态方法和属性,内部类中有static成员时内部类也必须声明为static。

package com.bjsxt.thread.thread_extends;//线程一://乌龟 100    兔子100public class MyThreadNew {    public static void main(String[] args) {        //兔子        ThreadTest threadTest = new ThreadTest();        threadTest.setName("兔子");        threadTest.start();        //乌龟        ThreadTest threadTest1 = new ThreadTest();        threadTest1.setName("乌龟");        threadTest1.start();    }    class ThreadTest extends Thread {        @Override        public void run() {            // Thread.currentThread().getName():获取当前线程的名字            for (int i = 1; i <= 100; i++) {                System.out.println(Thread.currentThread().getName() + "跑了" + i + "米");            }        }    }}

改正方法,把ThreadTest类放成一个单独的类

package com.bjsxt.thread.thread_extends;//线程一://乌龟 100    兔子100public class MyThreadNew {    public static void main(String[] args) {        //兔子        ThreadTest threadTest = new ThreadTest();        threadTest.setName("兔子");        threadTest.start();        //乌龟        ThreadTest threadTest1 = new ThreadTest();        threadTest1.setName("乌龟");        threadTest1.start();    }}    class ThreadTest extends Thread {        @Override        public void run() {            // Thread.currentThread().getName():获取当前线程的名字            for (int i = 1; i <= 100; i++) {                System.out.println(Thread.currentThread().getName() + "跑了" + i + "米");            }        }    }

来源地址:https://blog.csdn.net/m0_54250366/article/details/128822574

--结束END--

本文标题: 无法从静态上下文中引用非静态方法

本文链接: https://www.lsjlt.com/news/394087.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 无法从静态上下文中引用非静态方法
    原因: 用static修饰的方法称为静态方法,修饰变量则为静态变量,又分别叫做类方法或者类变量。  静态方法中不能直接调用非静态方法。因为非静态方法不是独立存在的,它是依附于对象存在——即只有申明了对象,才能通过对象调用。而静态方法则可以直...
    99+
    2023-09-04
    java
  • java: 无法从静态上下文中引用非静态 方法
    Java中静态上下文中无法引用非静态变量的解决办法: 一、为什么不能引用? 今天编写代码遇到 non-static variable mainframe cannot be referenced from a static context ...
    99+
    2023-10-08
    java 开发语言
  • springboot无法从静态上下文中引用非静态变量怎么解决
    这篇文章主要介绍了springboot无法从静态上下文中引用非静态变量怎么解决的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇springboot无法从静态上下文中引用非静态变量怎么解决文章都会有所收获,下面我们...
    99+
    2023-06-08
  • java中静态方法与非静态方法的区别
    静态方法与静态成员变量一样,属于类本身,在类装载的时候被装载到内存中,不自动进行销毁,会一直存在内存中,直到JVM关闭。非静态方法又称实例化方法,属于实例对象,实例化之后才会分配内存,必须通过类的实例来引用,当实例对象被JVM回收之后,也跟...
    99+
    2018-06-09
    java基础 java 静态方法 非静态方法 区别
  • java中什么是静态方法和非静态方法
    本篇文章为大家展示了java中什么是静态方法和非静态方法,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。常用的java框架有哪些1.SpringMVC,Spring Web MVC是一种基于Java的...
    99+
    2023-06-14
  • php中静态方法怎么访问非静态方法
    本篇内容主要讲解“php中静态方法怎么访问非静态方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“php中静态方法怎么访问非静态方法”吧!PHP中静态方法可以访问非静态方法;可以先实例化对象,然...
    99+
    2023-06-29
  • php中静态方法可以访问非静态方法吗
    本文操作环境:Windows10系统、PHP7.1版、Dell G3电脑。php中静态方法可以访问非静态方法吗如果我们调用了非静态方法会怎么样呢?首先做测试。<php class test{ function test() {...
    99+
    2021-05-29
    php
  • C#中静态方法与非静态方法有什么区别
    C#中静态方法与非静态方法有什么区别,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。C#静态方法与非静态方法比较一、C#静态成员:①静态成员属于类所有,非静态成员属于类的实例...
    99+
    2023-06-17
  • JavaScript——为什么静态方法不能调用非静态方法
    个人简介 👀个人主页: 前端杂货铺 🙋‍♂️学习方向: 主攻前端方向,正逐渐往全干发展 📃个人状态: 研发工程师,现效力于中国工业软件事业 🚀人生格言: 积跬步至千里,积小...
    99+
    2023-08-30
    javascript 前端
  • WordPress引用静态资源方法
    当我们使用WordPress的时候会遇到引用自己写的静态资源的问题,WordPress引用js、WordPress引用css、WordPress引用图片等等。 一般来说静态资源可以这样去引用: ...
    99+
    2022-10-18
  • vue引用静态图片的方法
    vue引用静态图片的方法:1、使用img标签引用静态图片;2、使用require()引入需要添加的静态图片路径即可。具体操作示例:1、静态图片只有一张,不需要循环遍历显示,即 <img src="../....
    99+
    2022-10-05
  • php中的静态属性和静态方法怎么用
    这篇文章主要介绍“php中的静态属性和静态方法怎么用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“php中的静态属性和静态方法怎么用”文章能帮助大家解决问题。在php中,通过static关键字修饰的...
    99+
    2023-06-26
  • Java中的静态字段和静态方法怎么用
    这篇文章主要介绍了Java中的静态字段和静态方法怎么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。先看看下面这一串代码:public class Mai...
    99+
    2023-06-29
  • 详解python中静态方法staticmethod用法
    在开发的时候, 可以使用类对方法进行封装,如果某一个方法需要访问到对象的实例属性,可以把这个方法封装成一个实例方法。如果某一个方法不需要访问对象的实例属性,但是需要访问到类的类属性,...
    99+
    2022-11-11
  • java中静态方法如何调用
    在Java中,可以通过以下两种方式来调用静态方法:1. 使用类名调用静态方法:可以直接通过类名来调用静态方法,不需要创建类的实例。语...
    99+
    2023-09-14
    java
  • C#中如何使用静态方法
    C#中如何使用静态方法,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。C#静态方法使用中遇到的问题:在源码工程中几乎没有看到什么静态方法,但是在Ms的SQLHelper中几乎全部...
    99+
    2023-06-17
  • 无需插件wordpress生成静态缓存文件的方法
    说起wordpress生成静态缓存的话首先想到的就是WP Super Cache插件,确实如此,大多数的wordpress站长们都在使用. 但是永远都有那些纠结完美派的人,不喜欢用插件的人也十分的多,而今天介绍的非插件搞...
    99+
    2022-06-12
    wordpress 生成静态
  • javascript中如何使用class静态方法
    这篇文章将为大家详细讲解有关 javascript中如何使用class静态方法,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。类相当于实例的原型, 所有在类中...
    99+
    2022-10-19
  • php中的静态方法怎么使用
    这篇“php中的静态方法怎么使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“php中的静态方法怎么使用”文章吧。一、什么是...
    99+
    2023-07-05
  • 如何在javascript中使用静态方法
    这篇文章将为大家详细讲解有关如何在javascript中使用静态方法,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。JavaScript的特点1.JavaScript主要用来向HTML页面添加...
    99+
    2023-06-14
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作