java-无法从上下文中引用非静态变量(初学者)

问题描述

无法从上下文中引用非静态变量(初学者)

public class TestExtend {
class A {
protected void print(String s){
System.out.println(s);
}
A() {print("A()");}
public void f() {print("A:f()");}
}

class B extends A {
B() {print("B()");}
public void f() {print("B:()");}

}
public static void main (String[] args) {
B b = new B(); --错误行,这行代码有问题
b.f();
}

}

解决方案

静态内部类的用法,你想要在类的静态方法中使用内部类的话,那么需要将内部类定义成静态的,不然是找不到内部类的,因为不声明static的话,内部类只会在TestExtend对象创建之后才会生成。你可以试一下如下的代码:

 public class TestExtend {
    static class  A {
        protected void print(String s){
            System.out.println(s);
        }
        A() {print("A()");}
        public void f() {print("A:f()");}
    }
    static class  B extends A {
        B() {print("B()");}
        public void f() {print("B:()");}
    }
    public static void main (String[] args) {
        B b = new B();
        b.f();
    }
}

解决方案二:


class A {
protected void print(String s){
System.out.println(s);
}
A() {print("A()");}
public void f() {print("A:f()");}
}
class B extends A {
B() {print("B()");}
public void f() {print("B:()");}
}
放在
public class TestExtend外面

解决方案三:

因为B类是TestExtend类的内部类,而内部类定义语法是要求有宿主对象的,修正
TestExtend outer=new TestExtend();
B b=outer.new B();

解决方案四:

class A和class B是一个内部类,内部类就相当于类的属性,java在静态方法内不能访问非静态属性和非静态方法。你可以吧你的mian方法改成
public static void main (String[] args) {
B b = new TestExtend ().new B(); --错误行,这行代码有问题
b.f();
}
但要注意访问权限。

时间: 2024-11-08 22:26:56

java-无法从上下文中引用非静态变量(初学者)的相关文章

初学java遇到无法从静态上下文中引用非静态变量错误

问题描述 public class Persion1{class Persion{int id;int age=20;Persion(){};Persion(int _id,int _age){id=_id;age=_age;}}class Dog {int id;int age;int get_id(){return id;}int get_age(){return age;} }Persion Tom=new Persion();Persion Jim=new Persion(2,15);D

代码- java中无法从静态上下文中引用非静态变量,怎么回事?

问题描述 java中无法从静态上下文中引用非静态变量,怎么回事? 是我调用的方法不对,我应该怎么改呢 代码如下: switch(ope){ case "+": res=sum(num1,num2); break; case "-": res=minus(num1,num2); break; case "*": res=mul(num1,num2); break; case "/": res=div(num1,num2); br

hashmap-java初学中,遭遇无法从静态上下文中引用非静态 变量 this

问题描述 java初学中,遭遇无法从静态上下文中引用非静态 变量 this import java.util.*; public class ComicBooks { public ComicBooks(){ } /** * @param args the command line arguments */ public static void main(String[] args) { // TODO code application logic here HashMap quality =

static-无法从静态上下文中引用非静态 方法问题怎么解决?

问题描述 无法从静态上下文中引用非静态 方法问题怎么解决? 10C 以下代码老是提示Error:(68 36) 错误: 无法从静态上下文中引用非静态 方法 getImage(String),怎么解决? public class ImageService { // 获取网络图片的数据 public static byte[] getImage(String picturepath) throws Exception { URL url = new URL(picturepath); HttpURL

java中为什么静态方法里面必须打印静态变量,

问题描述 java中为什么静态方法里面必须打印静态变量, java中为什么静态方法里面必须打印静态变量, 静态方法为什么无法打印普通变量 解决方案 那说明你还是没弄清楚静态和非静态的创建时机,变量有类变量和实例变量,也就是静态变量和非静态变量,类加载的时候就加载类变量也可以说是类自己的变量,而实例变量只有在实例化的时候才被创建,所以在调用静态方法的时候还没有创建实例变量,你怎么能调用实例变量呢 解决方案二: 每个实例变量都有实例成员: class A { public int i; static

asp.net中静态变量和非静态变量的区别

静态变量:静态变量使用 static 修饰符进行声明在所属类被装载时创建通过类进行访问所属类的所有实例的同一静态变量都是同一个值非静态变量:不带有 static 修饰符声明的变量称做非静态变量在类被实例化时创建通过对象进行访问同一个类的不同实例的同一非静态变量可以是不同的值示例: [复制到剪贴板]CODE: using System;using System.Collections.Generic;using System.Text;namespace Example01{    class P

vb-VB编译时,提示“局部,非静态变量太多”

问题描述 VB编译时,提示"局部,非静态变量太多" 删除了几个窗体,再编译时突然提示:"局部,非静态变量太多" Public Function DealMileageNew(ByRef capacity As truckStat0, ByVal i As Integer, ByVal j As Integer) On Error GoTo Err_Out Dim lsTruck As truckStat0, lsTruck2 As truckStat0 Dim No

final修饰的非静态变量

问题描述 final修饰的非静态变量除了在声明处或构造函数中初始化,可以在其他地方初始化吗或者说只要在构造函数之前的任何允许的地方都可以初始化,谢谢 解决方案 还可以在块代码处,比如class A { final int a; { a =5; }}其他都不可以了解决方案二:楼上的正解解决方案三:因该是只能在声明处和构造函数初始化

字段初始值设定项无法引用非静态字段 方法或属性

问题描述 请问,定义这个sum变量时候,为什么不能访问english与math变量但是在下面的方法中却可以访问english与math变量,请问这个是为什么.谢谢 解决方案 解决方案二:http://www.cnblogs.com/bluestorm/p/3432190.html解决方案三:上面是类成员定义,下面是变量定义,含义完全不同解决方案四:定义在类下面的全局变量,实际上是在类的构造函数里面初始化的因为math和english还没有初始化值,所以就无法在别的地方使用(C#规定的)你写的相当