java類的包裝類


包裝類的基本用法

為什么需要包裝類(Wrapper Class)

      java並不是純面向對象的語言,java語言是一個面向對象的語言,但是java中的基本數據類型卻不是面向對象的,但是我們在實際使用中經常將基本數據類型轉換成對象,便於操作,比如,集合的操作中,這時,我們就需要將基本類型數據轉化成對象!

包裝類和基本數據類型的關系

基本數據類型                       包裝類

byte                                                          Byte           

boolean                                                    Boolean     

short                                                         Short          

char                                                          Character   

int                                                             Integer        

long                                                           Long          

float                                                          Float           

double                                                     Double         

包裝類的繼承關系

 

 包裝類的基本操作

 

 

 

詳見jdk api

 1 public class TestInteger {
 2 
 3     public static void main(String[] args) {
 4         // TODO Auto-generated method stub
 5        Integer i1=new Integer(123);
 6        Integer i2 = new Integer("123");
 7        System.out.println("i1=i2:"+(i1==i2));//false
 8        System.out.println("i1.equals(i2):"+i1.equals(i2));
 9        System.out.println(i2);
10        System.out.println(i2.toString());//說明重寫了toString方法
11        Integer i3=new Integer(128);
12        System.out.println(i1.compareTo(i3));//-1
13        System.out.println(i1.compareTo(i2));//0
14        System.out.println(i3.compareTo(i2));//1
15        //(1)Integer-->int    包裝對象.intValue()
16        int i=i1.intValue();
17        System.out.println(Integer.max(10, 20));//返回最大值
18        //(2)String -->int  包裝類類名.parseInt(String s)
19        int ii=Integer.parseInt("234");
20        //(3)int -->Integer
21        Integer i4=Integer.valueOf(123);
22        //(4)int-->String
23        String str=ii+"";
24        String s=String .valueOf(ii);
25        //(5)String-->Integer;
26        Integer i5=new Integer("345");
27        //(6)Integer-->String
28        String ss=i5.toString();
29        System.out.println(ss);
30     }
31 
32 }

 

 

 

4.StringBuilder_StringBuffer 用法_JDK 底
層源碼分析---->請見源碼查看


4.1 可變的字符串


StringBuilder:效率高,安全性低
StringBuffer:效率低,安全性高


4.2StringBuilder 的常用方法的使用

  • append()
  • delete()
  • insert()
  • StringBuilder()構造函數
package com.bjsxt.stringbuilder;

public class TestStringBuffer {
    public static void main(String[] args) {
        StringBuilder sb = new StringBuilder();
        // 字符串的追加
        sb.append("hello");
        sb.append(true);
        sb.append('');
        sb.append(100);
        System.out.println(sb.toString());

        sb.delete(3, 5);// 含頭不含尾
        System.out.println(sb);
        sb.deleteCharAt(1);// 刪除指定位置上的字符
        System.out.println(sb);

        sb.insert(2, '');
        System.out.println(sb);
        System.out.println(sb.indexOf("t") + "\t" + sb.indexOf("k"));
    }
}
View Code
package com.bjsxt.stringbuilder;

public class TestStringBuilder2 {
    public static void main(String[] args) {
        
        StringBuilder sb=new StringBuilder();//實際上創建了一個長度為16的char類型的數組
        StringBuilder sb2=new StringBuilder("hello");//5+16
        sb2.append("world");
        sb2.append("world");
        sb2.append("world");
        sb2.append("world");
        sb2.append("world");
        sb2.append("world");
        sb2.append("world");
        sb2.append("world");
        System.out.println(sb2);
        System.out.println("容量"+sb2.capacity()+"\tsb2的長度"+sb2.length());
    }
}
View Code

 


4.3StringBuilder 的 JDK 源碼分析

 

5.不可變字符序列和可變字符序列的深入


javap 是 JDK 自帶的一個工具,可以反編譯,也可以查看 Java
編譯器生成的字節碼,是分析代的一個好工具。
-c 對代碼進行反匯編

package com.bjsxt.test;

public class Test {
    public static void main(String[] args) {
        String str1="abc"+"dbc";
        String str4="abcdbc";
        //在運行時會在堆中創建對象
        /**
         * StringBuilder sb=new StringBuilder();
         * sb.append("abcdbc");
         * sb.append("cde");
         * String str2=sb.toString();
         * 
         * */
        String str2=str1+"cde";
        
        String str3=new String("hello");
        System.out.println(str1==str4);
        /**在等號的右側有變量參與運行或new關鍵字,將在堆內存開辟空間*/
        
        String str6="";
        for(int i=0;i<10;i++){
            StringBuilder sb2=new StringBuilder();
            sb2.append(str6);
            sb2.append(i);
            str6=sb2.toString();
            //str6=str6+i;
        }
        System.out.println(str6);
        /**只創建了一個對象,sb對象*/
        StringBuilder sb=new StringBuilder();
        for(int i=0;i<10;i++){
            sb.append(i);
        }
        System.out.println(sb);
        
    }
}
View Code

 

