美文网首页
2016.10.23

2016.10.23

作者: VikingOldYoung | 来源:发表于2016-10-23 09:36 被阅读0次

处理昨天的笔记

  • 数组的操作

    数组的拷贝
    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)
  • 先逮小的,再逮大的
  • 重写时异常
  • 自定义异常

相关文章

  • 2016.10.23

    不知道什么原因发现深山老林的一些奇怪的东西进了城市,而医院(下午我们需要上课的地方)是最先遭殃的,那个东西将某个病...

  • 2016.10.23

    不知道什么原因发现深山老林的一些奇怪的东西进了城市,而医院(下午我们需要上课的地方)是最先遭殃的,那个东西将某个病...

  • 2016.10.23

    人事在变,只有我不在变。 今天没有安排的很好,我参加的机器学习比赛计划今天好好的改进一下算法,可是并没有做。买了很...

  • 2016.10.23

    昨晚听了课件,知道了跟进维护会员的重要性,今天和会员做了沟通,知道了她肠胃不好,总是胀气,帮她推荐了畅益生和顾...

  • 2016.10.23

    今晚动车上一位乘务员名字叫做管玉 名字着实好听

  • 2016.10.23

    激情过后还能一如往常,才是真正的厉害。任何人,任何事都是这样。

  • 2016.10.23

    灰蒙蒙的天,从清早就给了我一种不好的心情。清晨背着书包来到自习室,面对着还未完成的高数题有点懵,但还是努力去写了,...

  • 2016.10.23

  • 2016.10.23

    受台风影响 雨 今日又为霜降 因此 气温也蛮低的 好久没有写日记了 今天也是因为阴雨天带动了情绪才开始写了这篇日记...

  • 2016.10.23

    前天台风,声势浩大,庆幸又一次的“雷声响而雨点没”,昨天天就放晴了,今天变得特别好。 昨天没有更新文字,因为昨天确...

网友评论

      本文标题:2016.10.23

      本文链接:https://www.haomeiwen.com/subject/hzahuttx.html