Java(2012/2/7)

一、自定义异常

        1)所谓自定义异常,通常就是定义了一个继承自Exception类的子类,那么这个类就是一个自定义异常类;通常情况下我们都会直接继承Exception类,一般不会继承自某个运行时的异常类。

         2)我们可以使用多个catch块来捕获异常,这时需要将父类型的catch块放到子类型的catch块之后,这样才能保证后续的catch可能被执行,否则子类型的catch将永远无法到达,Java编译器会报错误;如果多个catch块的异常类型是独立的,那么谁前谁后都可以。     

         3)如果try块中存在return语句,那么首先也需要将finally块中的代码执行完毕,然后再返回;如果try块中存在System.exit(0)语句,那么就不会执行finally块中代码,因为System.exit(0)会终止当前运行的java虚拟机,程序会在虚拟机终止前停止执行。 

 

二、GUI(Graphical User Interface),图形用户界面,分为:AWT,Swing

         1)AWT(Abstract Window ToolKit),抽象窗户工具集,第一代的Java GUI组件,是重量级的。

       

三、练习

1)通过命令行输入一串字符,首先判断这些字符是否都为数字。如果其中有字符不是数字,那么直接在命令行山输出“用户输入的字符不都为数字,无法转换”,程序结束;如果用户输入的字符都为字符,那么将该数字转换为中文的大写表示(用户每次最多输入八个字符);

输入输出例子:
输入:1234567
输出:一百二十三万四千五百六十七

输入:0001
输出:一

输入:1001
输出:一千零一

输入:1100
输出:一千一百

输入:10100
输出:一万零一百

输入:0010
输出:十

输入:000000001
输出:一

package digitchange;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;

public class DigitChange
{
    private static final HashMap<String, String> map = new HashMap<String, String>(); //key存储数字,value存储数字对应的汉字
   
    static
    {
 map.put("0", "零");
 map.put("1", "壹");
 map.put("2", "贰");
 map.put("3", "叁");
 map.put("4", "肆");
 map.put("5", "伍");
 map.put("6", "陆");
 map.put("7", "柒");
 map.put("8", "捌");
 map.put("9", "玖");
 map.put("10", "拾");
    }
   
    private void check(String str)  //用于检测用户输入的字符串是否合法
    {
 for(int i = 0; i < str.length(); i++)
 {
     if(str.charAt(i) >= '0' && str.charAt(i) <= '9')
     {
  
     }
     else
     {
  System.out.println("用户输入的字符不都为数字,无法转换");
  
  System.exit(0);
     }
 }
    }
   
    private void lengthIsOne(String str)    //输入字符个数为1的转换方法
    {
 System.out.print(map.get(str));
    }
   
    private void lengthIsTwo(String str)    //输入字符个数为2的转换方法
    {
 if(str.charAt(0) == '0')
 {
     this.lengthIsOne(str.substring(1, 2));
 }
 else if(str.charAt(1) == '0')
 {
     if("10".equals(str))
     {
  System.out.print("拾");
     }
     else
     {
  System.out.print(map.get(str.substring(0, 1)) + "拾");
     }
 }
 else
 {
     System.out.print(map.get(str.substring(0, 1)) + "拾" + map.get(str.substring(1, 2)));
 }
    }
   
    private void lengthIsThree(String str)         //输入字符个数为3的转换方法
    {
 if(str.charAt(0) == '0')
 {
     this.lengthIsTwo(str.substring(1, 3));
 }
 else if(str.charAt(1) == '0')
 {
     if("00".equals(str.substring(1,3)))
     {
  System.out.print(map.get(str.substring(0, 1)) + "百");
     }
     else
     {
  System.out.print(map.get(str.substring(0, 1)) + "百零" + map.get(str.substring(2, 3)));
     }
 }
 else if(str.charAt(2) == '0')
 {
     System.out.print(map.get(str.substring(0, 1)) + "百" + map.get(str.substring(1, 2)) + "拾");
 }
 else
 {
     System.out.print(map.get(str.substring(0, 1)) + "百" + map.get(str.substring(1, 2)) + "拾"
       +  map.get(str.substring(2, 3)));
 }
    }
   
