面向?qū)ο?常用類


常用類:系統(tǒng)幫我們封裝好很多功能在類里面,可以直接使用的方法
常用類一般不允許你創(chuàng)建對象,都私有化了構(gòu)造器


Main方法參數(shù)

        當(dāng)點擊運行時,JVM會自動調(diào)用main方法
        public:被JVM調(diào)用的方法,它的權(quán)限要足夠的大
        static:被JVM調(diào)用的方法,不需要創(chuàng)建對象,直接使用類名調(diào)用
        void:被JVM調(diào)用的方法,不需要有任何的返回值
        main:方法的名稱,只能這樣寫,不然JVM識別不了
        String[] args: 以前是指鍵盤錄入.

        public static void main(String[] args){

        }

for循環(huán)和foreach的區(qū)別:
要不要是使用腳標(biāo),使用腳標(biāo)用for循環(huán);不需要使用腳標(biāo)的情況用foreach


Scanner輸入鍵盤信息

        Scanner sc = new Scanner(System.in);
        等待從鍵盤錄入一個數(shù)
        int i = sc.nextInt();
        double d = sc.nextDouble();
        
        System.out.println(i);
        System.out.println(d);
        System.out.println("--------");
        
        從鍵盤錄入一個字符串
        String s = sc.nextLine();
        System.out.println(s);

數(shù)組的拷貝

        arraycopy
        java.lang是不需要導(dǎo)入的
        src - 源數(shù)組肚邢。
        srcPos - 源數(shù)組中的起始位置映胁。
        dest - 目標(biāo)數(shù)組。
        destPos - 目標(biāo)數(shù)據(jù)中的起始位置。
        length - 要復(fù)制的數(shù)組元素的數(shù)量领铐。 
    public static void main(String[] args) {
        
        arraycopy
        java.lang是不需要導(dǎo)入的
        src - 源數(shù)組。
        srcPos - 源數(shù)組中的起始位置逢唤。
        dest - 目標(biāo)數(shù)組彻消。
        destPos - 目標(biāo)數(shù)據(jù)中的起始位置。
        length - 要復(fù)制的數(shù)組元素的數(shù)量嚣崭。 
        
        int[] src = {1,2,3,4,5,6};
        int[] desc = new int[10];//開辟了10塊空間
        
        System.arraycopy(src, 2, desc,0, 4);
        
        System.out.println(Arrays.toString(src));//[1, 2, 3, 4, 5, 6]
        System.out.println(Arrays.toString(desc));//[3, 4, 5, 6, 0, 0, 0, 0, 0, 0]
        
    }

要知道它的在哪個類當(dāng)中,arraycopy存在System這個類當(dāng)中
一定得要知道什么類當(dāng)中有什么方法


計算代碼耗時
System.currentTimeMills();

    public static void main(String[] args) {

        獲取當(dāng)前時間的毫秒值 1 秒 = 1000毫秒
        從1970開始到現(xiàn)在的毫秒數(shù)
        做測試一個執(zhí)行的時間

        long time1 = System.currentTimeMillis();
        // System.out.println(time);

        for (int i = 0; i < 1000000; i++) {
            System.out.println(i);
        }

        long time2 = System.currentTimeMillis();
        
        long time3 = time2 - time1;
        System.out.println("總耗時"+time3+"毫秒");
    }

gc方法與對象銷毀

public class SystemMethod {
    
    只有當(dāng)一個對象被回收時,才會自動調(diào)用的一個方法
    @Override
    protected void finalize() throws Throwable {
        super.finalize();
        System.out.println("我被回收了");
    }
    
    public static void main(String[] args) {
        
        終止當(dāng)前正在運行的Java虛擬機
        應(yīng)用于圖形化界面
        System.exit(0);//0 正常退出  負(fù)數(shù)異常退出
        

        立即運行垃圾回收器笨触。一個對象并不是立馬被回收的
        new SystemMethod();
        new SystemMethod();
        System.gc();      一般都不會主動去調(diào)用該方法

    }

}

Math數(shù)學(xué)類

    public static void main(String[] args) {

        System.out.println(Math.PI);// π

        求兩個數(shù)的最大值
        int res = Math.max(20, 10);
        System.out.println(res);

        求兩個數(shù)的最小值
        Math.min(5, 6);

        返回一個[0,1) 的隨機數(shù)
        System.out.println(Math.random());

        0-100的隨機數(shù),強制轉(zhuǎn)換成int類型,向下取整
        int res2 = (int) (Math.random() * 100);
        System.out.println(res2);

        開平方根
        double res3 = Math.sqrt(4);
        System.out.println(res3);
    }

