今天複習了一下,以前的學習筆記。把曾經使用過的基本類,java基礎過了一遍,簡單的了解了一下,開發中可能能用到的。
[color=blue][size=large]基本概念:[/size][/color]
[size=medium]對象初始化過程:[/size]先在棧配置設定空間,就是初始話局部變量,然後執行new 操作 在堆裡配置設定空間,成員變量預設初始話,顯示初始話,局部變量隻能顯示初始話,然後調用構造函數。還有常量池或者叫方法池一般常量方法放在裡面。
成員變量和局部變量的差別?
A:在類中的位置不同
成員變量:在類中方法外
局部變量:在方法定義中或者方法聲明上
B:在記憶體中的位置不同
成員變量:在堆記憶體
局部變量:在棧記憶體
C:生命周期不同
成員變量:随着對象的建立而存在,随着對象的消失而消失
局部變量:随着方法的調用而存在,随着方法的調用完畢而消失
D:初始化值不同
成員變量:有預設初始化值
局部變量:沒有預設初始化值,必須定義,指派,然後才能使用。
注意事項:
局部變量名稱可以和成員變量名稱一樣,在方法中使用的時候,采用的是就近原則。
[color=blue][size=medium]break和continue差別:[/size][/color]
break是直接跳出循環
continue是跳出本次循環執行下一次循環
[color=blue][size=medium]this和super差別:[/size][/color]
this是指本類,本對象,super是指父類,父對象
[size=medium]while和do while差別,以及for[/size] for和while可能一次都不執行,do while至少會執行一次。for(;;)隻要有兩個分号,語句就是對的。隻是死循環,注意寫代碼時候避免死循環,一般我這些用的比較少,foreach用的比較多用來周遊清單輸出。
[color=blue][size=medium]if if else switch 三目運算符:[/size][/color]if else 主要用于區間判斷 swicth case 主要用于等值判斷,注意一般别忘了寫break 除非有需求的時候。三目運算符:if else 簡單替換方法:
表達式?表示1:表達2 如果表達式為true 傳回表達1結果。如果為false 傳回表示2結果。表達式隻有兩種選擇true 或者false。
== 判斷值是否相等,Equals 一般判斷引用位址是否相等。他們都可以判斷值是否相等。
[color=blue][size=large]修飾符:[/size][/color]private 私有 一般用于封裝,本類可以通路。預設(friendly)本類和同包可以通路,protected 本類 同包 子類 public 本項目
static 靜态的主要作用就是為了共享資料,靜态方法,靜态變量,靜态代碼塊,屬于類,在jvm加載的時候就執行了,并且隻執行一次。靜态方法可以直接通過類名調用,不需要new
final:1,修飾變量,要求變量隻能被指派一次 2,修飾類,要求該類不能被其他類繼承 3,修飾方法 ,要求該方法不能被繼承(重寫)
[color=blue][size=medium]@Override和@Overload[/size] [/color]重寫用于子類對父類的方法重寫,繼承中。實際開發中,用的比較多,一般是重寫接口抽象方法,面向接口程式設計。重載同一個類中方法名相同,參數清單不同,用的也多,一般根據傳的資料不懂,寫不同的方法 1,比如參數數量一緻,類型不能一樣
2,比如參數數量一緻,類型一樣,順序一定不能一樣。
[color=blue][size=medium]封裝[/size][/color]:簡單了解目的就是為了,代碼安全性,以及少寫代碼。也便于我們開發,不需要考慮具體實作的細節,隻需要一個我們想要的對象就可以。封裝隐藏一些代碼内部實作細節,提供一些公用的方法方法。比如getter setter 方法,jdk中的類,方法,和架構都是封裝實作的
[color=blue][size=medium]繼承[/size][/color]:為了分類管理,父類一般擁有所有子類的一些共同屬性,或者功能,隻是子類中具體的實作方法可能不一樣。滿足is a 條件下使用繼承,抽象方法(子類必須實作的方法),抽象類(不能實列話)
[color=blue][size=medium]多态[/size][/color]:同一個引用類型,使用不同的執行個體而執行不同操作,簡單了解一個人會寫代碼,會演講,等當他扮演不同的角色的時候,執行不同的操作。
[color=blue][size=medium]接口[/size][/color]:用來替代抽象類,接口可以多繼承(抽象類隻能單繼承),所有方法都是抽象方法,不能被執行個體化,所有的成員變量都是靜态常量
[color=blue][size=medium]包裝類:[/size[/color]]主要目的是為了我們方面使用包裝類裡面的一些基本方法,常見的類型轉換valueof(),自動裝箱:jvm自動将一個基本類型,自動幫我們轉換成一個引用類型,自動拆箱:将一個引用類型自動轉換成基本類型。byte ---> Byte
short ---> Short
int ---> Integer
long ---> Long
float ---> Float
double ---> Double
boolean --->Boolean
char --->Character
在實際開發中定義類型,基本都用包裝類。
[color=blue][size=large]基本類:[/size][/color]
statck 類堆棧得使用:常用方法:pop()移除堆棧頂部對象,并傳回改對象。peek(),檢視堆棧頂部的對象,但不從堆棧中移除它,search()表示以 1 為基數,距離堆棧頂部的距離,如果現實為-1表示此對象不再堆棧中。empty()判斷是否為空。push(),将對象加入堆棧頂部。
字元String Stringbuffer(多線程安全)用于字元串拼裝 StringBuidder(單線程)一般不用
日期Date ,月曆Calender ,随機數,Random,數學類 math.Arrays類提供對數組的方法,排序,查詢sort(a)數組名
[color=blue][size=medium]異常處理 :[/size][/color]聲明(throws):抛出:直接在方法中調用:throw new Ex();
用try将可能會出異常的代碼括起來,catch進行處理,catch可以有多個,finally 表示隻要進入try,無論執行不執行catch都會執行finally裡面的代碼,即便含有return也會執行。
錯誤資訊:error 程式員無論為力的錯誤,看JDK api
[color=blue]常見的異常:
ArithmeticException:算術錯誤情形,如以零作除數,ArrayIndexOutOfBoundsException:數組下标越界,NullPointerException:空指針 InputMismatchException:欲得到資料類型與實際輸入類型不比對 NumberFormatException:數字格式轉換異常,如把"abc"轉換成數字 IllegalArgumentException:方法接收到非法參數 ClassCastException:對象強制類型轉換出錯
ClassNotFoundException:類沒找到。異常處理兩種形式:可以抛出或者自己處理,一般選擇自己處理,如果實在處理不了,才抛出 ExceptionInInitializerError - 如果該方法激發的初始化失敗,LinkageError - 如果連結失敗,IllegalAccessException - 如果該類或其 null 構造方法是不可通路的,InstantiationException - 如果此 Class 表示一個抽象類、接口、數組類、基本類型或 void; 或者該類沒有 null 構造方法; 或者由于其他某種原因導緻執行個體化失敗。[/color]
[color=blue][size=large]集合架構JCF:[/size][/color]
[size=medium]接口結構:collection[/size] :
list不唯一,有序,常用的add,remove,get等等方法,查API仔細看。實作類ArrayList(周遊,随機通路時效率比較高)LinkedList(插入,删除時效率比較高,額外提供了關于頭部和尾部的 添加,擷取,删除方法。)Stack 後進先出 lifo (last in first out)
set唯一,無序,實作類HashSet iterator周遊對象.如果用法忘記了看API講的很詳細,去重,原理重寫hashCode equals兩個方法,可以自定義去重。TreeSet
去重複, 并且可以按照某種順序排序 TreeSet的add方法會将對象轉為Comparable, 然後調用compareTo方法, 是以存儲在TreeSet中的對象必須實作Comparable, 重寫compareTo方法,Integer能排序(有預設順序), String能排序(有預設順序), 自定義的類存儲的時候出現異常(沒有順序) queue先進先出 fifo (first in first out)應用場景:排隊,發送郵件,發送短信,工作。
[size=medium]Map鍵值對:[/size]
比較重要的方法,keySet(),values,實作類HashMap 線程不安全
允許空值,HashTable 線程安全不允許空值
[size=medium]集合疊代:[/size]iterator
System.out.println("擷取hashmap中的keyset,周遊列印");
Set set = map.keySet();
Iterator iter = set.iterator();
while (iter.hasNext()) {
Object each = iter.next();
System.out.println(iter.next());
}
System.out.println("擷取hashmap中的value 集合,周遊列印");
Collection con = map.values();
// foreach的方式可以疊代實作了iterator接口的集合
// con 表示目前疊代的集合
// each 目前疊代擷取到的對象
for (Object each : con) {
Dog dogEach = (Dog) each;
System.out.println(dogEach.getName());
}
[size=medium]泛型集合:[/size]作用:指定集合隻能存放某一種類型元素,使運作時異常提前到編譯時異常。
Map<String,String> map = new HashMap<String,String>();
map.put("key","value");
[size=large]IO 流:[/size]
file類:用于檔案和檔案夾操作的類,一般要實作Serializable可序列化接口,在網絡中傳輸資料流,都要實作序列化。
//判斷是否有這個檔案 ,如果沒有就建立這個檔案夾
File file = null;
File file1 = new File("D:"+file .separator+"Program Files"+file.separator+ "test");
if(!file1 .exists()){
//建立檔案夾
file1.mkdirs();
}
//建立一檔案
File file2 = new File(file1+file .separator+"test.txt");
if(!file2 .exists()){
try {
//建立檔案
file2.createNewFile();
} catch (IOException e ) {
e.printStackTrace();
}
}
//删除檔案或者檔案 注意删除時候要先确定檔案夾内容是空的才能删掉檔案夾
file2.delete();
file1.delete();
從命名:注意重命名後要先賦給一個新的對象在操作新的對象
File file3 = file2;
file3.renameTo( new File(file1+file .separator+"test3.txt"));
//隻讀操作
file3.setReadOnly();
public class CopyFunction {
/**
* 封裝拷貝函數
* @param fileold
* @param filenew
*/
public static void copyfunction(File fileold, File filenew) {
FileInputStream fis = null;
FileOutputStream fos = null;
try {
fis = new FileInputStream(fileold);
/**
* 檔案要拷貝的位置
*/
fos = new FileOutputStream(filenew);
/**
* 按照512位元組讀取檔案
*/
byte[] bytearr = new byte[512];
int readEnd = -1;
while((readEnd = fis.read(bytearr))!=-1){
fos.write(bytearr);
}
} catch (FileNotFoundException e) {
System.out.println("檔案沒有找到");
e.printStackTrace();
}
catch (IOException e) {
e.printStackTrace();
}finally{
/**
* 關閉輸入輸出流
*/
try {
fis.close();
fos.close();
} catch (IOException e) {
System.out.println("輸入輸出流關閉異常");
e.printStackTrace();}}}
public void cutfunction(File fileold1, File filenew1) {
/**
* 剪切檔案
*/
copyfunction(fileold1, filenew1);
fileold1.delete();}
}
[color=blue][size=medium]位元組流[/size][/color]:InputStream輸入流(FileInputStream,ObjectInputStream(讀寫對象需要實作可序列),ByteArrayInputStream,DataInputStream(用于8中基本資料的傳輸))OutputStream.
[size=medium][color=blue]字元流:[/color][/size]Reader輸入(BufferedReader,InputStreamReader,FileReader)writer輸出(除了對應的還有一個PrintWriter),以及他們的子流,用的時候看API 一般要什麼就給他什麼就好了。
[url]http://blog.csdn.net/hguisu/article/details/7418161[/url]介紹的很詳細,想仔細研究的話可以去看。其他的内容太多,就單獨分類吧