    private void lengthIsFour(String str)            //输入字符个数为4的转换方法
    {
 if(str.charAt(0) == '0')
 {
     this.lengthIsThree(str.substring(1, 4));
 }
 else if(str.charAt(1) == '0')
 {
     if("000".equals(str.substring(1, 4)))
     {
  System.out.print(map.get(str.substring(0, 1)) + "仟");
     }
     else if("10".equals(str.substring(2, 4)))
     {
  System.out.print(map.get(str.substring(0, 1)) + "仟零拾");
     }
     else
     {
  System.out.print(map.get(str.substring(0, 1)) + "仟零");
     
  this.lengthIsTwo(str.substring(2, 4));
     }
 }
 else if(str.charAt(2) == '0')
 {
     if("00".equals(str.substring(2, 4)))
     {
  System.out.print(map.get(str.substring(0, 1)) + "仟" + map.get(str.substring(1, 2)) + "百");
     }
     else
     {
  System.out.print(map.get(str.substring(0, 1)) + "仟" + map.get(str.substring(1, 2)) + "百零");
  
  this.lengthIsOne(str.substring(3, 4));
     }
 }
 else if(str.charAt(3) == '0')
 {
     System.out.print(map.get(str.substring(0, 1)) + "仟 " + map.get(str.substring(1, 2)) + "百" + map.get(str.substring(2, 3))
      + "拾");
 }
 else
 {
     System.out.print(map.get(str.substring(0, 1)) + "仟 " + map.get(str.substring(1, 2)) + "百" + map.get(str.substring(2, 3))
      + "拾" + map.get(str.substring(3, 4)));
 }
    }
   
    private void lengthIsFive(String str)       //输入字符个数为5的转换方法
    {
 String s1 = str.substring(0, 1);
 
 String s2 = str.substring(1);
 
 if(s1.charAt(0) == '0')
 {
     this.lengthIsFour(s2);
 }
 else if(s2.charAt(0) == '0')
 {
     if("0000".equals(s2))
     {
  this.lengthIsOne(s1);
  
  System.out.print("万");
     }
     else
     {
  this.lengthIsOne(s1);
  
  System.out.print("万零");
  
  this.lengthIsThree(s2.substring(1));
     }
 }
 else
 {
     this.lengthIsOne(s1);
    
     System.out.println("万");
    
     this.lengthIsFour(str.substring(1));
 }
    }
   
    private void lengthIsSix(String str)             //输入字符个数为6的转换方法
    {
 String s1 = str.substring(0, 2);
 
 String s2 = str.substring(2);
 
 if("00".equals(s1))
 {
     this.lengthIsFour(s2);
 }
 else if(s2.charAt(0) == '0')
 {
     if("0000".equals(s2))
     {
  this.lengthIsTwo(s1);
  
  System.out.print("万");
     }
     else
     {
  this.lengthIsTwo(s1);
  
  System.out.print("万零");
  
  this.lengthIsThree(s2.substring(1));
     }
 }
 else
 {
     this.lengthIsTwo(s1);
    
     System.out.print("万");
    
     this.lengthIsFour(s2);
 }
    }
   
    private void lengthIsSeven(String str)         //输入字符个数为7的转换方法
    {
 String s1 = str.substring(0, 3);
 
 String s2 = str.substring(3);
 
 if("000".equals(s1))
 {
     this.lengthIsFour(s2);
 }
 else if(s2.charAt(0) == '0')
 {
     if("0000".equals(s2))
     {
  this.lengthIsThree(s1);
  
  System.out.print("万");
     }
     else
     {
  this.lengthIsThree(s1);
  
  System.out.print("万零");
  
  this.lengthIsThree(s2.substring(1));
     }
 }
 else
 {
     this.lengthIsThree(s1);
    
     System.out.print("万");
    
     this.lengthIsFour(s2);
 }
    }
   
    private void lengthIsEight(String str)    //输入字符个数为八的转换方法
    {
 String s1 = str.substring(0, 4);
 
 String s2 = str.substring(4);
 
 if("0000".equals(s1))
 {
     this.lengthIsFour(s2);
 }
 else if(s2.charAt(0) == '0')
 {
     if("0000".equals(s2))
     {
  this.lengthIsFour(s1);
  
  System.out.print("万");
     }
     else
     {
  this.lengthIsFour(s1);
  
  System.out.print("万零");
  
  this.lengthIsThree(s2.substring(1));
     }
 }
 else
 {
     this.lengthIsFour(s1);
    
     System.out.print("万");
    
     this.lengthIsFour(s2);
 }
    }
   
    public void change(String str)      //对用户输入的字符进行检查和转换
    {
 this.check(str);
 
 if(str.length() == 1)
 {
     this.lengthIsOne(str);
 }
 else if(str.length()  == 2)
 {
     this.lengthIsTwo(str);
 }
 else if(str.length() == 3)
 {
     this.lengthIsThree(str);
 }
 else if(str.length() == 4)
 {
     this.lengthIsFour(str);
 }
 else if(str.length() == 5)
 {
     this.lengthIsFive(str);
 }
 else if(str.length() == 6)
 {
     this.lengthIsSix(str);
 }
 else if(str.length() == 7)
 {
     this.lengthIsSeven(str);
 }
 else
 {
    this.lengthIsEight(str);
 }
 
 System.out.println();
    }
   
   
    public static void main(String[] args) throws IOException
    {
 
 System.out.println("请输入字符(字符个数最多为八个):");
 
 BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
 
 String str = null;
 
 str = br.readLine();
 
 while(str.length() == 0)
 {
     System.out.println("用户未输入字符,请输入字符(字符个数最多为八个):");
    
     str = br.readLine();
 }
 
 while(str.length() > 8)
 {
     System.out.println("输入字符个数超过八个,请重新输入:");
    
     str = br.readLine();
 }
 
 DigitChange d = new DigitChange();
 
 d.change(str);
 
    }

}

2)

编写一个小型的应用程序框架,该框架会向用户公开一个run方法,方法声明为:
public void run(String className);

该方法位于类ApplicationRun类中,该类的声明为:
public class ApplicationRun
{
    public void run(String className)
    {
             //这里是方法的执行代码
     }
}

其中的字符串参数className为用户提供一个类的全名(包名+类名),当用户将类的全名一字符串的形式传递给该run方法时,run方法会自动执行用户所提供的类中所有被@Test注解所修饰的public void 且不带参数的方法。

@Test注解为该小型应用程序框架所定义的,用户可以使用该注解修饰自己的方法,同时该@Test注解只能用于修饰方法。


  

package applicationrun;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Retention(value = RetentionPolicy.RUNTIME)
@Target(value = ElementType.METHOD)
public @interface Test
{
    String value() default "hello";
}

 

package applicationrun;

import java.lang.reflect.Method;
import java.lang.reflect.Modifier;

public class ApplicationRun
{
    private Class<?> classType;
   
    public void run(String className) throws ReflectiveOperationException
    {
 classType = Class.forName(className);
 
 Object obj = classType.newInstance();
 
 Method[] method = classType.getDeclaredMethods();
 
 for(Method m : method)
 {
     if(void.class.equals(m.getReturnType()) && m.getModifiers() == Modifier.PUBLIC
      && m.getParameterTypes().length == 0)
     {
  if(m.isAnnotationPresent(Test.class))
  {
      m.invoke(obj, new Object[]{});
  }
     }
 }
    }
}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值