【寒假學(xué)Java】 第四天收獲: 隨機(jī)數(shù),可變參數(shù)刑枝,JDBC香嗓,訪問控制

正文之前

突遭大變,家道中落装畅。竟淪落至此?坑椤!可悲可嘆B有帧O裨啤!
好吧蚂夕, 就是昨晚停電了不是迅诬,然后早上起來來電了。美滋滋P鲭埂3薮!施施然起床等脂,洗臉?biāo)⒀狼温倩厥祝∮滞k娚弦#坎迹浚。粉楚±绷担TF亮垫?至今都還沒來!伟骨!只能繼續(xù)依靠(充電)寶兒茍活饮潦,持續(xù)飛行(mode),聊以《一世之尊》此書度日5卓俊害晦!輔以《Java編程思想》特铝,好不快哉J钪小!鲫剿?

正文

第一點(diǎn):隨機(jī)數(shù)的巧妙鳄逾!

    public static void main(String[] args) {
        // for(int i=9999;i>999;--i){
        //     zombieNum(i);
        // }
        Random rand=new Random(50);
        int [] a;
        a=new int[rand.nextInt(40)];
        for(int x:a){
            x=rand.nextInt(30);
            System.out.print(x+"   ");
        }
        System.out.println("\n\nThe Length of Array is: "+a.length);
    }
18   23   22   1   1   16   18   6   28   20   2   0   5   8   12   2   17   5   22   5   3   1   1   2   14   28   5   6   26   20   27   26   24   26   14   2   26   

The Length of Array is: 37
[Finished in 1.4s]

這個(gè)結(jié)果不論你運(yùn)行多少次,都會(huì)是一樣的灵莲,我明明用的是Random啊雕凹,Java你哄我啊呢?政冻?枚抵?What Random?But明场, 關(guān)鍵是seed汽摹,以前在C++里面也有,現(xiàn)在不過是換了個(gè)花樣苦锨!關(guān)鍵在此1破!

        Random rand=new Random(50);

若是把上文中的50去掉舟舒,那么每一次運(yùn)行的結(jié)果都不一樣拉庶。如果換掉另一個(gè)數(shù),那么再次運(yùn)行也會(huì)產(chǎn)生一個(gè)始終一致的結(jié)果秃励,假如我換為30氏仗,運(yùn)行就會(huì)一直如下:

18   5   4   16   8   16   

The Length of Array is: 6
[Finished in 1.5s]

但是如果里面啥都不填寫,保持默認(rèn)值夺鲜,那么運(yùn)行一次就會(huì)有不同的結(jié)果:

19   

The Length of Array is: 1
[Finished in 1.5s]
22   13   10   4   13   2   18   28   

The Length of Array is: 8
[Finished in 1.5s]
17   1   22   1   2   25   23   12   27   16   23   24   19   29   12   6   23   

The Length of Array is: 17
[Finished in 1.5s]

這時(shí)候又發(fā)現(xiàn)一個(gè)奧妙皆尔,那么就是,隨機(jī)出來的數(shù)受限于下列代碼中的數(shù)字谣旁。

        a=new int[rand.nextInt(40)];

            x=rand.nextInt(30);

也即是不會(huì) 超過40/30 ,這就是界限床佳!我們可以認(rèn)為 的規(guī)定隨機(jī)出來的數(shù)字的范圍。

突發(fā)奇想榄审,試驗(yàn)下蒙特卡洛的圓周率計(jì)算法了F雒恰!很簡單的想法,一個(gè)邊長為2的正方形內(nèi)切一個(gè)半徑為1 的圓浪感,然后隨機(jī)丟點(diǎn)昔头,在圓內(nèi)的點(diǎn)是總的點(diǎn)的pi/4這個(gè)大概的概率,所以只要算出這個(gè)比例影兽,乘以4??4就是pi了揭斧。代碼如下:

    public static void main(String[] args) {
        // for(int i=9999;i>999;--i){
        //     zombieNum(i);
        // }
        Random rand=new Random();
        
        double [] a=new double[100000];
        double [] b=new double[100000];
        for(int i=0;i<100000;++i){
            a[i]=((double)rand.nextInt(1000))/1000;
            // System.out.print(a[i]+"   ");
        }
        Random rnd=new Random();
        for(int i=0;i<100000;++i){
            b[i]=((double)rnd.nextInt(1000))/1000;
            // System.out.print(b[i]+"   ");
        }
        // System.out.println(a[100]+" "+b[100]);
****        int count=0;
        for(int i=0;i<100000;++i){
            if((a[i]*a[i]+b[i]*b[i])<1){
                count++;
            }
        }

        System.out.println((double)count/100000*4);
        // System.out.println("\n\nThe Length of Array is: "+a.length);
    }

