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

              一、 在内部类前添加修饰符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.733742274434505
46.15541458289667
16.57653326111238
58.6459035079671
8.028611156283494
最大值:58.6459035079671
最小值:4.733742274434505


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值