美文网首页java 基本功田宝的文章健身房
Java 方法、时间日期获取比较格式化、正则表达式、异常处理

Java 方法、时间日期获取比较格式化、正则表达式、异常处理

作者: 楚简约 | 来源:发表于2017-07-07 17:08 被阅读494次

    1.Java 方法

    Java方法是语句的集合,它们在一起执行一个功能。

    方法是解决一类问题的步骤的有序组合
    方法包含于类或对象中
    方法在程序中被创建,在其他地方被引用
    

    以我们经常使用到的 System.out.println() 为例

    println() 是一个方法。
    System 是系统类。
    out 是标准输出对象。
    
    方法的优点
    1. 使程序变得更简短而清晰。
    2. 有利于程序维护。
    3. 可以提高程序开发的效率。
    4. 提高了代码的重用性。
    
    方法的命名规则
    1. 必须以字母、'_'或'$'开头。
    2. 可以包括数字,但不能以它开头。
    
    方法的定义
    一般情况下,定义一个方法包含以下语法:
    
    修饰符 返回值类型 方法名(参数类型 参数名){
        ...
        方法体
        ...
        return 返回值;
    }
    
    Java方法.png
    修饰符:修饰符,这是可选的,告诉编译器如何调用该方法。定义了该方法的访问类型。
    
    返回值类型 :方法可能会返回值。returnValueType 是方法返回值的数据类型。
    有些方法执行所需的操作,但没有返回值。在这种情况下,returnValueType 是关键字void。
    
    方法名:是方法的实际名称。方法名和参数表共同构成方法签名。
    
    参数类型:参数像是一个占位符。当方法被调用时,传递值给参数。
    这个值被称为实参或变量。参数列表是指方法的参数类型、顺序和参数的个数。
    参数是可选的,方法可以不包含任何参数。
    
    方法体:方法体包含具体的语句,定义该方法的功能。
    

    注意: 在一些其它语言中方法指过程和函数。一个返回非void类型返回值的方法称为函数;一个返回void类型返回值的方法叫做过程。

    /** 返回两个整型变量数据的较大值 */
    public static int max(int num1, int num2) {
       int result;
       if (num1 > num2)
          result = num1;
       else
          result = num2;
     
       return result; 
    }
    
    方法调用

    Java 支持两种调用方法的方式,根据方法是否返回值来选择。

    //有返回值
    int larger = max(30, 40);
    //无返回值
    System.out.println("Java 从入门到放弃! --楚简约");
    
    public class TestMax {
       /** 主方法 */
       public static void main(String[] args) {
          int i = 5;
          int j = 2;
          int k = max(i, j);
          System.out.println( i + " 和 " + j + " 比较,最大值是:" + k);
       }
     
       /** 返回两个整数变量较大的值 */
       public static int max(int num1, int num2) {
          int result;
          if (num1 > num2)
             result = num1;
          else
             result = num2;
     
          return result; 
       }
    }
    
    构造方法

    当一个对象被创建时候,构造方法用来初始化该对象。构造方法和它所在类的名字相同,但构造方法没有返回值。
    通常会使用构造方法给一个类的实例变量赋初值,或者执行其它必要的步骤来创建一个完整的对象。

    不管你与否自定义构造方法,所有的类都有构造方法,因为Java自动提供了一个默认构造方法,它把所有成员初始化为0。

    没有自定义构造方法时,系统会调用默认构造方法。
    一旦你定义了自己的构造方法,默认构造方法就会失效。
    
    // 一个简单的构造函数
    class MyClass {
      int x;
     
      // 以下是构造函数
      MyClass() {
        x = 10;
      }
    }
    

    2.Java 时间日期获取、比较、格式化

    java.util 包提供了 Date 类来封装当前的日期和时间。 Date 类提供两个构造函数来实例化 Date 对象。

    import java.util.Date;
    
    第一个构造函数使用当前日期和时间来初始化对象。
    Date( )
    
    第二个构造函数接收一个参数,该参数是从1970年1月1日起的毫秒数。
    Date(long millisec)
    
    获取当前日期时间
    Java中获取当前日期和时间很简单
    使用 Date 对象的 toString() 方法来打印当前日期和时间,如下所示:
    import java.util.Date;
      
    public class DateDemo {
       public static void main(String args[]) {
           // 初始化 Date 对象
           Date date = new Date();
            
           // 使用 toString() 函数显示日期时间
           System.out.println(date.toString());
       }
    }
    以上实例编译运行结果如下:
    Fri Jul 07 15:39:42 CST 2017
    
    日期比较

    Java使用以下三种方法来比较两个日期:

    1.使用 getTime() 方法获取两个日期(自1970年1月1日经历的毫秒数值),然后比较这两个值。
    
    2.使用方法 before(),after() 和 equals()。
    例如,一个月的12号比18号早,
    则 new Date(99, 2, 12).before(new Date (99, 2, 18)) 返回true。
    
    3.使用 compareTo() 方法,它是由 Comparable 接口定义的,Date 类实现了这个接口。
    
    格式化日期 SimpleDateFormat

    SimpleDateFormat 是一个以语言环境敏感的方式来格式化和分析日期的类。SimpleDateFormat 允许你选择任何用户自定义日期时间格式来运行。例如:

    SimpleDateFormat ft = new SimpleDateFormat ("E yyyy.MM.dd 'at' hh:mm:ss a zzz");
    
    import java.util.*;
    import java.text.*;
     
    public class DateDemo {
       public static void main(String args[]) {
     
          Date dNow = new Date( );
          SimpleDateFormat ft = new SimpleDateFormat ("E yyyy.MM.dd 'at' hh:mm:ss a zzz");
     
          System.out.println("Current Date: " + ft.format(dNow));
       }
    }
    
    yyyy 是完整的公元年,MM 是月份,dd 是日期,HH:mm:ss 是时、分、秒。
    注意:有的格式大写,有的格式小写,例如 MM 是月份,mm 是分;HH 是 24 小时制,而 hh 是 12 小时制。
    
    以上实例编译运行结果如下:
    Current Date: Sun 2014.07.18 at 14:14:09 PM PDT
    
    使用printf格式化日期

    printf 方法可以很轻松地格式化时间和日期。使用两个字母格式,它以 %t 开头并且以下面表格中的一个字母结尾。


    日期转换符.png

    更多 printf 解析可以参见:Java 格式化输出 printf 例子

    import java.util.Date;
     
    public class DateDemo {
     
      public static void main(String args[]) {
         // 初始化 Date 对象
         Date date = new Date();
     
         //c的使用  
        System.out.printf("全部日期和时间信息:%tc%n",date);          
        //f的使用  
        System.out.printf("年-月-日格式:%tF%n",date);  
        //d的使用  
        System.out.printf("月/日/年格式:%tD%n",date);  
        //r的使用  
        System.out.printf("HH:MM:SS PM格式(12时制):%tr%n",date);  
        //t的使用  
        System.out.printf("HH:MM:SS格式(24时制):%tT%n",date);  
        //R的使用  
        System.out.printf("HH:MM格式(24时制):%tR",date);  
      }
    }
    
    以上实例编译运行结果如下:
    全部日期和时间信息:星期一 九月 10 10:43:36 CST 2012  
    年-月-日格式:2012-09-10  
    月/日/年格式:09/10/12  
    HH:MM:SS PM格式(12时制):10:43:36 上午  
    HH:MM:SS格式(24时制):10:43:36  
    HH:MM格式(24时制):10:43  
    

    休眠

    Thread.sleep(1000*3);   // 休眠3秒
    
    Calendar类

    Calendar类的功能要比Date类强大很多,而且在实现方式上也比Date类要复杂一些。

    Calendar类是一个抽象类,在实际使用时实现特定的子类的对象,创建对象的过程对程序员来说是透明的,只需要使用getInstance方法创建即可。

    //创建一个代表系统当前日期的Calendar对象
    Calendar c = Calendar.getInstance();//默认是当前日期
    //创建一个代表2020年6月12日的Calendar对象
    Calendar c1 = Calendar.getInstance();
    c1.set(2020, 6 - 1, 12);
    

    Set设置

    Calendar c1 = Calendar.getInstance();
    
    调用public final void set(int year,int month,int date)
    c1.set(2010, 6 - 1, 12);//把Calendar对象c1的年月日分别设这为:2010、6、12
    
    调用public void set(int field,int value)
    c1.set(Calendar.DATE,10);
    
    Calendar类对象字段类型.png

    Add设置

    Calendar c1 = Calendar.getInstance();
    
    把c1对象的日期加上10,也就是c1也就表示为10天后的日期,其它所有的数值会被重新计算
    c1.add(Calendar.DATE, 10);
    
    把c1对象的日期减去10,也就是c1也就表示为10天前的日期,其它所有的数值会被重新计算
    c1.add(Calendar.DATE, -10);
    
    Calendar类对象信息的获得
    Calendar c1 = Calendar.getInstance();
    // 获得年份
    int year = c1.get(Calendar.YEAR);
    // 获得月份
    int month = c1.get(Calendar.MONTH) + 1;
    // 获得日期
    int date = c1.get(Calendar.DATE);
    // 获得小时
    int hour = c1.get(Calendar.HOUR_OF_DAY);
    // 获得分钟
    int minute = c1.get(Calendar.MINUTE);
    // 获得秒
    int second = c1.get(Calendar.SECOND);
    // 获得星期几(注意(这个与Date类是不同的):1代表星期日、2代表星期1、3代表星期二,以此类推)
    int day = c1.get(Calendar.DAY_OF_WEEK);
    

    3.正则表达式

    正则表达式定义了字符串的模式。
    正则表达式可以用来搜索、编辑或处理文本。
    正则表达式并不仅限于某一种语言,但是在每种语言中有细微的差别。

    java.util.regex 包主要包括以下三个类:

    Pattern 类:
    pattern 对象是一个正则表达式的编译表示。Pattern 类没有公共构造方法。
    要创建一个 Pattern 对象,你必须首先调用其公共静态编译方法,它返回一个 Pattern 对象。
    该方法接受一个正则表达式作为它的第一个参数。
    
    Matcher 类:
    Matcher 对象是对输入字符串进行解释和匹配操作的引擎。
    与Pattern 类一样,Matcher 也没有公共构造方法。
    你需要调用 Pattern 对象的 matcher 方法来获得一个 Matcher 对象。
    
    PatternSyntaxException:
    PatternSyntaxException 是一个非强制异常类,它表示一个正则表达式模式中的语法错误。
    

    以下实例中使用了正则表达式 .runoob. 用于查找字符串中是否包了 runoob 子串:

    import java.util.regex.*;
     
    class RegexExample1{
       public static void main(String args[]){
          String content = "I am noob " +
            "from runoob.com.";
     
          String pattern = ".*runoob.*";
     
          boolean isMatch = Pattern.matches(pattern, content);
          System.out.println("字符串中是否包含了 'runoob' 子字符串? " + isMatch);
       }
    }
    
    实例输出结果为:
    字符串中是否包含了 'runoob' 子字符串? true
    

    更多关于 Java正则表达式应用

    4.异常处理

    捕获异常

    使用 try 和 catch 关键字可以捕获异常。try/catch 代码块放在异常可能发生的地方。
    try/catch代码块中的代码称为保护代码,使用 try/catch 的语法如下:

    try
    {
       // 程序代码
    }catch(ExceptionName e1)
    {
       //Catch 块
    }
    

    下面的例子中声明有两个元素的一个数组,当代码试图访问数组的第三个元素的时候就会抛出一个异常。

    // 文件名 : ExcepTest.java
    import java.io.*;
    public class ExcepTest{
     
       public static void main(String args[]){
          try{
             int a[] = new int[2];
             System.out.println("Access element three :" + a[3]);
          }catch(ArrayIndexOutOfBoundsException e){
             System.out.println("Exception thrown  :" + e);
          }
          System.out.println("Out of the block");
       }
    }
    以上代码编译运行输出结果如下:
    Exception thrown  :java.lang.ArrayIndexOutOfBoundsException: 3
    Out of the block
    
    多重捕获块

    一个 try 代码块后面跟随多个 catch 代码块的情况就叫多重捕获。
    多重捕获块的语法如下所示:

    try{
       // 程序代码
    }catch(异常类型1 异常的变量名1){
      // 程序代码
    }catch(异常类型2 异常的变量名2){
      // 程序代码
    }catch(异常类型2 异常的变量名2){
      // 程序代码
    }
    
    throws/throw 关键字

    如果一个方法没有捕获一个检查性异常,那么该方法必须使用 throws 关键字来声明。throws 关键字放在方法签名的尾部。
    也可以使用 throw 关键字抛出一个异常,无论它是新实例化的还是刚捕获到的。
    下面方法的声明抛出一个 RemoteException 异常:

    import java.io.*;
    public class className
    {
      public void deposit(double amount) throws RemoteException
      {
        // Method implementation
        throw new RemoteException();
      }
      //Remainder of class definition
    }
    
    finally关键字

    finally 关键字用来创建在 try 代码块后面执行的代码块。
    无论是否发生异常,finally 代码块中的代码总会被执行。
    在 finally 代码块中,可以运行清理类型等收尾善后性质的语句。
    finally 代码块出现在 catch 代码块最后,语法如下:

    try{
      // 程序代码
    }catch(异常类型1 异常的变量名1){
      // 程序代码
    }catch(异常类型2 异常的变量名2){
      // 程序代码
    }finally{
      // 程序代码
    }
    
    通用异常

    在Java中定义了两种类型的异常和错误。

    JVM(Java虚拟机) 异常:由 JVM 抛出的异常或错误。
    例如:
    NullPointerException 类,
    ArrayIndexOutOfBoundsException 类,
    ClassCastException 类。
    
    程序级异常:由程序或者API程序抛出的异常。
    例如 
    IllegalArgumentException 类,
    IllegalStateException 类。
    

    最后附上全栈开发工程师困境, 我们都在不断赶路,望不到出路,在失望中寻找偶尔的满足 。
    弱弱的对自己说一句"加油,坚持下来一切皆有可能" :


    全栈开发工程师困境.png

    我是楚简约,感谢您的阅读,

    喜欢就点个赞呗,“❤喜欢”,

    鼓励又不花钱,你在看,我就继续写~

    非简书用户,可以点右上角的三个“...”,然后"在Safari中打开”,就可以点赞咯~


    相关文章

      网友评论

        本文标题:Java 方法、时间日期获取比较格式化、正则表达式、异常处理

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