大精度小數(shù)

java.math
類 BigDecimal

    public static void main(String[] args) {
        System.out.println("0.09+0.01   =   " + (0.09 + 0.01));//0.09999999999999999
        System.out.println("-----------");
        
        //表示金錢都是用BigDecimal類型
        BigDecimal num1 = new BigDecimal(0.09);
        BigDecimal num2 = new BigDecimal(0.01);
        
        System.err.println(num1.add(num2));//還未正確
        //0.09999999999999999687749774324174723005853593349456787109375

        下面才是正確的
        BigDecimal num1 = new BigDecimal("0.09");
        BigDecimal num2 = new BigDecimal("0.01");
    }
float,double 表示小數(shù)   不能表示精確的小數(shù)

java.math
類 BigInteger
大整形

        // BigInteger
        System.out.println(Long.MAX_VALUE);

        BigInteger b= new BigInteger("100000"+Long.MAX_VALUE);
        System.out.println(b);

總結(jié)復(fù)習(xí)


字符串本質(zhì)及分類
什么是字符串?
把多個字符串連在一起

字符串分類
1.可變字符串(StringBuffer,StringBuilder): 定義好之后,還可以進行修改, 修改是,不會創(chuàng)建新的內(nèi)存地址 (內(nèi)存地址不可變)
2.不可變字符串(String): 定義好了,就不能再去改變, 在內(nèi)存當(dāng)中不能再去修改了,修改就會創(chuàng)建新的內(nèi)存地址

        字符串的本質(zhì)
        其實它是一個 chat[ ] 類型的數(shù)組
        private final char value[ ];

String, StringBuffer, StringBuilder 都實現(xiàn)了:CharSequence接口 ,遵守了規(guī)范可以使用里面的方法


字符串的兩種比較

        不可變字符串(String)
        String str = "ABC";  在內(nèi)存當(dāng)中不能再去修改了,修改就會創(chuàng)建新的地址
        str = "cd";

字符串是放到方法區(qū)常量池當(dāng)中,這里還沒講常量池,先放到堆當(dāng)中

String創(chuàng)建 
        1.直接賦值 String str = "ABC";
        2.通過構(gòu)造器來創(chuàng)建  String str = new String("ABC");

字符串對象為空

        1.表示引用為空  String str = null;  還沒初始化,沒有分配內(nèi)存空間
        2.表示空字符串  String str = " ";    已經(jīng)創(chuàng)建了對象,已經(jīng)分配了內(nèi)存,內(nèi)容為空

字符串的比較
比較兩個字符串相不相等

  1. == 比較兩個內(nèi)存地址是否相等
        String str = "ABC";

        String str2 = new String("ABC");

        if (str == str2) {  比的是對象的地址
            System.out.println("相等");
        }else {
            System.out.println("不相等");
        } 不相等
  1. 使用在object中的一個方法 equals 和 == 相同
        因為 String 類覆蓋了 equals 方法
        1.先去比較對象地址是否相等
        2.如果不相等,再去判斷是否為String, 是的話再去逐個判斷每一個字符相不相等
        if (str.equals(str2)) {  相等
            System.out.println("相等");
        }else {
            System.out.println("不相等");
        }

String類覆蓋了 equals 方法
建議子類,自己去覆蓋此方法,自己在內(nèi)部當(dāng)中去根據(jù)自己的需求去判斷兩個值是否相等


字符串創(chuàng)建以及常量池內(nèi)存分析

常量--->方法區(qū)當(dāng)中有一個常量池

        String str = "ABC";
        String str3 = "ABC";
        System.out.println(str==str3);  true

        String str2 = new String("ABC");

        1.String str = "ABCD";   局部變量
        使用String str = "ABCD";創(chuàng)建字符串
        要么創(chuàng)建一個對象,要么不創(chuàng)建
        會先到常量池當(dāng)中看一下有沒有該字符串常量
        如果說已經(jīng)有了,就直接使用,不會創(chuàng)建新的字符串常量池地址
        如果常量池當(dāng)中沒有的話,就會在常量池當(dāng)中創(chuàng)建一個對象

        2.String str2 = new String("ABCD");  創(chuàng)建對象
        至少得要創(chuàng)建一個對象,       因為使用了new 在堆當(dāng)中,至少得要創(chuàng)建一個對象
        看一下,常量池當(dāng)中,有沒有傳入的字符串常量
        如果沒有的話,會創(chuàng)建一個字符串常量,放到常量池當(dāng)中

        System.out.println(str2);    ABCD    會在堆中找到它的創(chuàng)建地址,這個地址會有一個常量引用,所以就把ABCD打印出來了

