编程之问题(一)静态方法不能访问非静态成员

package text;
/**
*

  • @author shuaizai
    *模拟简单的计算器。定义名为Number的类,其中有两个整形数据成员n1和n2。
    *编写构造方法,赋予n1和n2初始值,再为该类定义加(addition)、减(subtration)、乘(multiplication)、
    *除(division)等公有成员方法,风别对两个成员变量执行加,减,乘,除的运算。
    *在main方法中创建Number类的对象,调用各个方法,并显示计算结果。
    /
    public class text02 {
    public static void main(String[] args) {
    Number operation= new Number(34,45);
    System.out.println(operation);
    System.out.println(operation.addition(34, 45));
    System.out.println(operation.division(34, 45));
    System.out.println(operation.multiplication(34, 45));
    System.out.println(operation.subtration(34,45));
    }
    class Number{
    int n1;
    int n2;
    public Number(int n1,int n2) {
    super();
    this.n1=n1;
    this.n2=n2;
    }
    public int addition(int n1,int n2) {
    return n1+n2;
    }
    public int subtration(int n1,int n2) {
    int k;
    if(n1<n2) {
    k=n2-n1;
    }else {
    k=n1-n2;
    }
    return k;
    }
    public int multiplication(int n1,int n2) {
    return n1
    n2;
    }
    public double division(int n1,int n2) {
    if(n10||n20) {
    return 0;
    }else if (n1<n2) {
    n1=n2;
    return n1/n2;
    }
    return n1/n2;
    }
    }
    }

在这里插入图片描述

在编写程序最后一步出现上面问题:
No enclosing instance of type text02 is accessible. Must qualify the allocation with an enclosing instance of type
text02
不能访问text02类型的封闭实例。必须使用类型的封闭实例限定分配
text02

经过一番摸索思考,我了解到出现上面问题的原因是:
我在静态方法内调用了非静态对象,为什么静态方法不能直接访问非静态成员呢?
静态成员是在JVM的ClassLoader加载类的时候初始化的,而非静态成员是在创建对象,也就是new操作的时候才初始化的。类加载的时候初始化的静态成员已经分配内存空间,所以可以访问,而非静态成员还没有通过new创建对象而进行初始化,所有当然不能访问了。
解决方案:

    1.将动态内部类改为静态(public static class)。

    2.将内部类改为外部类。

    3.别用静态main方法调用。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值