The Result:

3.14608
[Finished in 1.4s]

第二點(diǎn):可變參數(shù)與自動(dòng)包裝機(jī)制

可變參數(shù)列表這是哪兒都逃不開的問題。當(dāng)然峻堰,C++里面用容器我感覺挺好的讹开,雖然感覺容器就是也該加強(qiáng)版的可變長數(shù)組以及自由特性的數(shù)組吧!

  1. 可變參數(shù)列表言簡意賅捐名! 看代碼:
  2. 自動(dòng)包裝機(jī)制類似于多態(tài)旦万,可以傳入一個(gè)子類到形參為父類的地方

二者結(jié)合,很騷氣O馓!成艘!比如用Object做可變長形參的!贺归!騷操作跋健!7骱āG锉!廢話不多說:看代碼:


    public static void CV(Object... s){
        System.out.println("The length of the Object is :"+s.length);
        System.out.println("The kind of the Object is :"+s.getClass());
        for(Object x:s){
            System.out.println(x);
        }
    }

    public static void main(String[] args) {
        Random rand=new Random();
        int a=rand.nextInt(20);
        int b=rand.nextInt(20);
        int c=rand.nextInt(20);
        CV(a,b,c);
        String s1=new String("No .1");
        String s2=new String("No .2");
        String s3=new String("No .3");
        CV(s1,s2,s3);
    }

The Result:

The length of the Object is :3
The kind of the Object is :class [Ljava.lang.Object;
12
7
5
The length of the Object is :3
The kind of the Object is :class [Ljava.lang.Object;
No .1
No .2
No .3
[Finished in 1.6s]

Object 不知道我前面講過沒踱葛?所有類的頭頭丹莲,所有對象的父類或者往上肯定是他沒錯(cuò)的!

不知道把零散的一些元素打包成數(shù)組算是打包機(jī)制不尸诽?我覺得四吧摹!性含!《Java編程思想》里面說把int 的零散元素打包成Integer算是洲赵,或者是把char打包到Character算是的。那就是啊吧商蕴!這些東西現(xiàn)在搞這么清白干嘛叠萍??绪商?翱凉取?上天案裼簟8沟睢独悴!

第三點(diǎn):枚舉類型 enum

這個(gè)東西只說一點(diǎn):與switch可以搭配使用,這就很騷了B辔尽刻炒!以前因?yàn)樵谟邢薹秶鷥?nèi)做switch老是會(huì)要變成1,2自沧,3坟奥,4這些整形數(shù),雖然簡單了拇厢,但是確實(shí)看起來比較費(fèi)勁啊爱谁。十年之后鬼還記得你這是啥?所以用枚舉簡直就是貼合人類的設(shè)計(jì)巴摇管行!至于那一丁點(diǎn)的損耗?那也叫事厨埋?邪媳??


    public static enum Mei{
        Zhang,Yan
    }
    public static void main(String[] args) {
        Mei BG=Mei.Zhang; 
        switch (BG) {
            case Zhang:
                System.out.println("顏雨薇荡陷,我好想你坝晷А!");
                break;
            case Yan:
                System.out.println("張照博废赞,我好喜歡你的徽龟!");
                break;
       }
    }

簡單點(diǎn)說的話就是可以作為一個(gè)集合,你可以看做是1-10這種組合唉地,當(dāng)然如果要使用据悔。不需要new,只要定義下耘沼。比如說Mei作為一個(gè)枚舉集合极颓,如果要使用其中的Zhang,那么就只要

Mei x=Mei.Zhang

就ok的群嗤。跟基本數(shù)據(jù)類型很相似安ぢ !?衩亍骇径!

第四點(diǎn):好神奇的Static啊U叽骸破衔!

今天看到了《Java編程思想》的第6章,訪問控制钱烟,發(fā)現(xiàn)了一個(gè)很神奇晰筛,雖然我早知道了但是還沒有吃透的東西--Static,具體的請看下面的代碼:

import java.util.*;

class Xa{
    public  static  int TY(){
        System.out.println("Can I have a try?");
        return 0;
    }
}
    public static enum Mei{
        Zhang,Yan
    }
    public static void main(String[] args) {
        Random rand=new Random();
        Mei BG=Mei.Zhang;
        switch (BG) {
            case Zhang:
                System.out.println("顏雨薇校仑,我好想你啊传惠!");
                break;
            case Yan:
                System.out.println("張照博迄沫,我好喜歡你的!");
                break;
        }
        int s=Xa.TY();
        System.out.println(s);
     }
}

The Result:

/Library/Java/JavaVirtualMachines/jdk-9.0.1.jdk/Contents/Home/bin/java "-javaagent:/Applications/IntelliJ IDEA.app/Contents/lib/idea_rt.jar=52223:/Applications/IntelliJ IDEA.app/Contents/bin" -Dfile.encoding=UTF-8 -classpath /Users/zhangzhaobo/IdeaProjects/Java_Program_Spirit/out/production/Java_Program_Spirit Java_Program_Spirit
顏雨薇卦方,我好想你把虼瘛!
Can I have a try?
0

Process finished with exit code 0

可以看到盼砍,靜態(tài)的方法根本不需要定義一個(gè)對象尘吗,它的存在只與自身有關(guān),也就是說定義了它浇坐,那么要用到它的第一時(shí)間它就會(huì)實(shí)例化睬捶!所以這其實(shí)就跟C++里面直接在最外層定義一個(gè)函數(shù)是一個(gè)道理,要用到就直接調(diào)用即可近刘,當(dāng)然Java是面向?qū)ο缶幊痰那苊常郧邦^還得加個(gè)類名才可以!觉渴!

第五點(diǎn):訪問權(quán)限控制

default就是沒有控制符的意思介劫,private用于類“助手”的成員。protected用于一些想要在包內(nèi)繼承的地方案淋,而對于包外就沒那么友好了座韵。至于public最為開放也最受人們喜愛。default踢京,既可以偷懶誉碴,而且防范的也挺不錯(cuò)的。老實(shí)說對于這些訪問控制的理解我還不夠瓣距,現(xiàn)在也不需要那么深刻黔帕。以后再說吧!

第六點(diǎn):JDBC旨涝,Java結(jié)合數(shù)據(jù)庫Mysql操作蹬屹,可以做好東西啦!白华!

具體的配置參考下面幾篇文章你就會(huì)了慨默,記得按照我的順序來:

1. Mac 如何配置JDBC的教程,Windows類似intelliJ IDEA for mac with JDBC

2. 下載JDBC的替代弧腥,國內(nèi)版

3. 配置好之后的使用手段

看我的代碼:

import java.sql.*;

public class JDBC_Test {

    public static void main(String[] args){

        String driver = "com.mysql.jdbc.Driver";

        String url = "jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=GBK";

        String user = "root";

        String password = "root";

        try {
            Class.forName(driver);

            Connection conn = DriverManager.getConnection(url, user, password);

            if(!conn.isClosed())
                System.out.println("Succeeded connecting to the Database!");

            Statement statement = conn.createStatement();

            String sql = "select * from tcount_tbl";
            String insert = "insert into tcount_tbl(runoob_author,runoob_count) values(\"張照博\",50)";
//            String delete = "delete from tcount_tbl where runoob_author = \"RUNOOB.COM\" ";
            boolean rs1 = statement.execute(insert);
//            boolean rs1 = statement.execute(delete);
            ResultSet rs = statement.executeQuery(sql);
            System.out.println("-----------------");
            System.out.println("執(zhí)行結(jié)果:");
            System.out.println("-----------------");
            System.out.println(" Name" + "\t\t" + " ID");
            System.out.println("-----------------");

            String name = null;

            while(rs.next()) {

                name = rs.getString("runoob_author");
                name = new String(name.getBytes("UTF-8"),"UTF-8");
                System.out.println(name+ "\t\t" + rs.getString("runoob_count")  );
            }
            rs.close();
            conn.close();
        } catch(ClassNotFoundException e) {
            System.out.println("Sorry,can`t find the Driver!");
            e.printStackTrace();
        } catch(SQLException e) {
            e.printStackTrace();
        } catch(Exception e) {
            e.printStackTrace();
        }
    }
}