6.java.util.Date 類

6.1java.util.Date 類

long getTime()

 

  • 返回自 1970 年 1 月 1 日以來,由此 Date 對象表示的00:00:00 GMT 的毫秒數

 

 


6.2java.sql.Date 類


6.3java.sql.Date 類

package com.bjsxt.testdate;

import java.util.Date;

public class TestDate {
    public static void main(String[] args) {
        Date d=new Date();
        System.out.println(System.currentTimeMillis());//1970-1-1 00:00:00
        
        Date d2=new Date(1000L);
        System.out.println(d2.toGMTString());
        System.out.println(d.getTime());
        
        System.out.println(d.before(d2)); //false
        System.out.println(d.after(d2)); //true
        
        System.out.println(d.getTime()<d2.getTime());
        System.out.println(d.getTime()>d2.getTime()); //
        System.out.println(d2.toString());
        
        /**java.util.Date類的子類*/
        java.sql.Date  sqlDate=new java.sql.Date(1000L);
        System.out.println(sqlDate);
        
        java.sql.Time sqlTime=new java.sql.Time(1000L);
        System.out.println(sqlTime.toGMTString());
        
        java.sql.Timestamp timestamp=new java.sql.Timestamp(1001L);
        System.out.println(timestamp);
    }
}
View Code

 

7.DateFormat 和 SimpleDateFormat 類


完成字符串和時間對象的轉換

package String;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;

public class TestDateFormat {

    public static void main(String[] args) throws ParseException {
        // TODO Auto-generated method stub
              DateFormat d=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
              /**
               * Date-->String   format(Date d)
               * String-->Date   parse(String s)
               */
              Date date=new Date(3456465434131346L);
              System.out.println(date);
              String strDate=d.format(date);
              System.out.println(strDate);
              
              
              Scanner input=new Scanner(System.in);
              System.out.println("請輸入一個時間:yyyy-MM-dd hh:mm:ss.SSS");
              String str=input.nextLine();
              Date d2=d.parse(str);
              
              System.out.println(d2);
    }

}
package String;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;

public class TestDateFormat {

    public static void main(String[] args) throws ParseException {
        // TODO Auto-generated method stub
              DateFormat d=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
              /**
               * Date-->String   format(Date d)
               * String-->Date   parse(String s)
               */
              Date date=new Date(3456465434131346L);
              System.out.println(date);
              String strDate=d.format(date);
              System.out.println(strDate);
              
              
              Scanner input=new Scanner(System.in);
              System.out.println("請輸入一個時間:yyyy-MM-dd hh:mm:ss.SSS");
              String str=input.nextLine();
              Date d2=d.parse(str);
              
              System.out.println(d2);
    }

}
View Code

 

 

8.Calendar 類

8.1Calendar 的類


人們對於時間的認識是:某年某月某日,這樣的日期概念。計算機是 long 類型的數字。通過 Calendar 在二者之間搭起橋梁!

GregorianCalendar 是 Calendar 的一個具體子類,提供了世界上大多數國家/地區使用的標准日歷系統。

注意:
月份:一月是 0,二月是 1,以此類推,是 12 月是 11
星期:周日是 1,周一是 2,。。。周六是 7

 

package com.bjsxt.calendar;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Scanner;

public class Test {
    public static void main(String[] args) throws ParseException {
        Scanner input=new Scanner(System.in);
        System.out.println("請輸入一個日期:yyyy-MM-dd");
        String str=input.next();
        //創建DateFormat對象,用於將String轉Date
        DateFormat df=new SimpleDateFormat("yyyy-MM-dd");
        Date d=df.parse(str);
        //Date對象所表示的時間設置到Calendar中
        Calendar cal=new GregorianCalendar();
        cal.setTime(d);
        
        //獲取輸入的日期中的date部分
        int nowDate=cal.get(Calendar.DAY_OF_MONTH);  //14
        
        //將日期設置為1號,設置成2030-2-1
        cal.set(Calendar.DAY_OF_MONTH, 1);
        //獲取1號是星期幾?
        int dayOfWeek=cal.get(Calendar.DAY_OF_WEEK);
        
        System.out.println("日\t一\t二\t三\t四\t五\t六");
        for(int i=1;i<dayOfWeek;i++){
            System.out.print("\t");
        }
        //獲取輸入的月份的最后一天
        int maxDay=cal.getActualMaximum(Calendar.DAY_OF_MONTH);
        //System.out.println(maxDay);
        for(int i=1;i<=maxDay;i++){
            System.out.print(i);
            if(i==nowDate){
                System.out.print("*");
            }
            System.out.print("\t");
            if(cal.get(Calendar.DAY_OF_WEEK)==Calendar.SATURDAY){
                System.out.println();
            }
            cal.add(Calendar.DAY_OF_MONTH, 1);
        }
        
        
    }
}
View Code
package com.bjsxt.calendar;

