天天看點

javase基礎

今天複習了一下,以前的學習筆記。把曾經使用過的基本類,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]介紹的很詳細,想仔細研究的話可以去看。其他的内容太多,就單獨分類吧