`
longming_xu
  • 浏览: 84858 次
  • 性别: Icon_minigender_1
  • 来自: 青岛
文章分类
社区版块
存档分类
最新评论

java初学者遇到的小问题:无法从静态上下文中引用静态方法/变量(两种解决办法)

阅读更多
java初学者经常会遇到的问题:无法从静态上下文中引用非静态变量

?non-static variable mainframe cannot be referenced from a static context
即在静态方法中不能引用非静态变量
为什么?

因为我们知道静态的方法可以在没有创建实例时使用,而申明为非静态的成员变量是一个对象属性,它只有在对象存在时引用,因此如果在对象未创建实例时我们在静态方法中调用了非静态成员方法自然是非法的,所以编译器会在这种时候给各错误.

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


class HelloWorld
{
int a1 = 6;

public static void main(String[] args)
{
 
   System.out.print(a1);
}
}


编译时报如下错:

HelloWorld.java:7: 无法从静态上下文中引用非静态 变量 a1
                System.out.print(a1);
                                 ^
1 错误

解决办法有两种,这是两种不同的思维方式,但结果却是一样的,殊途同归的道理:

第一种:既然我们无法在静态上下文中引用非静态变量/方法,那么我们就顺着思路想,是不是在静态上下文中引用静态变量/方法就可以了(YES);
class HelloWorld
{
static int a1 = 6;

public static void main(String[] args)
{
   System.out.print(abc.a1);
}
}

第二种:一开始我们提到了,静态方法/变量可以在未创建实例时使用,而非静态成员变量/方法只能在创建了实例之后才可以使用

因为非静态的变量a1没有实例化,改为如下程序

class HelloWorld
{
int a1 = 6;

public static void main(String[] args)
{
   HelloWorld abc=new HelloWorld();
   System.out.print(abc.a1);
}
}



编译通过。
1
0
分享到:
评论

相关推荐

    单链表 数据结构 静态变量、静态方法的使用

    用c++的类实现,对于c++初学者帮助较大,主要熟悉静态变量 静态方法的使用 将练习与数据结构相结合

    java初学者必看

    最近正在学习Java,也买了很多的有关Java方面的书籍,其中发现《跟我学Java》这本书,都的很不错啊,所以顺便拿电脑把这本书的目录敲了下来,与大家分享。尤其是那些和我一样初学Java的朋友们,看看哪一节对你有用,...

    java学习笔记 初学者必读

    7.4. 静态变量,方法和类 7-20 7.5. Singleton模式 7-22 7.6. final关键字 7-22 7.6.1. final变量不能被改变; 7-22 7.6.2. final方法不能被改写; 7-23 7.6.3. final类不能被继承; 7-23 7.6.4. String 类 7-23 7.7. ...

    MFC静态框图片轮播(利用添加静态框的变量)

    简单的MFC静态框图片轮播(利用添加静态框的变量),初学者的练习资料!

    完全免费的Java/jsp开发编辑工具FirstJava2

    这个工具是一个Java开发编辑工具,当然比记事本要好,主要给java初学者和一般的个人开发者使用,使他们更快学好JAVA技术.它适合学习java用途. 目前主要功能有java工程,包,类的创建和保存,java代码和jsp页面的编辑,会有...

    JAVA反射机制的入门代码

    代码为JAVA反射的一个DEMO,适合初学者临摹学习,还附有properties的创建方法,比较基础。

    疯狂JAVA讲义

    1.6.3 初学者容易犯的错误 18 1.7 垃圾回收机制 20 1.8 何时开始使用IDE工具 21 学生提问:老师,我想学习Java编程,到底是学习Eclipse好呢,还是学习JBuilder好呢? 21 1.9 本章小结 22 本章练习 22 第2章 ...

    21天学通Java-由浅入深

    134 7.5.1 什么是静态变量 134 7.5.2 静态变量的访问 135 7.5.3 什么是静态常量 137 7.6 综合练习 139 7.7 小结 140 7.8 习题 140 第8章 继承(精彩视频:72分钟) 141 8.1 什么是继承 141 8.1.1 类的继承 142 8.1.2...

    c/c++ 学习总结 初学者必备

    用变量a给出下面的定义 a) 一个整型数(An integer) b) 一个指向整型数的指针(A pointer to an integer) c) 一个指向指针的的指针,它指向的指针是指向一个整型数(A pointer to a pointer to an integer) d...

    java技术-让学员少走弯路

    Java环境变量的配置,初学者常犯的问题,Java语言的基本数据类型和Java的语句。 Java面向对象编程,面向对象编程和面向过程编程的区别,我们如何才能掌握面向对象的编程,类和对象的关系;讲解了Java中的构造、重载...

    Java 2核心技术,卷I:基础知识(第七版).part1

    Java基本的程序设计结构 3.1 一个简单的Java应用程序 3.2 注释 3.3 数据类型 3.4 变量 3.5 运算符 3.6 字符串 3.7 输入输出 3.8 控制流程 3.9 大数值 3.10 数组 第4章 对象与类...

    Java 2核心技术,卷I:基础知识(第七版).part2

    Java基本的程序设计结构 3.1 一个简单的Java应用程序 3.2 注释 3.3 数据类型 3.4 变量 3.5 运算符 3.6 字符串 3.7 输入输出 3.8 控制流程 3.9 大数值 3.10 数组 第4章 对象与类...

    Java 2核心技术,卷I:基础知识(第七版).part3

    Java基本的程序设计结构 3.1 一个简单的Java应用程序 3.2 注释 3.3 数据类型 3.4 变量 3.5 运算符 3.6 字符串 3.7 输入输出 3.8 控制流程 3.9 大数值 3.10 数组 第4章 对象与类...

    java_lessons:面向初学者的 Java 语言课程(计划和一些说明)

    java_课程大概计划: 。 (在一般课程中)说出为什么使用 java,课程中会讲什么。 要求安装jre、jdk、ide 。 , javac, java, ; ; - 原始类型、二元运算符、局部变量、默认值、增量和减量、 ; - 、 ; ; ; ; Java...

    C程序设计语言 很适合初学者和再学者学习和复习

    4.6 静态变量 4.7 寄存器变量 4.8 分程序结构 4.9 初始化 4.10 递归 4.11 C预处理程序 4.11.1 文件包含 4.11.2 宏替换 4.11.3 条件包含 第5章 指针与数组 5.1 指针与地址 5.2 指针与函数变元 5.3 指针与...

    FirstJava2完全教材

    这个工具是完全免费的Java/jsp开发工具FirstJava2,绿色软件,无需安装,主要给java初学者和一般的个人开发者使用,使他们更快学好JAVA技术.请不要用于商业用途,它适合学习用途.与FirstJava1.1相比,修改许多问题和功能,...

    java基础笔记

    java初学者的学习笔记,很详细。 目录 0 第一节 7月15日 2 一、 IT行业相关介绍 2 二、C、C++和Java语言的比较 2 三、 JDK基础介绍 2 四、 面向对象与面向过程的比较 2 五、 Java相关介绍 2 六、 Path和Classpath...

    C语言程序设计标准教程

    适于初学者 第五章:函数 概述  在第一章中已经介绍过,C源程序是由函数组成的。 虽然在前面各章的程序中都只有一个主函数main(), 但实用程序往往由多个函数组成。函数是C源程序的基本模块, 通过对函数模块的...

    Java/JavaEE 学习笔记

    作者在杰普学习时的学习笔记,是J2ee初学者必备手册,是大家学习J2EE开发的很好的参考笔记。 Java/JavaEE 学习笔记 内容目录: Unix 学习笔记..........7 一、Unix前言............7 二、Unix基础知识....7 三、...

Global site tag (gtag.js) - Google Analytics