文本内容:
关键字与内部类
4.3static在中,定义了一个关键字,它用于修饰类的成员,如成员变量,成员方法以及代码块等;本节我们将对的语法格式和使用方法以及内部类的使Java static用方法进行讲解static在定义一个类时,只是在描述某类事物的特征和行为,并没有产生具体的数据;通过关键字创建该类的实例对象后,系统才会为每个对象分配空间,存储各自的数据new有时候,我们希望某些特定的数据在内存中只有一份,而且能够被一个类的所有实例对象所共享例如类所有学生共享同一个班级名称,此时完全不必在每个学生对象所占用的内存空间中都定义一个变量来表示学校名称,而可以在对象以外的空间定Student义一个表示学校名称的变量让所有对象来共享;如图所示,我们在类中定义了一个字符类型的班级变量;在使用方法生成两个类对象和后,和可以访问Student staticstrCls类的静态变量;new Student si s2si s2StudentstrCls如图所示是静态变量定义的实例,在类中定义了一个字符类型的班级变量;定义了一个类的构造方法,参数只包括姓名和学号;1Student static在类中定义了一个的方法,在类的方法strCls Student中可以访问静态变量;Student introduce Student introduce如图所示是静态变量访问的实例,使用方法生成两个类对象strCls和调用构造方法的时候传入参数只有姓名和学号;2new Student虽然没有传入班级这个参数,但是类对象和可以调用的si s2,静态变量输出结果中可以看到,类对象和的班级名都是一样Student si s2Student的互联班”;strCls,Studentsi s2我们还可以在其他类中通过类名,静态变量来共享访问类中定义的静态变量,“193-2同样可以输出班级的名称有时我们希望在不创建对象的情况下就可以调用某个方法,也就是使该方法不必和对象绑在一起;要实现这样的效果,只需要在类中定义的方法前加上关键字即可,我们称这种方法为静态方法static如图所示是静态方法的调用结构内存图,在类中定义了一个静态方法;Stu在任何类中,我们都不需要创建类对象,都可以通过调用introduce这个静态方法;Stu Stu.introduce如图所示是静态方法定义的实例,在类中定义了一个的方法;在类的静态方法中只能访问静态变量;1Student publicstatic如图所示是静态变量访问的实例,不需要生成类对象,使用类名,静态introduceStuintroduce strCls方法名就可以访问类类的静态方法,输出结果中可以看到输出班级的名称;2StuStu单例模式是中的一种设计模式,它是指在设计一个类时,需要保证在整个程序运行期间针对该类只存在一个实例对象Java比如现在要设计一个类表示网络接发送队列,程序只需要一个实例对象否则就浪费了网络资源;如图所示是单例模式案例;类就实现了单例模式,它具备如下的特点:声明了一个私有的构造方法,外部不能使用关键字来创建实例对象;1Single类的内部创建一个该类的实例对象并使用私有的静态变量引用,1new禁止外界直接访问;2INSTANCE为了让类的外部能够获得类的实例对象,定义一个静态方法用于返回类实例3getlnstanceSingle INSTANCE.如图是单例模式的一个实例,使用实例化了两个对象和由于是单例模式,因此对象和指向了同一个内存地址,1Single.getlnstance Singe因此输出结果中,打印和的地址是一样的;sis2,Single sis2如图是单例模式实例的内存结构,可以看出,由于是单例模式,sis2获取的只有一个实例,两个对象和指向的地2址是同一块地址;Single.getlnstance SingleSinge sis2在中,允许在一个类的内部定义类,这样的类称作内部类,这个内部类所在的类称作外部类Java根据内部类的位置、修饰符和定义的方式可分为成员内部类、静态内部类,方法内部类如图所示是一个成员内部类的例子,在一个类中除了可以定义成员变量、成员方法,还可以定义类,这样的类被称作成员内部类1在外部类类里面定义了一个类,类里面定义了一个方法,方法可以访问外部类的属性;Outer InnerInner Show如图是类的内存结构;类的方法中创建了内部类Show Outer的实例对象,并通过该对象调用方法,将班级名称进行输出打印2Outer Outerintroduce InnerShow如图是成员内部类调用实例,从运行结果可以看出,内部类可以在外部类中被使用,并能访问外部类的成员变量;1如果想通过外部类去访问内部类,则需要通过外部类对象去创建内部类对象,创建内部类对象的具体语法格式如第行代码;如图是成员内部类调用实例的内存结构,可以看出,实例化了和5两个对象;通过方法调用了内部对象的方法;而2Outer Inner直接调用了自己的方法;mOuter introduceInner ShowmlnnerShow本节首先介绍了的作用和语法结构;然后通过具体的实例讲述了静态变量,静态方法和单例模式的使用过程;最后通过案例介绍了内部类的定义和使用方static法;。