import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;

public class TestCalendar {
    public static void main(String[] args) {
        //父類引用指向子類對象
        Calendar cal=new GregorianCalendar();
        cal.set(2030, 1, 14);
        System.out.println("年"+cal.get(1));
        System.out.println("年:"+cal.get(Calendar.YEAR));
        //getTime(),將Calendar轉換成Date對象
        Date d=cal.getTime();
        System.out.println(d);
        //setTime(Date) 將Date對象所表示的時間設置到日歷中
        Date date=new Date(1000L);
        cal.setTime(date);
        System.out.println("年:"+cal.get(Calendar.YEAR));
        System.out.println("月:"+cal.get(Calendar.MONTH));
        System.out.println("日:"+cal.get(Calendar.DAY_OF_MONTH));
        cal.add(Calendar.DAY_OF_MONTH, 10);
        
        System.out.println("日:"+cal.get(Calendar.DAY_OF_MONTH));
        cal.add(Calendar.DAY_OF_MONTH, -100);
        System.out.println("年:"+cal.get(Calendar.YEAR));
        System.out.println("月:"+cal.get(Calendar.MONTH));
        System.out.println("日:"+cal.get(Calendar.DAY_OF_MONTH));
        
        
    }
}
View Code

 

9.Math 類


9.1Math 類的常用方法

package String;

public class TestMath {
public static void main(String[] args) {
    System.out.println("絕對值:"+Math.abs(23)+"\t"+Math.abs(-23)+"\t"+Math.abs(0));
    System.out.println("向上取整,再轉double:"+Math.ceil(23.0001)+"\t"+Math.ceil(-9.9999));
    System.out.println("向下取整再轉double"+Math.floor(23.9999)+"\t"+Math.floor(-23.0001));
    System.out.println("最值:"+Math.max(20, 10)+"\t"+Math.min(2, 40));
    System.out.println("5的2次方:"+Math.pow(5, 2)+"5的立方"+Math.pow(5, 3));
    System.out.println("隨機數[0,1):"+Math.random());
    int ran=(int)(Math.random()*9000)+1000;
    System.out.println("1000-9999之間的隨機數:"+ran);
    System.out.println("四舍五入:"+Math.round(34.566)+"\t"+Math.round(34.345));
    System.out.println("開方:"+Math.sqrt(55));
}
}
View Code

 

9.2 靜態導入

package String;
import static java.lang.Math.*;//靜態導入
public class TestStaticImport {
public static void main(String[] args) {
    System.out.println(abs(-20));
    System.out.println(Math.abs(-2));
    System.out.println(random());
}
public static int abs(int number){
    return number;
}
}
View Code

 

JDK1.5

10.File 類


文件和目錄路徑名的抽象表示形式。一個 File 對象可以代表一個文件或目錄

  • 可以實現獲取文件和目錄屬性等功能
  • 可以實現對文件和目錄的創建、刪除等功能

常用方法有:

  • createNewFile()  //有則不創建 返回false,沒有則創建 返回true
  • delete()               //刪除成功 返回true ,失敗返回false
  • getAbsoluteFile()    //返回絕對路徑
  • getPath()               //返回相對路徑
  • getName()             //返回文件名
  • isFile()                  //是否為文件  boolean
  • length                  //長度
  • mkdir()                   //創建單層目錄
  • mkdirs()                   //創建多級目錄
  • delete()                       //只能刪除空目錄
  • list()                            //返回一個字符串數組,命名由此抽象路徑名表示的目錄中的文件和目錄。
  • listFiles()                      //返回一個抽象路徑名數組,表示由該抽象路徑名表示的目錄中的文件和目錄。 
     

File 不能訪問文件內容


10.1File 類操作文件


10.2File 類操作目錄

package dead;

import java.io.File;
import java.io.IOException;