我的代碼與上面第三個(gè)教程略有不同厦取,主要集中于對編碼方式的設(shè)置。

        String url = "jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=GBK";
                name = new String(name.getBytes("UTF-8"),"UTF-8");

具體來說是上面兩句管搪,大家伙自己體會(huì)其中的差別哦虾攻,我先溜了U÷颉!效果如下:

/Library/Java/JavaVirtualMachines/jdk-9.0.1.jdk/Contents/Home/bin/java "-javaagent:/Applications/IntelliJ IDEA.app/Contents/lib/idea_rt.jar=57104:/Applications/IntelliJ IDEA.app/Contents/bin" -Dfile.encoding=UTF-8 -classpath "/Users/zhangzhaobo/IdeaProjects/JDBC/out/production/JDBC:/Applications/IntelliJ IDEA.app/Contents/lib/mysql-connector-java-5.1.44-bin.jar" JDBC_Test
Sun Jan 28 23:58:57 CST 2018 WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.
Succeeded connecting to the Database!
-----------------
執(zhí)行結(jié)果:
-----------------
 Name        ID
-----------------
菜鳥教程        10
Google      22
今日成神        11
張照博     50

Process finished with exit code 0

正文之后

今天到此為止霎箍,真的沉迷小說不可自拔了奇钞。今天看了三四個(gè)小時(shí)了!漂坏!煩躁景埃!另外,今天主要是冒雪出去買了零食顶别,還有就是揭開井蓋然后把水泵調(diào)整了位置谷徙。解決了家中飲水問題!驯绎!我覺得自己還是很6的完慧,有圖為證:

揭開井蓋的我,心中MMP剩失,野外的老鼠跑起來飛快的屈尼,不像我室友那種殘疾家養(yǎng)的
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市赴叹,隨后出現(xiàn)的幾起案子鸿染,更是在濱河造成了極大的恐慌,老刑警劉巖乞巧,帶你破解...
    沈念sama閱讀 212,454評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異摊鸡,居然都是意外死亡绽媒,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評論 3 385
  • 文/潘曉璐 我一進(jìn)店門免猾,熙熙樓的掌柜王于貴愁眉苦臉地迎上來是辕,“玉大人,你說我怎么就攤上這事猎提』袢” “怎么了?”我有些...
    開封第一講書人閱讀 157,921評論 0 348
  • 文/不壞的土叔 我叫張陵锨苏,是天一觀的道長疙教。 經(jīng)常有香客問我,道長伞租,這世上最難降的妖魔是什么贞谓? 我笑而不...
    開封第一講書人閱讀 56,648評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮葵诈,結(jié)果婚禮上裸弦,老公的妹妹穿的比我還像新娘祟同。我一直安慰自己,他們只是感情好理疙,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,770評論 6 386
  • 文/花漫 我一把揭開白布晕城。 她就那樣靜靜地躺著,像睡著了一般窖贤。 火紅的嫁衣襯著肌膚如雪广辰。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,950評論 1 291
  • 那天主之,我揣著相機(jī)與錄音择吊,去河邊找鬼。 笑死槽奕,一個(gè)胖子當(dāng)著我的面吹牛几睛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播粤攒,決...
    沈念sama閱讀 39,090評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼所森,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了夯接?” 一聲冷哼從身側(cè)響起焕济,我...
    開封第一講書人閱讀 37,817評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎盔几,沒想到半個(gè)月后晴弃,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,275評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡逊拍,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,592評論 2 327
  • 正文 我和宋清朗相戀三年上鞠,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片芯丧。...
    茶點(diǎn)故事閱讀 38,724評論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡芍阎,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出缨恒,到底是詐尸還是另有隱情谴咸,我是刑警寧澤,帶...
    沈念sama閱讀 34,409評論 4 333
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響重虑,放射性物質(zhì)發(fā)生泄漏俱萍。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,052評論 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧裳食,春花似錦玫恳、人聲如沸辨赐。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽掀序。三九已至,卻和暖如春惭婿,著一層夾襖步出監(jiān)牢的瞬間不恭,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評論 1 266
  • 我被黑心中介騙來泰國打工财饥, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留换吧,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,503評論 2 361
  • 正文 我出身青樓钥星,卻偏偏與公主長得像沾瓦,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子谦炒,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,627評論 2 350