字符串工具類設(shè)計

    給一個字符串,判斷是否為空,如果為空返回false
    不為空就返回一個true
    一個方法當(dāng)中有return 所在的方法 會立即停止執(zhí)行

定義一個方法
    static boolean hasLength(String str) {
        if (str != null && !"".equals(str.replace(" ", ""))) {// 不為空
            return true;
        } // 為空
        return false;//一個方法當(dāng)中有return 所在的方法 會立即停止執(zhí)行
    }
可以直接簡寫成
    static boolean hasLength(String str) {
            return str != null && !"".equals(str.replace(" ", ""));
    }
在main方法中執(zhí)行
        boolean res = hasLength(s);
        System.out.println(res);

把方法抽成一個工具類
public class StringUtils {

    private StringUtils() {};
    
    工具類有兩種情況:1.單例模式,2.全部方法搞成靜態(tài)
    static boolean hasLength(String str) {
        return str != null && !"".equals(str.replace(" ", ""));
    }
}
    System.out.println(StringUtils.hasLength(s));

Random類


        構(gòu)造方法摘要 Random() 創(chuàng)建一個新的隨機數(shù)生成器。 

        Random r = new Random();
        int res = r.nextInt();//隨機生成一個int類型的數(shù)
        System.out.println(res);

        System.out.println(r.nextDouble());
        System.out.println(r.nextBoolean());


        Random(long seed) 使用單個 long 種子創(chuàng)建一個新的隨機數(shù)生成器雹舀。
        偽隨機數(shù) , 相同的種子,生成的隨機數(shù)是一樣的

        Random r2 = new Random(11);//傳入?yún)?shù),生成的隨機數(shù)是一樣的
        System.out.println(r2.nextInt());
        生成34-179之間的隨機數(shù)
        34+ [0,145)
        nextInt(145)  隨機生成0到145之間的隨機數(shù)
        new Random().nextInt(145);//隨機生成0到145之間的隨機數(shù)
        System.out.println(34+new Random().nextInt(145));//生成34-179之間的隨機數(shù)


生成UUID
UUID:通用唯一識別符
在一臺機器上生成的數(shù)字,每一臺機器都不一樣

UUID如何生成:
通過當(dāng)前時間,跟當(dāng)前電腦網(wǎng)卡生成一段字符

        String uuid = UUID.randomUUID().toString();
        System.out.println(uuid);//每次生成都不一樣

日期類Date
類 Date 表示特定的瞬間芦劣,精確到毫秒。

使用String,int類型表示日期不好
要使用java當(dāng)中專門提供的日期類型
class Employee{
    int age;//年齡
    String hireDate;//工齡
}

public class DateDemo {
    
    public static void main(String[] args) {
        創(chuàng)建一個日期對象
        Date date = new Date();//Fri Nov 23 23:16:10 CST 2018
        System.out.println(date);


        獲取當(dāng)前時間的毫秒值 
        //public static native long currentTimeMillis();
        native 是原生的方法,使用C++寫的,所以看不到如何實現(xiàn)
        long curTime = System.currentTimeMillis();
        
        
        把一個毫秒值轉(zhuǎn)成日期
        Date date2 = new Date(curTime);
        System.out.println(date2);
        
        轉(zhuǎn)成中國人喜歡風(fēng)格,方法著畫橫線表示過期了
        String str = date2.toLocaleString();
        System.out.println(str);//2018-11-23 23:12:37
        
        把一個日期類型轉(zhuǎn)成時間戳(毫秒值)
        System.out.println(date2.getTime());

    }
    
}

生成隨機驗證碼

    public static void main(String[] args) {

        生成驗證碼
        首先是想到:5位隨機數(shù) UUID生成的是16進制
        String res = UUID.randomUUID().toString();
        System.out.println(res);
        System.out.println(res.substring(0, 5));
        System.out.println("----------");

        不夠我們的需求,采取下列措施
        String str = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
        str += str.toLowerCase();
        str += "0123456789";
        System.out.println(str);// str字符拼接結(jié)果

        從所有的字符當(dāng)中隨機生成5個出來
        隨機取5個出來
        每取出一個結(jié)果,在原來的基礎(chǔ)進行拼接

        StringBuilder sb = new StringBuilder(5);// 指定StringBuilder空間大小

        for (int i = 0; i < 5; i++) {
            腳標(biāo)需要隨機的值 (0 62:字符串的長度)
            int index = new Random().nextInt(str.length());// 隨機生成腳標(biāo), 0 - 62之間的隨機數(shù),不包括62

            char ch = str.charAt(index);// char類型接收str的charAt取出隨機腳標(biāo)的字符

            sb.append(ch);// 與空的sb StringBuilder 拼接

        }
        
        System.out.println(sb);
    }


