由于是static的,意味着: 1. 要创建静态嵌套类的对象,并不需要其外围类的对象; 2. 不能够从静态内部类的对象中访问外部类的非静态成员。
public class Invoice { private static class Item{ String description; int quantity; } public static void main(String[] args){ Invoice.Item item = new Invoice.Item(); //实例化一个静态内部类 } }Item类定义为private,所以只有Invoice才能够访问到它,所以不需要操心Item内部的实例变量改为private。
内部类不能声明静态成员,如果内部类有静态成员,那么static的含义将变得模糊,将意味着虚拟机中只有一个实例,还是每个外部对象只有一个实例?
public class Network { public class Member{ private String name; private ArrayList<Member> friends; public Member(String name){ this.name = name; friends = new ArrayList<>(); } public void leave(){ members.remove(this); //访问了外部的实例变量 } } private ArrayList<Member> members; public Member enroll(String name){ Member newMember = new Member(name); //这里可以是因为enroll不是static的 members.add(newMember); return newMember; } public static void main(String[] args){ Network network = new Network(); Network.Member fred = network.enroll("fred"); Network.Member tom = network.new Member("tom"); //实例化一个内部类需要先生成一个外部类的实例对象,通过外部类的实例对象生成内部类对象 } }