繼承 1、繼承的目的是擴充類的功能
2、java中一個子類只能繼承一個父類
3、java不允許多重繼承,允許多層繼承
4、父類中private方法不能在子類中被default覆寫,如果子類中有重名的方法,那不叫覆寫,而是重新
定義了一個方法。
5、父類和子類中定義同名的屬性,子類會覆蓋父類中的屬性,super.getA()調用的是父類中的屬性。
this.getA()調用的是子類的屬性
重載和覆寫的區別 1、單詞:overloading overriding
2、定義:方法名稱相同,參數的類型或者個數不同 方法的名稱參數的類型傳回值的類型等都相同
對許可權沒有要求 被覆寫的方法不能有子類方法更嚴格的許可權
3、範圍:發生在同一個類中 發生在繼承類中
super關鍵字 表示的是從子類調用父類中的指定操作,例如:調用屬性、方法、構造等。因為在子類的執行個體化過程中,會預設調用父類中的無參構造方法,如果現在希望調用有參構造,則必須在子類中指明要調用的有參構造方法。例如:super(name,age)
this 和 super的區別 1、屬性訪問:this訪問本類中的屬性,如果本類中沒有此屬性,則從父類中繼續尋找 super是訪問父類中的屬性。
2、存取方法:this訪問本類中的方法,如果本類中沒有此方法,則在父類中尋找。 super是直接存取父類中的方法。
3、調用構造:this調用本類中的構造,必須放在構造方法的首行。 super調用父類構造,必須放在子類方法的首行。
4、this表示的當前對象。
5、this和super兩個關鍵字在構造中不能同時出現。
math類的用法 1. Math.abs(int a):傳回值的絕對值。參數可以的類型int 、float、double、long
2. Math.acos(double a):返回角的反餘弦。
3. Math.asin(double a):返回角的反正弦。
4. Math.atan(double a):返回角的反正切。
5. Math.atan2(double a):將矩形座標(x,y)轉換成極座標(r,theta)。
6. Math.cbrt(double a):返回double 值的立方根。
7. Math.ceil(double a):返回最小的(最接近負無窮大)double值,該值大於或等於參數,並且等於某個整數。
8. Math.cos(double a):返回角的三角餘弦。
9. Math.cosh(double x):返回double 值的雙曲線餘弦。
10. Math.exp(double a):返回歐拉數e 的double 次冪的值。
11. Math.floor(double a):返回最大的(最接近正無窮大)double 值,該值小於或等於參數,並且等於某個整數。
12. Math.max(int a,int b):返回兩個值中較大的一個值。參數包含的類型 int、float、long、double。
13. Math.min(int a,int b):返回兩個值中較小的一個值。參數包含的類型 int、float、long、double。
14. Math.random():返回帶正號的double值。
15. Math.round(double a):返回最接近參數的long。
16. Math.round(float a):返回最接近參數的int。
int除法的問題 12/10=1
12f/10=1.2
12d/10=1.2
12/10f=1.2
12/10d=1.2
------------Double型----------
2.3/0.0 = Infinity
2.3/-0.0 = -Infinity
0.0/0.0 = NaN
0.0/-0.0 = NaN
0.0/0.1 = 0.0
0.0/-0.1 = -0.0
------------Float型----------
2.3/0.0 = Infinity
2.3/-0.0 = -Infinity
0.0/0.0 = NaN
0.0/-0.0 = NaN
0.0/-0.1 = -0.0
幾個設計模式 1、原廠模式
2、模板方法模式:模板方法:定義一個操作中的演算法的骨架,而將一些步驟延遲到子類中。 T模板方法使得子類可以不改變一個演算法的結構即可重定義該演算法的某些特定步驟。
1)模板方法模式是基於繼承的代碼複用基本技術,模板方法模式的結構和用法也是物件導向設計的核心之一。在模板方法模式中,可以將相同的代碼放在父類中,而將不同的方法實現放在不同的子類中。
2)在模板方法模式中,我們需要準備一個抽象類別,將部分邏輯以具體方法以及具體建構函式的形式實現,然後聲明一些抽象方法來讓子類實現剩餘的邏輯。不同的子類可以以不同的方式實現這些抽象方法,從而對剩餘的邏輯有不同的實現,這就是模板方法模式的用意。
3、單例模式
public class Singleton { private static final Singleton singleton = null; private Singleton() { } public static Singleton getInstance() { if (singleton== null) { synchronized (Singleton.class) { if (singleton== null) { singleton= new Singleton(); } } } return singleton; } }
第一個條件是說,如果執行個體建立了,那就不需要同步了,直接返回就好了。
不然,我們就開始同步線程。
第二個條件是說,如果被同步的線程中,有一個線程建立了對象,那麼別的線程就不用再建立了
static 用法 一般調用static屬性的時候,採用“類名稱.屬性”的方式
static方法不能調用非static屬性,也不能調用非static方法, 因為static的屬性和方法在對象沒有執行個體化之前就已經初始化了。
其他的應用:可以統計一共產生了多少個對象。
java中的記憶體空間類型 棧記憶體:儲存對象的名稱,也就是訪問堆記憶體的地址
堆記憶體:儲存每個對象的基本屬性
全域資料區:儲存static類型的屬性
全域代碼區:儲存所有方法的定義
hashmap與hashtable區別 HashMap和Hashtable都實現了Map介面,但決定用哪一個之前先要弄清楚它們之間的分別。主要的區別有:執行緒安全性,同步(synchronization),以及速度。
HashMap幾乎可以等價於Hashtable,除了HashMap是非synchronized的,並可以接受null(HashMap可以接受為null的索引值(key)和值(value),而Hashtable則不行)。
HashMap是非synchronized,而Hashtable是synchronized,這意味著Hashtable是安全執行緒的,多個線程可以共用一個Hashtable;而如果沒有正確的同步的話,多個線程是不能共用HashMap的。Java 5提供了ConcurrentHashMap,它是HashTable的替代,比HashTable的擴充性更好。另一個區別是HashMap的迭代器(Iterator)是fail-fast迭代器,而Hashtable的enumerator迭代器不是fail-fast的。所以當有其它線程改變了HashMap的結構(增加或者移除元素),將會拋出ConcurrentModificationException,但迭代器本身的remove()方法移除元素則不會拋出ConcurrentModificationException異常。但這並不是一個一定發生的行為,要看JVM。這條同樣也是Enumeration和Iterator的區別。
由於Hashtable是安全執行緒的也是synchronized,所以在單線程環境下它比HashMap要慢。如果你不需要同步,只需要單一線程,那麼使用HashMap效能要好過Hashtable。
HashMap不能保證隨著時間的推移Map中的元素次序是不變的。
forward和redirect的區別 答:forward是伺服器請求資源,伺服器直接存取目標地址的URL,把那個URL的響應內容讀取過來,然後把這些內容再發給瀏覽器,瀏覽器根本不知道伺服器發送的內容是從哪兒來的,所以它的地址欄中還是原來的地址。
redirect就是服務端根據邏輯,發送一個狀態代碼,告訴瀏覽器重新去請求那個地址,一般來說瀏覽器會用剛才請求的所有參數重新請求,所以session,request參數都可以擷取
前者僅是容器中控制權的轉向,在用戶端瀏覽器地址欄中不會顯示出轉向後的地址;後者則是完全的跳轉,瀏覽器將會得到跳轉的地址,並重新發送請求連結。這樣,從瀏覽器的地址欄中可以看到跳轉後的連結地址。所以,前者更加高效,在前者可以滿足需要時,盡量使用forward()方法,並且,這樣也有助於隱藏實際的連結。在有些情況下,比如,需要跳轉到一個其它伺服器上的資源,則必須使用sendRedirect()方法。
js截取字串 函數:split()
功能:使用一個指定的分隔字元把一個字串分割儲存到數組
例子:
str=”jpg|bmp|gif|ico|png”;
arr=theString.split(”|”);
//arr是一個包含字元值”jpg”、”bmp”、”gif”、”ico”和”png”的數組
函數:John()
功能:使用您選擇的分隔字元將一個數組合并為一個字串
例子:
var delimitedString=myArray.join(delimiter);
var myList=new Array(”jpg”,”bmp”,”gif”,”ico”,”png”);
var portableList=myList.join(”|”);
//結果是jpg|bmp|gif|ico|png
函數:substring()
功能:字串截取,比如想從”MinidxSearchEngine”中得到”Minidx”就要用到substring(0,6)
函數:indexOf()
功能:返回字串中匹配子串的第一個字元的下標
var myString=”JavaScript”;
var w=myString.indexOf(”v”);w will be 2
var x=myString.indexOf(”S”);x will be 4
var y=myString.indexOf(”Script”);y will also be 4
var z=myString.indexOf(”key”);z will be -1
substr 方法
返回一個從指定位置開始的指定長度的子字串。
stringvar.substr(start [, length ])
參數
stringvar
必選項。要提取子字串的字串文字或 String 對象。
start
必選項。所需的子字串的起始位置。字串中的第一個字元的索引為 0。
length
可選項。在返回的子字串中應包括的字元個數。
說明
如果 length 為 0 或負數,將返回一個Null 字元串。如果沒有指定該參數,則子字串將延續到
stringvar 的最後
function SubstrDemo(){
var s, ss; // 聲明變數。
var s = "The rain in Spain falls mainly in the plain.";
ss = s.substr(12, 5); // 擷取子字串。
return(ss); // 返回 "Spain"。
}
java 特徵
繼承 封裝 多態 抽象
java 取餘 和模數 的區別 取餘
rem(3,2)=1
rem(-3,-2)=-1
rem(3,-2)=1
rem(-3,2)=-1
2.模數
mod(3,2)=1
mod(-3,-2)=-1
mod(3,-2)=-1
mod(-3,2)=1
由此可以看出,rem和mod是有符號區別的。
當除數與被除數的符號相同時,rem和mod的結果是完全相同的;當除數與被除數的符號不相同時,結
果不同。
具體說,rem結果的符號與被除數相同;mod結果的符號與除數相同。
sql 分頁
--寫法1,not in/top
select top 50 * from pagetest
where id not in (select top 9900 id from pagetest order by id)
order by id
--寫法2,not exists
select top 50 * from pagetest
where not exists
(select 1 from (select top 9900 id from pagetest order by id)a where a.id=pagetest.id)
order by id
--寫法3,max/top
select top 50 * from pagetest
where id>(select max(id) from (select top 9900 id from pagetest order by id)a)
order by id
--寫法4,row_number()
select top 50 * from
(select row_number()over(order by id)rownumber,* from pagetest)a
where rownumber>9900
select * from
(select row_number()over(order by id)rownumber,* from pagetest)a
where rownumber>9900 and rownumber<9951
select * from
(select row_number()over(order by id)rownumber,* from pagetest)a
where rownumber between 9901 and 9950
js 跨域 1、document.domain+iframe的設定
對於主域相同而子域不同的例子,可以通過設定document.domain的辦法來解決
2、動態建立script
雖然瀏覽器預設禁止了跨域訪問,但並不禁止在頁面中引用其他域的JS檔案,並可以自由執行引入的JS文
件中的function(包括操作cookie、Dom等等)。根據這一點,可以方便地通過建立script節點的方法來
實現完全跨域的通訊。具體的做法可以參考YUI的Get Utility
這裡判斷script節點載入完畢還是蠻有意思的:ie只能通過script的readystatechange屬性,其它瀏覽器
是script的load事件。以下是部分判斷script載入完畢的方法。
3、使用HTML5 postMessage
otherWindow.postMessage(message, targetOrigin);
otherWindow: 對接收資訊頁面的window的引用。可以是頁面中iframe的contentWindow屬性;
window.open的傳回值;通過name或下標從window.frames取到的值。
message: 所要發送的資料,string類型。
targetOrigin: 用於限制otherWindow,“*”表示不作限制
4、利用flash
5、window.name實現的跨域資料轉送
iframe的src屬性由外域轉向本地區,跨域資料即由iframe的window.name從外域傳遞到本地區。這個就巧妙地繞過了瀏覽器的跨域訪問限制,但同時它又是安全操作。
以上先總結這麼多,後面收集後再更新,同時也算是學習了。