日期格式化

字符串工具類
public class StringUtils {

    public static boolean hb(String str) {

        return (str != null && !str.equals(str.replace(" ", "")));

    }

    為空就為true
    public static boolean isBlank(String str) {
        return !StringUtils.hb(str);
    }

}
public static void main(String[] args) throws ParseException {//聲明異常

        日期格式化
        Date date = new Date();
        System.out.println(date.toLocaleString());
        //使用toLocaleString() 過時方法生成 2018-11-24 18:05:48

        DateFromat是一個日期/時間格式化子類的抽象類
        getInstance();獲取為日期/時間SHORT風(fēng)格的默認(rèn)日期/時間格式器
        DateFormat df = DateFormat.getInstance();

        對指定的日期進行格式化
        String time = df.format(date);
        System.out.println(time);//getInstance()SHORT風(fēng)格 18-11-24 下午1:22

        System.out.println("-----------");

        dateStyle日期風(fēng)格:長日期LONG,短日期SHORT
        DateFormat df2 = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.SHORT);
        
        日期風(fēng)格長,時間風(fēng)格短
        String time2 = df2.format(date);
        System.out.println(time2);//getDateTimeInstance傳入日期風(fēng)格,時間風(fēng)格 2018年11月24日 下午1:28

        System.out.println("------");
        DateFormat df3 = DateFormat.getTimeInstance();
        String time3 = df3.format(date);
        System.out.println(time3);//getTimeInstance() 獲得時間18:05:48

        把一個字符串轉(zhuǎn)成日期
        DateFormat df4 = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.SHORT);
        String newStr = "2018年11月24日 下午5:59";
        Date date2 = df4.parse(newStr);
        System.out.println(date2);//Sat Nov 24 17:59:00 CST 2018
    }

自定義日期模式
自定義日期模式:SimpleDateFormat

在DateFormat的基礎(chǔ)上進行增強

定義了以下模式字母
        Date date = new Date();//創(chuàng)建一個日期
        
        SimpleDateFormat sd = new SimpleDateFormat();//創(chuàng)建一個自定義日期
        定義自己想要什么樣的模式
        String pattern = "yyyy-MM-dd HH:mm:ss";//定義日期模式格式
        sd.applyPattern(pattern);//接收格式值,申請模式
        
        以指定的模式格式化哪個日期
        String res=  sd.format(date);//生成日期
        System.out.println(res);

日期工具類設(shè)計

Demo類運用日期工具類方法
import java.util.Date;
public class Demo {

    public static void main(String[] args)  throws ParseException{

        String res = DateUtil.dateToString(new Date(), "yyyy-MM-dd hh:mm:dd");
        System.out.println(res);
        String res2 = DateUtil.dateToString(new Date(), null);
        System.out.println(res2);
        String res3 = DateUtil.dateToString(new Date());
        System.out.println(res3);

字符串轉(zhuǎn)時間
        Date date = DateUtils.StringToDate("2018-12-16 19/16/12","yyyy-MM-dd hh/mm/ss");
        System.out.println(date);//Sun Dec 16 19:16:12 CST 2018

    }
}

