大四Java复习笔记之Java基础
2019獨角獸企業重金招聘Python工程師標準>>>
一、static和final
? ? 學習Java那么久,好像自己就沒有怎么用過final,所以對fianl的理解不夠。final不但出現在變量的修飾里面,還可以出現在方法和類的修飾。final類不能被繼承,因此final類的成員方法沒有機會被覆蓋,默認都是final的。final方法鎖定方法,子類不能覆蓋修改方法,同時方法會高效。final變量final修飾的成員變量表示常量,只能被賦值一次,賦值后值無法改變,final是指引用的變量不能不能變,但是引用所指向的對象中的內容可以變,同時如果是null的final變量可以賦值一次。
二、一個“.java”文件可以包含多個類
? ? 可以有多個類,不過只能有一個“public”的類,而且名字跟文件名一致。
三、&和&&
? ? &和&&都可以作為邏輯運算的與的運算符。但是&&會出現短路功能,也就是說如果前面的條件不成立的時候,后面的條件不會執行,例如:(1==2&&j++>1)。
? ? &還可以作為位運算,&表示按位與運算(相同位的兩個數字都為1,則為1;若有一個不為1,則為0)。
四、integer和int
? ? int是Java的8種原始數據類型之一。Java為每個原始數據提供封裝類,integer是Java為int提供的封裝類。int的默認值是0,而integer的默認值是null。
五、Java中string的創建
? ? Java中String是一個特殊的包裝類數據有兩種創建形式:
? ? 1、String s = "abc";
? ? 2、String s = new String("abc"); ? ?
? ? 第一種先在棧中創建一個對String類的對象引用變量s,然后去查找"abc"是否被保存在字符串常量池中,如果沒有則在棧中創建三個char型的值'a'、'b'、'c',然后在堆中創建一個String對象object,它的值是剛才在棧中創建的三個char型值組成的數組{'a'、'b'、'c'},接著這個String對象object被存放進字符串常量池,最后將s指向這個對象的地址,如果"abc"已經被保存在字符串常量池中,則在字符串常量池中找到值為"abc"的對象object,然后將s指向這個對象的地址。
第一種特點:JVM會自動根據棧中數據的實際情況來決定是否有必要創建新對象。
? ? 第二種可以分解成兩步1、String object = "abc"; 2、String s = new String(object); 第一步參考第一種創建方式,而第二步由于"abc"已經被創建并保存到字符串常量池中,因此jvm只會在堆中新創建一個String對象,它的值共享棧中已有的三個char型值。
? ? 第二種特點:一概在堆中創建新對象,而不管其字符串值是否相等,是否有必要創建新對象。
六、error和exception
? ? error 表示恢復不是不可能但很困難的情況下的一種嚴重問題。比如說內存溢出。不可能指望程序能處理這樣的情況。 exception 表示一種設計或實現問題。也就是說,它表示如果程序運行正常,從不會發生的情況。
七、sleep() 和 wait()?
? ? sleep就是正在執行的線程主動讓出cpu,cpu去執行其他線程,在sleep指定的時間過后,cpu才會回到這個線程上繼續往下執行,如果當前線程進入了同步鎖,sleep方法并不會釋放鎖,即使當前線程使用sleep方法讓出了cpu,但其他被同步鎖擋住了的線程也無法得到執行。wait是指在一個已經進入了同步鎖的線程內,讓自己暫時讓出同步鎖,以便其他正在等待此鎖的線程可以得到同步鎖并運行,只有其他線程調用了notify方法(notify并不釋放鎖,只是告訴調用過wait方法的線程可以去參與獲得鎖的競爭了,但不是馬上得到鎖,因為鎖還在別人手里,別人還沒釋放。如果notify方法后面的代碼還有很多,需要這些代碼執行完后才會釋放鎖,可以在notfiy方法后增加一個等待和一些代碼,看看效果),調用wait方法的線程就會解除wait狀態和程序可以再次得到鎖后繼續向下運行。
八、run()和start()
? ? 在java里start()是啟動線程,run()是啟動線程后執行的方法。
九、arraylist和vector
? ? 1、同步性
? ? vector線程安全,arraylist非線程安全。
? ? 備注:對于Vector&ArrayList、Hashtable&HashMap,要記住線程安全的問題,記住Vector與Hashtable是舊的,是java一誕生就提供了的,它們是線程安全的,ArrayList與HashMap是java2時才提供的,它們是線程不安全的。所以,我們講課時先講老的。
? ? 2、數據增長
? ? arraylist和vector都會用一個初始的容量大小,當存儲超出大小的時候,vector增長原來的一倍,arraylist增長原來的0.5倍。
十、list和map
? ? 一個是存儲單列數據的集合,另一個是存儲鍵和值這樣的雙列數據的集合。list是有順序的,并且允許有重復;map中存儲的數據沒有順序,其鍵值不允許存在重復,但是值是允許重復的。
十一、arraylist、vector和linklist
? ? arraylist和vector都是使用數組方式存儲數據。此數組元素數大于實際存儲的數據以便增加和插入元素。它們允許按序號索引元素,但是插入元素也涉及數組元素移動等內存操作,所以索引快和插入慢。vector由于使用線程安全,所以效率相對arraylist差,其實在新的jvm上它們的效率相差不大。linklist采用雙向鏈表實現存儲,按序號索引數據需要按前向遍歷或者后向遍歷,但是插入數據時,只要記錄前后項數據既可,所以插入速度快。linklist是非線程安全。
十二、heap和stack
? ? Java的內存分為兩類,一類是棧內存,一類是堆內存。棧內存是指程序進入方法時,會為這個方法單獨分配一塊私屬存儲空間,用于存儲這個方法內部的局部變量。當這個方法結束時,分配給這個方法的棧也會釋放,這個棧里面的變量也會隨之釋放。
? ? 堆與棧作用不同的內存,一般用于存放不放在當前方法棧中的數據,例如使用new創建的對象都放在堆里,所以它不會隨這方法的結束也消失。方法中的局部變量使用final修飾后,放在堆中而不是棧中。
轉載于:https://my.oschina.net/u/1461902/blog/345421
總結
以上是生活随笔為你收集整理的大四Java复习笔记之Java基础的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: net-ldap for ruby op
- 下一篇: 高性能Javascript:高效的数据访