测试使用java的单例模式以及静态内部类。
java貌似不能像C#一样申明静态类,形如“pulic static class classname(){}”;但能申明静态内部类。
java的单例模式,从实现上看及把构造函数私有化,并提供一个对外部所有其他类的访问方法,以使用该类的唯一实例。以下为使用java单例模式的一个例子,同时使用了java'的静态内部类,以作为区别二者不同之处。另增加了java异常处理,测试java异常动作。
Calc类
package com.anson.java;
/**
* 计算
* @author anson
*
*/
public class Calc
{
private static double result=0;
/**
* 加法
* @param num1
* @param num2
* @return
*/
public static double Add(double num1,double num2)
{
try
{
result=num1+num2;
if(result!=num1+num2)
{
throw new Exception("加法计算出现未知错误");
}
}
catch(Exception e)
{
e.printStackTrace();
}
return result;
}
/**
* 减法
* @param num1
* @param num2
* @return
*/
public static double Sub(double num1,double num2)
{
try
{
result=num1-num2;
if(result!=num1-num2)
{
throw new Exception("减法计算出现未知错误");
}
}
catch(Exception e)
{
e.printStackTrace();
}
return result;
}
/**
* 乘法
* @param num1
* @param num2
* @return
* @throws Exception
*/
public static double Multi(double num1,double num2)
{
try
{
result=num1*num2;
if(result!=num1*num2)
{
throw new Exception("乘法计算出现未知错误");
}
}catch(Exception e)
{
e.printStackTrace();
}
return result;
}
/**
* 除法
* @param num1
* @param num2
* @return
*/
public static double Div(double num1,double num2)
{
try
{
if(num2==0)
{
throw new Exception("除数不能为0");
}
}catch(Exception e)
{
e.printStackTrace();
}
return num1/num2;
}
}
Calculator类
package com.anson.java;
/**]
* Java单例模式的运用
* @author anson
*
*/
public class Calculator {
private static Calculator calculate=null;
/**
* 构造
*/
private Calculator()
{
}
/**
* 返回唯一实例
* @return
*/
public static Calculator Instance()
{
try
{
if(calculate==null)
{
calculate=new Calculator();
}
}
catch(Exception e)
{
e.printStackTrace();
}
return calculate;
}
/**
* 加法计算
* @param num1
* @param num2
*/
public void Add(double num1,double num2)
{
try
{
System.out.println(Calc.Add(num1, num2));
}
catch(Exception e)
{
System.out.println("\n"+"数字1"+num1+"\n"+"数字2"+num2+"\n");
e.printStackTrace();
}
}
/**
* 减法计算
* @param num1
* @param num2
*/
public void Sub(double num1,double num2)
{
try
{
System.out.println(Calc.Sub(num1, num2));
}catch(Exception e )
{
System.out.println("\n"+"被减数"+num1+"\n"+"减数"+num2+"\n");
e.printStackTrace();
}
}
/**
* ÷乘法计算
* @param num1
* @param num2
*/
public void Multi(double num1,double num2)
{
try
{
System.out.println(Calc.Multi(num1, num2));
}catch(Exception e)
{
System.out.println("\n"+"被乘数"+num1+"\n"+"乘数"+num2+"\n");
e.printStackTrace();
}
}
/**
* 除法计算
* @param num1
* @param num2
*/
public void Div(double num1,double num2)
{
try
{
System.out.println(Calc.Div(num1, num2));
}catch(Exception e)
{
System.out.println("\n"+"被除数"+num1+"\n"+"除数"+num2+"\n");
e.printStackTrace();
}
}
}
Test类
package com.anson.java;
public class Test {
/**
* Java
* 平台:ubuntu14.04
* 环境:eclipse
* 目标:
* 1.使用单例模式及静态内部类实现计算器
* 2.测试java抛异常动作
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Calculator calculate=Calculator.Instance();//调用单例
/**
* 计算测试
*/
double num1,num2;
num1=1;
num2=0;
calculate.Add(num1, num2);
calculate.Sub(num1, num2);
calculate.Multi(num1, num2);
calculate.Div(num1, num2);
}
}
测试结果:
其中异常抛出时正常的,因为num2=0;目的即为了测试异常动作