日期工具類
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class DateUtil {
    
    private static final String DEFAULT_PATTERN = "yyyy-MM-dd hh:mm:dd:ss";
    使用常量,使得程序的可擴展性增加

    private DateUtil() {
    };

    1.把一個日期類型轉(zhuǎn)成字符串 返回已經(jīng)轉(zhuǎn)換好的字符串
    public static String dateToString(Date date, String pattern) {

        牢記一個工具類,想要別人使用,記得加public不然在其他包中不能使用你的方法

        判斷傳入的模式是否為空
        為空的話,設(shè)置一個默認(rèn)的模式

        if (StringUtils.isBlank(pattern)) {// true時
            為空的話,設(shè)置一個默認(rèn)的模式
            pattern =DEFAULT_PATTERN;

        }

        SimpleDateFormat sd = new SimpleDateFormat();
        sd.applyPattern(pattern);
        String res = sd.format(date);

        return res;
    }

    public static String  dateToString(Date date){
        
        return DateUtil.dateToString(date, "");
    }

    2.給一個字符串可以轉(zhuǎn)成日期
    public static Date  StringToDate(String str,String pattern) throws ParseException{
        
        if(StringUtils.isBlank(pattern)) {
            
            pattern =DEFAULT_PATTERN;
            
        }
        
        SimpleDateFormat sd = new SimpleDateFormat();
        sd.applyPattern(pattern);
        
        Date res = sd.parse(str);
        return res;
    }

    public static void main(String[] args) {

    }

}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末说榆,一起剝皮案震驚了整個濱河市虚吟,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌签财,老刑警劉巖串慰,帶你破解...
    沈念sama閱讀 211,376評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異唱蒸,居然都是意外死亡邦鲫,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,126評論 2 385
  • 文/潘曉璐 我一進店門神汹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來庆捺,“玉大人,你說我怎么就攤上這事屁魏√墼铮” “怎么了?”我有些...
    開封第一講書人閱讀 156,966評論 0 347
  • 文/不壞的土叔 我叫張陵蚁堤,是天一觀的道長醉者。 經(jīng)常有香客問我但狭,道長,這世上最難降的妖魔是什么撬即? 我笑而不...
    開封第一講書人閱讀 56,432評論 1 283
  • 正文 為了忘掉前任立磁,我火速辦了婚禮,結(jié)果婚禮上剥槐,老公的妹妹穿的比我還像新娘唱歧。我一直安慰自己,他們只是感情好粒竖,可當(dāng)我...
    茶點故事閱讀 65,519評論 6 385
  • 文/花漫 我一把揭開白布颅崩。 她就那樣靜靜地躺著,像睡著了一般蕊苗。 火紅的嫁衣襯著肌膚如雪沿后。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,792評論 1 290
  • 那天朽砰,我揣著相機與錄音尖滚,去河邊找鬼。 笑死瞧柔,一個胖子當(dāng)著我的面吹牛漆弄,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播造锅,決...
    沈念sama閱讀 38,933評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼撼唾,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了哥蔚?” 一聲冷哼從身側(cè)響起倒谷,我...
    開封第一講書人閱讀 37,701評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎肺素,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體宇驾,經(jīng)...
    沈念sama閱讀 44,143評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡倍靡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,488評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了课舍。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片塌西。...
    茶點故事閱讀 38,626評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖筝尾,靈堂內(nèi)的尸體忽然破棺而出捡需,到底是詐尸還是另有隱情,我是刑警寧澤筹淫,帶...
    沈念sama閱讀 34,292評論 4 329
  • 正文 年R本政府宣布站辉,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏饰剥。R本人自食惡果不足惜殊霞,卻給世界環(huán)境...
    茶點故事閱讀 39,896評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望汰蓉。 院中可真熱鬧绷蹲,春花似錦、人聲如沸顾孽。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,742評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽若厚。三九已至拦英,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間盹沈,已是汗流浹背龄章。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留乞封,地道東北人做裙。 一個月前我還...
    沈念sama閱讀 46,324評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像肃晚,于是被迫代替她去往敵國和親锚贱。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,494評論 2 348

推薦閱讀更多精彩內(nèi)容

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法关串,類相關(guān)的語法拧廊,內(nèi)部類的語法,繼承相關(guān)的語法晋修,異常的語法吧碾,線程的語...
    子非魚_t_閱讀 31,598評論 18 399
  • 就在他們準(zhǔn)備出發(fā)的時候,他們聽到封條被撕開的聲音…… “老大墓卦,你們有沒有聽到什么聲音倦春?...
    時桐閱讀 331評論 0 1
  • 1、 親戚家小孩今年中考落剪,沒考上睁本,甚至連高中的錄取線都沒過,孩子今后怎么辦忠怖? 今年教育局招生制度很嚴(yán)呢堰,即使上萬的贊...
    零度河閱讀 513評論 0 1
  • 親愛的乖女兒: 見字如面,此刻我正在寧靜的珠江之濱凡泣,被譽為華南最高學(xué)府的校園“國立中山大學(xué)”給你寫信枉疼,所謂“每逢佳...
    不谷鳥閱讀 270評論 3 1
  • 夜皮假, 路燈并不昏暗。 無風(fēng)往衷, 梔子花努力著壯大花苞钞翔, 力求完美綻放! 有首熟悉的歌席舍, 不由自主在心底...
    陌生的過客_c2cc閱讀 207評論 0 1