正文之前
突遭大變,家道中落装畅。竟淪落至此?坑椤!可悲可嘆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ù)組吧!
- 可變參數(shù)列表言簡意賅捐名! 看代碼:
- 自動(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ì)了慨默,記得按照我的順序來:
看我的代碼:
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的完慧,有圖為證: