java异常种类

所有异常,都继承自java.lang.Throwable类。

Throwable有两个直接子类,Error类和Exception类。

Trow

Throwable是所有异常的根,java.lang.Throwable

  • Error是错误,java.lang.Error

java.lang.Error发生在应用程序不应该试图捕获的情况。Java程序不需要去throw或catch此类及其子类,因为这种异常不应该由应用程序处理,并且通常属于abnormal的情况。

  • Exception是异常,java.lang.Exception

java.lang.Exception是指Java程序应该捕获的异常。其中,java.lang.RuntimeException是其中一个特别的子类。
Exception则可使从任何标准Java库的类方法,自己的方法以及运行时任何异常中抛出来的基类型。
异常可分为执行异常(RuntimeException)和检查异常(Checked Exceptions)两种

①Checked异常

只有java语言提供了Checked异常,Java认为Checked异常都是可以被处理的异常,所以Java程序必须显示处理Checked异常。如果程序没有处理Checked异常,该程序在编译时就会发生错误无法编译。这体现了Java的设计哲学:没有完善错误处理的代码根本没有机会被执行。对Checked异常处理方法有两种

1 当前方法知道如何处理该异常,则用try…catch块来处理该异常。

2 当前方法不知道如何处理,则在定义该方法是声明抛出该异常。

package cn.xy.test;

import java.io.IOException;

/**
 * Checked异常测试方法
 * @author xy
 *
 */
public class CheckedExceptionMethods
{
    // 总异常类,既有checkedException又有RuntimeException,所以其中的checkedException必须处理
    public void method1() throws Exception
    {
        System.out.println("我是抛出异常总类的方法");
    }

    // 捕获并处理这个异常
    public void testMethod1_01()
    {
        try
        {
            method1();
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
    }

    // 把异常传递下去
    public void testMethod1_02() throws Exception
    {
        method1();
    }

    public void testMethod1_03() throws Exception
    {
        throw new Exception();
    }

    public void testMethod1_04()
    {
        try
        {
            throw new Exception();
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
    }

    // checkedException典型代表IOException
    public void method2() throws IOException
    {
        System.out.println("我是抛出IO异常的方法");
    }

    public void testMethod2_01()
    {
        try
        {
            method2();
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
    }

    public void testMethod2_02() throws Exception
    {
        method2();
    }

}

我们比较熟悉的Checked异常有

Java.lang.ClassNotFoundException
Java.lang.CloneNotSupportedException
Java.lang.IllegalAccessException
Java.lang.InterruptedException
Java.lang.NoSuchFieldException
Java.lang.NoSuchMetodException

②RuntimeException

Runtime如除数是0和数组下标越界等,其产生频繁,处理麻烦,若显示申明或者捕获将会对程序的可读性和运行效率影响很大。所以由系统自动检测并将它们交给缺省的异常处理程序。当然如果你有处理要求也可以显示捕获它们。

package cn.xy.test;

/**
 * 运行时异常测试方法
 * @author xy
 *
 */
public class RuntimeExcetionMethods
{
    public void method3() throws RuntimeException
    {
        System.out.println("我是抛出运行时异常的方法");
    }

    public void testMethod3_01()
    {
        method3();
    }

    public void testMethod1_02()
    {
        throw new RuntimeException();
    }
}

我们比较熟悉的RumtimeException类的子类有

Java.lang.ArithmeticException
Java.lang.ArrayStoreExcetpion
Java.lang.ClassCastException
Java.lang.EnumConstantNotPresentException
Java.lang.IllegalArgumentException
Java.lang.IllegalThreadStateException
Java.lang.NumberFormatException
Java.lang.IllegalMonitorStateException
Java.lang.IllegalStateException
Java.lang.IndexOutOfBoundsException
Java.lang.ArrayIndexOutOfBoundsException
Java.lang.StringIndexOutOfBoundsException
Java.lang.NegativeArraySizeException’
Java.lang.NullPointerException
Java.lang.SecurityException
Java.lang.TypeNotPresentException
Java.lang.UnsupprotedOperationException

类设计时使用Exception的几个最佳实践(读Effective Java有感)

在Effective Java的Item 58中,Java Exception被分为三类:

Error,checked exception和runtime exception。在设计类时,这三种Exception这样使用为佳:

  • Error:用于JVM相关的错误,例如resource deficiences,invariant failures以及其他使JVM无法正常运行的异常。

  • Runtime Exception:用于编程错误,JDK自带的很多就是用于编程错误

  • Checked Exception:用于可以恢复的异常。

由于Error通常用于JVM相关的错误,因此其他的unchecked exception都应该继承自Runtime Exception

腰部久坐小贴士

###脊椎恢复

长期伏案工作或不良姿势过久很容易出现脊柱生理曲度变形、骨质增生、肌肉劳损、椎间盘突出等一系列症状,如果能适当锻炼,的确可以很好的改善脊柱压力过大的情况,不过,由于这类人群肌肉力量下降、韧带柔韧性不足、椎体间隙过于紧张,不能很好的控制肌肉力量及关节活动,所以不建议以对抗性过强的格斗 篮球 足球或单边运动如羽毛球之类的运动作为练习,因为很容易诱发小关节错位或软组织损伤,一般来说前期的还是以静态的拉伸及力量锻炼为主,比如单杠 游泳 瑜伽 平板支撑 普拉提等效果都不错,总得来说,先把基础打好。

Read More

读取APK包中配置文件AndroidManifest.xml中的版本信息

import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;

import net.sf.json.JSONObject;

import org.apkinfo.api.util.AXMLPrinter2;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

public class ApkUtil {

    public JSONObject getApkInfo(String path) throws Exception {
        JSONObject json = new JSONObject();
        ZipFile zip = null;
        InputStream inputStream = null;
        try {
            zip = new ZipFile(path);
            ZipEntry entry = zip.getEntry("AndroidManifest.xml");
            inputStream = zip.getInputStream(entry);
            String context = AXMLPrinter2.parse(inputStream);
            SAXReader reader = new SAXReader();
            ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(context.getBytes("UTF-8"));
            Document doc = reader.read(byteArrayInputStream);
            Element rootElement = doc.getRootElement();
            json.put("versionCode", rootElement.attributeValue("versionCode"));
            json.put("versionName", rootElement.attributeValue("versionName"));
        } catch (Exception e) {
            e.printStackTrace();
        }finally{
            if(zip != null){
                zip.close();
            }
            if(inputStream != null){
                inputStream.close();
            }
        }
        return json;
    }

}

js转换 Fri Sep 16 00:00:00 UTC+0800 2011 格式时间函数

function Todate(num)  
{

        //Fri Oct 31 18:00:00 UTC+0800 2008  
        num=num+"";
        var date="";
        var month=new Array();
        month["Jan"]=1;month["Feb"]=2;month["Mar"]=3;month["Apr"]=4;month["May"]=5;month["Jan"]=6;
        month["Jul"]=7;month["Aug"]=8;month["Sep"]=9;month["Oct"]=10;month["Nov"]=11;month["Dec"]=12;
        var week=new Array();
        week["Mon"]="一";week["Tue"]="二";week["Wed"]="三";week["Thu"]="四";week["Fri"]="五";week["Sat"]="六";week["Sun"]="日";
        str=num.split(" ");
        date=str[5]+"-";
        date=date+month[str[1]]+"-"+str[2]+" "+str[3];
        //date=date+" 周"+week[str[0]];
        return date;
}