- 定义静态内部类:在定义内部类的时候,可以在其前面加上一个权限修饰符static。此时这个内部类就变为了静态内部类。不能从嵌套类的对象中访问非静态的外围类对象。
- 意义,与普通的内部类还有一个区别:
A 普通内部类的字段的字段与方法,只能放在类的外部层次上,所以普通的内部类不能有static数据和static字段,也不能包含嵌套类。但是在嵌套类里可以包含所有这些东西。也就是说,在非静态内部类中不可以声明静态成员,只有将某个内部类修饰为静态类,然后才能够在这个类中定义静态的成员变量与成员方法。
B 另外,在创建静态内部类时不需要将静态内部类的实例绑定在外部类的实例上。普通非静态内部类的对象是依附在外部类对象之中的,要在一个外部类中定义一个静态的内部类,不需要利用关键字new来创建内部类的实例。静态类和方法只属于类本身,并不属于该类的对象,更不属于其他外部类的对象。一下代码来自网络:package Chapter10; public class StaticInternal { private static String name = "\"\""; public static void setStatic(String n) { // 外部类的非静态方法 System.out.println("[现在访问的是外部类的静态方法!]"); name = n; } static class InnerClass_2 { // 静态内部类开始 String address, mail; // 声明String类型变量 long phoneNum; // 声明long类型变量 int qq; // 声明int类型变量 static void getStatic() { // 静态内部类的静态方法 System.out.println("[访问外部类的静态变量] name = " + name); setStatic("尹继平"); // 访问外部类的静态方法 } // 静态内部类的非静态方法 public void setString(String address, String mail) { System.out.println("1.静态内部类的带String型参数的非静态主法"); this.address = address; this.mail = mail; } public void setInt(long phoneNum, int qq) { System.out.println("2.静态内部类的带int型参数的非静态主法!"); this.phoneNum = phoneNum; this.qq = qq; } } // 静态内部类结束 public void setValue() { // 外部类访问静态内部类的静态成员:内部类.静态成员 InnerClass_2.getStatic(); // 访问静态内部类的静态方法 InnerClass_2 inner = new InnerClass_2(); // 实例化对象 inner.setString("北京昌平区沙河镇", "yinjiping@sina.com"); // 访问静态内部类的非静态方法 inner.setInt(89653310, 313557706); System.out.println("\n外部类访问静态内部类的结果如下:"); System.out.println("姓名:" + this.name); System.out.println("住址:" + inner.address); System.out.println("联系电话" + inner.phoneNum); System.out.println("E-mail:" + inner.mail); System.out.println("QQ号码:" + inner.qq); } public static void main(String[] args) { // java程序主入口处 StaticInternal sin = new StaticInternal(); sin.setValue(); // 调用方法 } }
JAVA静态内部类
最新推荐文章于 2024-01-09 15:15:49 发布