什么是静态内部(Static Inner)类,语法要注意什么?
Posted mark-to-win
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了什么是静态内部(Static Inner)类,语法要注意什么?相关的知识,希望对你有一定的参考价值。
4静态内部类(Static Inner Classes)(视频下载) (全部书籍)
马克-to-win:这里的内部类的static,意思是它可以不用实例化外部类,就自己单独被实例化,单独存在(有点像生活中的办公室和办公桌(独立于办公室,办公桌也可以存在)),静态方法不就不用实例化类,直接用吗?就实例化而言,静态内部类和外层类之间完全没有任何关系,相互独立。谁爱怎么样,就怎么样!谁想实例化谁就实例化, 不管对方的感受。当然要想让它们有关系,也可以,见下面例子中的tc.core=nc;
重要语法:马克-to-win:1)静态内部类里的任何方法(静态或非静态)不允许访问外层类里的实例属性或方法。(因为外层类本身可能没有被实例化),想访问通过下面例子中的tc.core=nc。2)静态属性和方法无论在外层类还是静态内部类, 都可以被任意调用(对方或自己或测试类)。
例2.4
class ShellMark_to_win {
static int ss_i ;
private int si_k;
Core core;
static class Core {
static int cs_m ;
int ci_j;
public Core(int j) {
ss_i = 2;//可以直接访问外层类的静态域
cs_m=3;
//k=9;//马克-to-win:compile error,static class can not refer to a
non-static
field,因为静态内部类可以脱离外层实例而单独存在,静态内部类可能已经被实例化,而外层类没有被实例化,外层的实例变量就不能被访问。像原来的静态
方法似的,不能访问实例变量
this.ci_j = j;
}
public String toString()
{
//ShellMark_to_win.changTopValue();//可以访问外层类的静态方法
//insMethod();//不能从静态类里访问外层类的实例方法。
return "ci_j=" + ci_j + ";ss_i=" + ss_i+" ;cs_m="+cs_m;//
马克-to-win:这里不能写+k,因为cocs_mpile error,static class can not refer to a
non-static field,像原来的静态方法似的,不能访问实例变量
}
static int changValue()
{ //inscs_method();//不能从静态类里访问实例方法。
cs_m=cs_m+2;
ss_i=ss_i+2;
//k=9;//马克-to-win:这里不能写+k,因为compile error,static class can not refer to a non-static field,像原来的静态方法似的,不能访问实例变量
// ShellMark_to_win.changTopValue();完全可以调用
System.out.println("cs_m is "+cs_m+" ss_i is"+ss_i);
//ci_j=ci_j+2;//错误, 静态方法无法访问非静态变量
return cs_m;
}
}
public String toString() {
//Core.changValue();//可以访问静态内部类的静态方法
return "si_k=" + si_k + ";ss_i=" + ss_i+"cs_m is "+Core.cs_m;
}
void insMethod()
{
}
static int changTopValue()
{
ShellMark_to_win.Core.cs_m=ShellMark_to_win.Core.cs_m+2;
ss_i=ss_i+2;
return ss_i;
}
}
public class Test {
。。。。。。。。。。。。。。。。。
详情请进:http://www.mark-to-win.com/index.html?content=JavaBeginner/javaUrl.html&chapter=JavaBeginner/JavaBeginner4_web.html#WhatIsStaticInnerClass
以上是关于什么是静态内部(Static Inner)类,语法要注意什么?的主要内容,如果未能解决你的问题,请参考以下文章
Java面试题11 什么是内部类?Static Nested Class 和 Inner Class的不同。