2016.10.23

处理昨天的笔记

  • 数组的操作

    数组的拷贝
    System.arraycopy(object src, int srcpos, object dest, int destpos, int length);
    • src是复制的原数组
    • srcpos是原数组要开始复制的下标索引
    • dest复制的目标数组
    • destpos 目标数组插入的索引值
    • length复制的长度

clone()方法也可用于拷贝操作

  • DateFormat和SimpleDateFormat

  • 作用是完成字符传和时间对象的转换!
    DateFormat是抽象类不能直接实例化

测试代码

//测试时间对象转换字符串            
DateFormat df=new SimpleDateFormat("yyyy年MM月dd日");
Date d=new Date(1231232412334L);
String string=df.format(d);
System.out.println(string);

输出结果如下:
2009年01月06日
//测试字符串转换时间对象 
String str="1997年7月1日";
try {
      Date d2=df.parse(str);
      System.out.println(d2);
  } catch (ParseException e) {
          e.printStackTrace();
  }
//注:需要catch异常
输出结果如下
Tue Jul 01 00:00:00 CST 1997

格式化字符串除了上面的还有

hh-时 
mm-分
ss-秒
  • Calendar和GregorianCalendar类

    • 注意:
      月份:一月是0,二月是1,以此类推
      星期:周日是1,周一是2,周六是7

常用方法

Calendar calendar=new GregorianCalendar();
/*设置时间*/
calendar.set(int year, int month, int date, int hourOfDay, int minute, int second);
/*也可以单独设置*/
calendar.set(Calendar.DATE, 1);
//设置为当月第一天,
//即为api中的set(int field, int value)方法
//如果不设置时间的话,会默认设置为当前时间

可视化日历程序

public class CalendarTest {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner scanner=new Scanner(System.in);
        System.out.println("请按格式输入日期,例:2001-01-01");        
        String str=scanner.nextLine();
        DateFormat df=new SimpleDateFormat("yyyy-MM-dd");
        
        try {
            Date date=df.parse(str);
            Calendar calendar=new GregorianCalendar();
            calendar.setTime(date);
            
            int today=calendar.get(Calendar.DATE);//保存当前天数
            
            calendar.set(Calendar.DATE, 1);//转到当月第一天准备打印
            
            int toDayOfWeek=calendar.get(Calendar.DAY_OF_WEEK);//获取当月一日的星期号
            int maxDate=calendar.getActualMaximum(Calendar.DATE);//获取当前月份最大日期
            
            System.out.println("日\t一\t二\t三\t四\t五\t六\t");
            
            for(int i=1;i<toDayOfWeek;i++)
                System.out.print("\t");
            
            for(int i=1;i<=maxDate;i++){
                if(i==today)
                    System.out.print(i+"*\t");
                else System.out.print(i+"\t");
                int w=calendar.get(Calendar.DAY_OF_WEEK);
                if(w==calendar.SATURDAY)
                    System.out.println();
                calendar.add(Calendar.DATE, 1);
            }           
        } catch (ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }       
    }
 }
运行结果
  • File类

    • java.io.File类:文件和目录路径命的抽象表示形式

通过File类可以访问文件的属性

  • 构造器
文件 :      File f = new File("d:/src3/TestObject.java");
目录 :      File f2 = new File("d:/src3");
目录下文件 : Flie f3 = new File(f2, "TestObject.java");
  • 方法
isFile();//判断是不是构造器
isDirectory();//判断是不是目录
//以下是一些常用方法
canRead();
canwrite();
exists();
isHidden();
long lastModified();
long length();
String getName();
String getPath();
  • 通过File对象创建空白文件或目录
Public boolean createNewFile() throws IOException
不存在的文件对象f.createNewFile();//但所创建的文件所在的目录必须存在
  • 创建目录
mkdir();   //只能创建一层
mkdirs();  //可以创建很多层
  • 异常机制

Exception 在编写代码的过程中要学会去使用异常
异常是java提供的用于处理程序中错误的一种方式

  • java中采用面向对象的一种方式处理异常,处理过程如下

抛出异常:若发生异常,则该方法生成代表该异常的一个对象,停止当前执行的路径。并将异常对象传给JRE。
捕获异常:JRE得到异常后,寻找相应的代码来处理该异常。JRE在方法的调用栈中查找。从生成异常的方法开始回溯,直到找到相应的异常处理代码为止。

  • 异常继承图


    异常

Error类描述了Java运行时系统内部错误和资源耗尽错误,无法控制且罕见。
Error表明JVM已处于不可恢复的崩溃状态,我们不需要去管理他!

  • Exception(所有异常的父类)
    • RuntimeException
      一类特殊的异常,因为产生频繁且处理麻烦,系统会自动检测并交给默认的异常处理程序
      常见的RuntimeException
    • 1.NullPointException (空指针异常)
      通常是由对象是NULL导致的,一般加个if else 语句处理
Car c = null;
         if(c != null)
            c.run();
         else{
            }

2.ClassCastException(类型转换异常)
利用instanceof

if(obj instanceof Man){
           Man man = (Man) obj;
}

3.ArrayIndexOutOfBoundsException(数组下标越界异常)
先判断下标是否超过数组的(length-1)
4.NumberFormatException(数字格式异常)

String str = "1243dgds";
Integer i = new Integer(str);
  • CheckedException
    所有不是RuntimeException的异常统称为CheckedExcption,又被称为已检查异常。这类异常的产生不是程序本身的问题提,通常由外界因素造成的。

  • try,catch,finally

