栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

作为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(ab)
            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(ab)
            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.来调用
    }
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/781742.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号