Java基礎入門(25天) 畢向東

shang1jk發表於2013-04-10

day 01 (3.29)
------------------------
先寫註釋, 再寫程式碼. (現有思路, 在用語言表達.)
/*
需求: asdasd
思路:
1.
2.
步驟:
1.
2.
*/
------------------------
day 02 (3.29)
------------------------
1. 識別符號:由26個英文字母大小寫, 數字和'_', '$'組成. 數字不能開頭. 不能用關鍵字.
2. 邏輯運算子: &且, |或, ^異或, !非, &&短路且, ||短路或.
位運算子: <<左移, >>右移, >>>無符號右移, &按位與, |按位或, ^按位異或(xor), ~按位取反.
3. 所有型別與字串用'+'連線都變成字串.
4. 一個數異或另一個數兩次還得原數.
5. 不引入新變數, 交換兩書的值.
a = a + b; b = a - b; a = a - b; // 如果a和b是大數, 可能超過整型的最大範圍.
或 a = a ^ b; b = a ^ b; a = a ^ b;
------------------------
day 03 (3.30)
------------------------
------------------------
day 04(3.30)
------------------------
1.
int[] arr = {1,21,3,4}
System.out.println(arr)
輸出: [I@15093f1
意義: [ 表示陣列的那個中括號, I 表示Integer. @後面表示記憶體地址.
這個的意思是: 地址為 15093f1 的指向Int型的引用
------------------------
day 05(3.30)
------------------------
------------------------
day 06(3.30)
------------------------
1. javadoc作用於public和protected許可權的類、方法等.
2. 一個類預設有一個空引數的建構函式. 這個預設的建構函式的許可權和所屬類一致.
------------------------
day 07(3.31)
------------------------
------------------------
day 08(3.31)
------------------------
------------------------
day 09(3.31)
------------------------
1. 內部類定義在區域性(如定義在方法中)時, 內部類可以訪問外部類的成員, 但是不能訪問內部類所在區域性中的變數, 除非此變數用final修飾.
2. 匿名內部類必須有繼承父類或實現介面. 格式: new 父類構造器(形參列表){...}; 或 new 實現介面{...};.
------------------------
day 10(3.31)
------------------------
1. 原始碼中使用package指定包的情況下, 編譯時需用-d引數指定包路徑. (javac -d . Test.java 會在當前路徑下生成新的包資料夾並將對應.class檔案放在裡面; javac Test.java直接將.class檔案放在當前路徑. )執行時用java pack.PackageDemo命令執行當前路徑下的pack資料夾中的PackageDemo.class(即使當前路徑位於pack資料夾中, 執行時也要java pack.PackageDemo不能直接java PackageDemo).
2. jar 看help.
------------------------
day 11(4.1) --> pass
------------------------
------------------------
day 12(4.1) --> pass
------------------------
------------------------
day 13(4.1)
------------------------
1. String型別初始化後不能修改, StringBuffer型別的可以.
區別: 
其實很簡單,就是一個變數和常量的關係
StringBuffer物件的內容可以修改
而String物件一旦產生後就不可以被修改,重新賦值其實是兩個物件

比較
StringBuffer str = new StringBuffer("a");
str.append("bc");

String str2 = "a";
str2 = str2 + "bc";

str引用的一直是同一物件
而str2引用的在兩句中是完全不同的物件
------------------------
day 14(4.1)
------------------------
------------------------
day 15(4.1)
------------------------
------------------------
day 16(4.1)
------------------------
------------------------
day 17(4.1)
------------------------
1. for用法.
for(資料型別 變數名 : 被便利的集合(Collection)或者陣列)
{
...
}
2. 靜態匯入.
import static java.util.Arrays.*; // 匯入的是Arrays這個類中的所有靜態成員. (有重名時還是要指定所屬的物件或類. )
------------------------
day 18(4.2)
------------------------
1. 位元組流 和 字元流: stream結尾的都是位元組流, reader和writer結尾的都是字元流. 區別是讀寫是一個按位元組讀寫, 一個按字元.
------------------------
day 19(4.3)
------------------------
1. Ctrl+c結束 對應ASCII的3, 表示"文字結束".
2. StringBuffer執行緒同步, StringBuilder執行緒不同步. 其他一樣.
------------------------
day 20(4.3)
------------------------
1. 讀取鍵盤輸入
BufferedReader bufr =
new BufferedReader(new InputStreamReader(System.in));
讀取檔案輸入
BufferedReader bufr =
new BufferedReader(new FileReader(file));
// 獲取鍵盤輸入, 並輸出至控制檯. 遇over停止.
BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));

String line = null;

while((line=bufr.readLine())!= null)
{
if("over".equals(line))
break;
byte[] buf = line.getBytes();

System.out.println(line);
}
------------------------
day 21(4.3)
------------------------
------------------------
day 22(4.4)
------------------------
1. Java為GUI提供的物件都存在java.Awt和javax.Swing包裡.
java.Awt, abstract window tookit, 抽象視窗工具包. 呼叫本地系統方法實現功能, 屬重量級控制元件.
javax.Swing, 在AWT基礎上, 簡歷的一淘圖形介面系統, 有更多元件. 完全由Java實現, 增強了移植性, 輕量級控制元件.
2. **重量級呼叫系統方法, 與系統更相關. 輕量級與系統依賴性弱, 移植性強.
3.