public class TestFile {
//使用file類去操縱文件
    public static void main(String[] args) throws IOException {
        //創建File類的文件
        File f1=new File("D:/a1.txt");//絕對路徑
        File f2=new File("D:\\a2.txt");
        File f3=new File("a.txt");//相對路徑
        File f5=new File("D:\\test");//目錄
        File f4=new File(f5,"a4.txt");
        File f6=new File("D:"+File.separator+"a5.txt");
        /**
         * File操作文件的相關方法
         */
    //System.out.println(f1.createNewFile());
    System.out.println(f1.delete());//直接從磁盤上刪除
    System.out.println(f1.exists());
    System.out.println("絕對路徑:"+f3.getAbsolutePath());
    System.out.println("相對路徑:"+f3.getPath());
    System.out.println(f3); //相對路徑
    System.out.println("是否是文件"+f3.isFile());
    System.out.println("是否是文件"+f5.isFile());
    System.out.println("文件中內容的長度"+f3.length());
    }
}
View Code
package com.bjsxt.file;

import java.io.File;

public class TestDirectory {
    public static void main(String[] args) {
        //創建File類的對象
        File f=new File("D:"+File.separator+"test");
        f.mkdir();  //用於創建目錄 ,單層目錄
        System.out.println("目錄是否存在"+f.exists());
        System.out.println("是目錄還是文件:"+f.isDirectory());
        System.out.println("是目錄還是文件:"+f.isFile());
        
        File f2=new File("D:\\aa\\bb\\cc");
        f2.mkdirs(); //用於創建目錄,多層目錄
        f.delete();
        File parent=f2.getParentFile(); //獲取cc目錄的父級目錄
        System.out.println(parent);
        parent.delete(); //delete刪除目錄時,只允許刪除空目錄
        f2.delete();//刪除cc
        parent.delete();//刪除bb
        
        File f3=new File("D:\\");
        String [] strFile=f3.list();
        System.out.println(strFile.length); //數組中元素的個數
        for(String s:strFile){
            System.out.println(s);
        }
        System.out.println("\n--------------------------------\n");
        File [] flist=f3.listFiles();
        for(File file:flist){
            System.out.println(file);
        }
        
        
    }
}
View Code

 

11.使用遞歸算法遍歷目錄結構和樹結構


編寫一個程序:以樹狀結構展現特定的文件夾及其子文件
(夾)(使用遞歸來做)

package Testfile;

import java.io.File;

public class TestFile {
    public static void main(String[] args) {
        File f=new File("E:\\eclipse");
        printFile(f,0);
    }
public static void printFile(File file,int level){
    //打印樹狀結構的層次關系
    for(int i=0;i<level;i++){
        System.out.print("-");
    }
    //輸出目錄或者文件的名稱
    System.out.println(file.getName());
    if(file.isDirectory()){//判斷file對象是否是目錄
        File[] listFiles = file.listFiles();
        for(File temp:listFiles){
            //自己調用自己
            printFile(temp,level+1);
        }
    }
}
}
View Code

 

12.枚舉

12.1 枚舉的定義

只能夠取特定值中的一個
使用 enum 關鍵字


12.2 枚舉的使用


而每個被枚舉的成員實質就是一個枚舉類型的實例,他們默認都是 public static final 的。可以直接通過枚舉類型名直接使用它們。)


強烈建議當你需要定義一組常量時,使用枚舉類型盡量不要使用枚舉的高級特性,事實上高級特性都可以使用普通類來實現,沒有必要引入復雜性!

 

12.3 枚舉與類的關系


所有的枚舉類型隱性地繼承自 java.lang.Enum。(枚舉實質上還是類!)

package com.bjsxt.enumpro;

public enum Gender {
    男,女;  //男,女 public static final 
    private String name;
    public void setName(String name){
        this.name=name;
    }
    public String getName(){
        return this.name();
    }
}
View Code
package com.bjsxt.enumpro;
/**枚舉在自定義類中的使用*/
public class Person {
    private String name;//姓名
    private int age;//年齡
    private Gender gender;//性別
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public Gender getGender() {
        return gender;
    }
    public void setGender(Gender gender) {
        this.gender = gender;
    }
    public Person(String name, int age, Gender gender) {
        super();
        this.name = name;
        this.age = age;
        this.gender = gender;
    }
    public Person() {
        super();
    }
    
}
View Code
package com.bjsxt.enumpro;

public class TestGender {
    public static void main(String[] args) {
        Gender sex=Gender.女;
        //
        //Gender g=new Gender();//錯誤的,因為枚舉不是類,不能有構造方法
        sex.setName("張三");
        //System.out.println(sex.getName());
        /**枚舉與String類型之間的轉換*/
        String str=sex.toString();
        System.out.println(str);
        /**枚舉-->String  toString()方法
         * String -->枚舉*/
        Gender g=Enum.valueOf(Gender.class, "男");
        System.out.println(g);
        /**枚舉在switch中的使用*/
        switch(g){
        case 男:
            System.out.println("男----------");
            break;
        case 女:
            System.out.println("女---------------");
            break;
        }
        /**枚舉在自定義類中的使用*/
        Person p=new Person("marry", 20, Gender.女);
    }
}
View Code

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM