Java类高级特性之静态内部类

来源:互联网 发布:初级程序员 编辑:程序博客网 时间:2024/06/05 06:17

              一、 在内部类前添加修饰符static,这个内部类就变为静态内部类。一个静态内部类中可以声明static成员,但是在非静态内部类中不可以声明静态成员。静态成员内部类有一个最大的特点,就是不可以使用外部类的非静态成员,所以静态内部类在程序开发中比较少见。

    可以这样认为,普遍的内部类对象隐式的在外部保存了一个引用,指向创建它的外部类对象,但如果内部类被定义为static时,它应该具有更多的限制。静态内部类具有以下两个特点:

(1)创建静态内部类的对象,不需要其外部类的对象。

(2)不能从静态内部类的对象中访问非静态外部类的对象。


例如:定义一个静态内部类StaticInnerClass

public class StaticInnerClass{           int x=100;           static class Inner{                 void doitInner(){                        systerm.out.printin("外部类"+x);      //调用外部类的成员变量X,<span style="color:#FF0000;">非法</span>                    }            }}


             二、静态内部类的应用:进行程序调试时,如果在每一个Java文件中都设置一个主方法,将出现很多额外代码,而程序本身并不需要这些主方法,为了解决这个问题,可以将主方法写入静态内部类中。

实例:在静态内部类中定义主方法,并访问内部类中的方法。

public class StaticInnerClass {static int x = 100;static class Inner {static void doit(){System.out.println("静态内部类中的方法调用外部类的成员变量x="+x);     //调用外部类的成员变量x}public static void main(String args[]){//定义主方法doit();//访问内部类的方法}}}

运行结果如下所示:

静态内部类中的方法调用外部类的成员变量x=100
如果编译上面的类,将编译生成一个名称为StaticInnerClass$Inner的独立类(静态内部类)和一个StaticInnerClass类(外部类),只要使用Java StaticInnerClass$Inner就可以运行主方法中的内容,这样当测试完成需要将所有的.class文件打包时,只要删除StaticInnerClass$Inner独立类(静态内部类)即可。



静态内部类的应用:静态内部类求极值

创建一个MaxMin类,再给类中定义一个静态内部类Result,然后在Result类中定义两个浮点型属性,一个是Max,一个是Min,再用构造函数将其初始化,并提供getXXX()方法来获得这两个值。最后定义一个静态方法getResult(),该方法的返回值是Result类型,这样既可以保存最大值,又保存了最小值。

package neibulei;import javax.xml.transform.Result;public class MaxMin {public static  class Result {private  double max;private  double min;public Result(double max,double min){this.max = max;this.min = min;}public double getMax(){return max;}public double getMin(){return min;}}public static Result getResult(double[] array) {double max = Double.MIN_VALUE;double min = Double.MAX_VALUE;for(double i:array){if(i>max){max = i;}if(i<min){min = i;}}return new Result(max, min);}}

package neibulei;public class TestMaxMin {public static void main(String[] args){double[] array = new double[5];for(int i=0;i<array.length;i++){array[i]=100*Math.random();}System.out.println("源数组:");for(int i=0;i<array.length;i++){System.out.println(array[i]);}System.out.println("最大值:"+MaxMin.getResult(array).getMax());System.out.println("最小值:"+MaxMin.getResult(array).getMin());}}

运行结果如下:

源数组:4.73374227443450546.1554145828966716.5765332611123858.64590350796718.028611156283494最大值:58.6459035079671最小值:4.733742274434505


0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 u盘无法安全弹出怎么办 u盘不能安全弹出怎么办 真空杯不保温了怎么办 锅底外面烧黑了怎么办 锅底里面烧黑了怎么办 佳能50镜头跑焦怎么办 g7x镜头进灰了怎么办 leica镜头进灰了怎么办 请问喉咙痒咳嗽该怎么办 喉咙痒咳嗽有痰怎么办 痒咳嗽停不下来怎么办 嗓子疼咳嗽有痰怎么办 上火了喉咙干痒怎么办 喉咙里总是有痰怎么办 1岁宝宝喉咙有痰怎么办 嗓子总感觉有痰怎么办 嗓子痒感觉有痰怎么办 1岁宝宝嗓子有痰怎么办 3岁宝宝嗓子有痰怎么办 喉咙总感觉有痰怎么办 感冒了喉咙有痰怎么办 咽喉有异物感是怎么办 老感觉喉咙有痰怎么办 感冒有痰怎么办最有效 感冒快好了有痰怎么办 喉咙里一直有痰怎么办 一到晚上就咳嗽怎么办 1岁宝宝咳嗽痰多怎么办 3岁宝宝咳嗽痰多怎么办 六岁儿童咳嗽有痰怎么办 很多白痰在喉咙怎么办 我喉咙总是有痰怎么办 喉咙老感觉有痰怎么办 喉咙痒老是有痰怎么办 抽烟多了嗓子疼怎么办 抽烟多了老咳嗽怎么办 抽烟抽多了咳嗽怎么办 嗓子咳出异物臭怎么办 鼻子有鼻涕喉咙有痰怎么办 怀孕39周感冒了怎么办 一口痰卡在喉咙怎么办