4. 容器中的元件的排放方式, 是佈局. 常見佈局管理器:
1. FlowLayout(流式佈局管理器): 從左到右的順序排列. Panel預設的佈局管理器.
2. BorderLayout(邊界佈局管理器): 東南西北中. Frame預設的佈局管理器.
3. GridLayout(網格佈局管理器): 規則的矩陣.
4. GridBagLayout(網格包式佈局管理器): 非規則的矩陣(可以用n個網格表示一個元件) .
5. CardLayout(卡片佈局管理器): 選項卡.
5.
import java.awt.*;
import java.awt.event.*;

public class MouseAndKeyEvent
{
private Frame f;
private Button but;

public MouseAndKeyEvent()
{
init();
}

public void init()
{
f = new Frame("my frame");
f.setBounds(300,100,600,500);
f.setLayout(new FlowLayout());

but = new Button("my button");

f.add(but);

myEvent();

f.setVisible(true);
}

private void myEvent()
{
f.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});

/*but.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
System.out.println("button do it");
System.exit(0);
}
});*/


but.addMouseListener(new MouseAdapter()
{
private int count = 1;
private int clickCount = 1;
public void mouseEntered(MouseEvent e)
{
System.out.println("滑鼠進入該元件" + count++);
}
public void mouseClicked(MouseEvent e)
{
if(e.getClickCount() == 2)
System.out.println("雙擊動作 " + clickCount++);
}
});

but.addKeyListener(new KeyAdapter()
{
public void keyPressed(KeyEvent e)
{
System.out.println(e.getKeyChar());
}
});
}

public static void main(String[] args)
{
new MouseAndKeyEvent();
}
}
6. 先畫介面再加事件.
------------------------
day 23(4.7)
------------------------
1. 網路通訊要素:
1. IP地址: InetAddress物件.
2. 埠號: 0~65535.
3. 傳輸協議: TCP, UDP.
a. UDP:面向無連線(不管有沒有連線, 就是發. 收不到拉到), 速度快, 不可靠. . 每個資料包最大64k.
b. TCP: 建立連線, 效率低. 通過三次握手完成連線, 可靠協議. 進行大資料量傳輸.
2. 每種協議都有不同的建立Socket的方式.
3. ip地址: *.*.*.255 是廣播地址, 向此網段的所有機器傳送廣播.
4. UDP分傳送端和接收端, TCP分客戶端和服務端.
5. UDP相關類DatagramSocket, DatagramPacket. TCP的Socket, ServerSocket.
6. java.io.PrintWriter物件不丟擲IO異常, 呼叫println,printf,format方法後自動重新整理(flush), println會使用不同平臺的換行符. 因此, 有時候比BufferedWriter物件方便.
------------------------
day 24(4.9)
------------------------
1. public static void main(String[] args):
用java AsdClass paramater1 paramater2 命令執行時, args = {paramater1, paramater2 }
------------------------
day 25(4.9)
------------------------
<正規表示式> java.lang.String和java.util.regex
1. 匹配功能: String.matches()方法.
\\ 代表\
\n 代表換行
...等等...
[abc] 代表a或b或c (可以是數字)
[^abc] 代表除a,b,c以外的
[a-zA-Z] 代表a到z和A到Z並集
. 代表任意字元
\d 數字[0-9]
\D 除0到9
\s 代表空白字元, [ \t\n\x0B\f\r]
\S 非空白字元
\w 單詞字元[a-zA-Z0-9]
\W 代表[^\w]
X? 代表X出現一次或沒有
X*? 出現零次或多次
X+? 代表X出現一次或多次
X{n} 出現n次
X{n,} 出現最少n次
X{n,m} 出現n到m次(包括)
2. 切割功能: String的split()方法.
(.)\1 用小括號括起來表示組, 編號從左到右從1開始(組0代表整個表示式). \1表示第一組所匹配過的再次出現.
例如: "sdfqqKjljkksdzz".split("(.)\\1") 可以將字串從qq,kk,zz處分割.
3. 替換功能: String的replaceAll()方法和replaceFirst().
"abccdeffg".replaceAll("(.)\\1", "$1"); 得到"abcdefg"字串. $符號表示取前一個正規表示式的組.
4. 獲取功能:
a. 將正規表示式封裝成物件, b. 讓正則物件和字串關聯, c. 關聯後, 獲取正則匹配引擎, 4. 通過引擎對符合規則的字串進行操作, 比如取出
使用java.util.Matcher的group()方法取出, 使用group()取出之前需要先用find()方法查詢一下.


import java.util.regex.*;

class RegexDemo2
{
public static void main(String[] args)
{
getDemo();
}

// 獲取長為三的單詞. 
public static void getDemo()
{
String str = "ming tian jiu yao fang jia le ,da jia. ";

String reg = "\\b[a-zA-Z]{3}\\b";

Pattern p = Pattern.compile(reg);

Matcher m = p.matcher(str);

while(m.find())
{
System.out.println(m.group());
System.out.println(m.start()+"...."+m.end());
}
}
}




相關文章