try 至少要带一个catch或finally
finally总会执行
当异常处理的代码结束执行后,是不会回到try语句里去执行尚未执行的代码的

  • catch
    每个try语句块可以有多个catch语句
    catch语句中常用方法
toString(); //显示异常的类名和产生的原因
getMessage();//只显示原因不显示类名
PirintStackTrace();//用来跟踪异常发生时堆栈中的内容

这些方法均继承自Throwable类
调用举例

public class TestException {
    public static void main(String[] args) {
        FileReader fileReader;//声明
        try {
            fileReader = new FileReader("e:/downloads/test.txt");
            char c=(char)fileReader.read();//强制转型
            System.out.println(c);//输出
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }catch (IOException e){
            e.printStackTrace();
        }
    }
}

Catch捕获异常的顺序: 如果异常之间有继承关系,越是顶层的类,越要放在下面。这是因为子类类型也属于父类,如果放在后面就永远不会被处理了!

  • Throws
    当CheckedExcption产生时,不一定立刻处理它,可以把异常抛出去

自己不处理,谁调用我这个方法谁去处理
一般使用就一直往上抛,最高的那个再去处理
不推荐抛给main方法,即抛给JRE

  public static void main(String[] args) {
      // TODO Auto-generated method stub
      try {
          String str=new TestException().openfile();//这里我需要去处理openflie()的抛出的异常
          System.out.println(str);
      } catch (FileNotFoundException e) {
          // TODO Auto-generated catch block
          e.printStackTrace();
      } catch (IOException e) {
          // TODO Auto-generated catch block
          e.printStackTrace();
      }
  }
//抛给调用的去处理了
  static String openfile() throws FileNotFoundException,IOException{
      FileReader fileReader=new FileReader("e:/downloads/test.txt");
      char c=(char)fileReader.read();
      return ""+c;
  }
}
  • 方法重写中声明异常原则

子类声明的异常范围不能超过父类声明的范围

  • 父类没有声明异常,子类也不能。
  • 不可抛出原方法抛出异常的父类或上层类
class A{
  void getName()throws IOException{}
}
class B extends A{
  void getName()throws FileNotFoundException{}//他的子类
}
class C extends A{
  void getName(){}//可以不抛出
}
class D extends A{
  void getName()throws Exception{}//这是IOException的父类
}
class E extends A{
  void getName()throws IOException,FileNotFoundException{}//子类
}
class F extends A{
  void getName()throws IOException,ArithmeticException{}//别的RuntimeException
}
class G extends A{
  void getName()throws IOException,ParseException{}//IO是RuntimeException 而Parse不是
}
  • finally
    通常在finally中关闭程序块已打开的资源(服务器中不关会导致占用过大)

return的执行顺序

  • 执行try,catch, 给返回值
  • 执行finally
  • return
public class RetrunTest {
  public static void main(String[] args) {
      String str=new RetrunTest().openFlie();
      System.out.println(str);
  }
  String openFlie(){      
          try {
              System.out.println("aaa");
              FileInputStream fis=new FileInputStream("E:/downloads/test1.txt");
              int a=fis.read();
              System.out.println("bbb");
              return "step1";
          } catch (FileNotFoundException e) {
              // TODO Auto-generated catch block
              System.out.println("catching!!!");
              e.printStackTrace();
              return "step2";         //先确定返回的值,并不会直接结束运行。
          } catch (IOException e) {
              // TODO Auto-generated catch block
              e.printStackTrace();
              return"step3";
          }finally{
              System.out.println("finally!!!!!");
              //return "fff"; //不要在finally里面使用return!
          }       
  }
}
  • 自定义异常
    1. 遇到标准异常无法处理的情况
  1. 从Exception类或他的子类派生出一个类
  2. 习惯上定义的类包含有2个构造器,一个默认的,一个带有详细信息的
public class MyException extends Exception{ //定义了我的Exception
    public MyException(){ //默认构造器
        super();
    }   
    public MyException(String message){ //带信息的
        super(message);
    }   
}
class TestMyException{
    void text() throws MyException{ //示例方法
        
    }
    public static void main(String[] args) {
        try {
            new TestMyException().text();//调用需处理
        } catch (MyException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

总结

  • 一个图
  • 五个关键字(try,catch,finally,throws,throw)
  • 先逮小的,再逮大的
  • 重写时异常
  • 自定义异常
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,558评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,002评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,036评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,024评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,144评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,255评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,295评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,068评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,478评论 1 305
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,789评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,965评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,649评论 4 336
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,267评论 3 318
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,982评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,223评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,800评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,847评论 2 351

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,605评论 18 399
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,644评论 18 139
  • 一、流的概念和作用。 流是一种有顺序的,有起点和终点的字节集合,是对数据传输的总成或抽象。即数据在两设备之间的传输...
    布鲁斯不吐丝阅读 10,023评论 2 95
  • 小编费力收集:给你想要的面试集合 1.C++或Java中的异常处理机制的简单原理和应用。 当JAVA程序违反了JA...
    八爷君阅读 4,582评论 1 114
  • 也许 下一秒钟 你将离去 消失在我小小的世界的尽头 也许 从那以后 无缘再见 不能相守 也许 潮起潮落 花开花谢 ...
    云初颜阅读 209评论 4 3