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 n1n2;
}
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方法调用。