2007年1月11日
1.10 星期三
? array 數(shù)組:數(shù)組是一個具有相同類型的數(shù)據(jù)值得索引集合.
? 數(shù)組申明:double[] rainfull; 推薦
?????????? 或
??? double rainfull[];
?
?? 引用數(shù)據(jù)類型:接口,對象,數(shù)組.
?? rainfull = new double[12];
?? 創(chuàng)建一個長度為12的數(shù)組,把空間地址賦給rainfull.
?? 數(shù)組索引是從0開始(沒特殊要求情況下,索引一般都是從0開始)
?
?? 動態(tài)數(shù)組--自動增長
?? 數(shù)組.length (屬性)
?? String.leng()? (方法)
?? String[] m = {"a","b","c"...}
?? 在申明初始化時,數(shù)組的大小設定.
?? int size;
?? int[] number;
?? size = Integer.parseInt(JOptionPane.showMessageLag(null,"size of .."));??
?? number = new int[size];?? (方法也不是很好.因為size不一樣,對象也就不一樣.)
?? 可變型數(shù)組?
???
?? 對象數(shù)組
?? 數(shù)組的類型不是基本數(shù)據(jù)類型;
?? Person[] person;
?? person = new Person[20];
?? 對象數(shù)組每個元素都是一個對象,沒初始化時是null.
?? Person[0] = new Person[]; 創(chuàng)建對象
1.11 星期四
?? JCF--java集合框架
?? Java Collection Framework
?? JCF是什么?
?? 是java語言設計出來的針對底層算法和數(shù)據(jù)結構的一系列類.
?? 在哪用JCF?
?? 凡是提到數(shù)據(jù)結構和算法的都可以用JCF
?? 為什么用JCF?
?? 讓程序員的重點放在業(yè)務上,而不是如何去寫算法上.
??
?? 接口???????????????? Collection
????????????????????????? |??? |
????????????????????????? |??? |
??????????????????? set----???? ----list?????????????? map
?
?? 實現(xiàn)??????????? HashSet????????? ArrayList????????? SoredMap
?
?? 算法??????????? Collections
?? 以上構成JCF
?
?? list 列表???? map 映射
?? list的重要特征是幫我們管理大量對象
?? ArrayList 數(shù)組列表
?? LinkedList (單雙)鏈表 (不是連續(xù)的,通過指針連接)
?? ArrayList al = new ArrayList();
?? al.add(1);
?? al.add(4);
?? al.add(2);? 增加
?? ......
?? al.remove;? 刪除
?? System.out.println(al);
?? System.out.println(al.get(3));
?? 排序
?? Collections.sort(al); 小到大
?? Collections.max(al);
?? Collections.min(al);
?? Collections.sort(al,Collection.reverseOrder);? 大到小
?
?? Vector 跟 ArrayList 很相似
?? 向量
?? 如何便利集合
?? Iterator it = al.iterator(); 迭帶器 挨個訪問
?? while(it.hasNext())
?? {
????? System.out.println(al.next);
?? }
?? HashMap 不允許重復
?? TreeMap 自動排序
?
?? treeMap tr = new TreeMap();
?? tr.put(1,1);? (key,value)
?? .......
?? Object[] o = tr.keySet().ToArray();
?? Object[] o = tr.value().ToArray();???????????????
?
?? System.out.println(tr);
?? for(int i = 0;i<o.leng;i++)
?? {
????? System.out.println(0[i]);
?? }
12.25!~12.27
GUI
1 容器,部件
2 事件處理
awt和swing的特點:
awt(抽象窗口工具集)是依賴操作系統(tǒng)的GUI.
能夠顯示出來的組件是不同操作系統(tǒng)的共有組件.(但是不太好看.)
swing(模擬GUI組件)速度比awt要慢的多.
swt(sun公司的,是swing和awt的綜合體)如果swt產(chǎn)生的組件awt有就直接調(diào)用, 沒有就模擬出來.這樣既解決了跨平臺的問題,也解決了速度慢的問題.
低層容器:容器是包含其他組件的組件.
JFrame,JApplet,JDialog.?
布局管理器:
標準布局,自由布局.
GUI三個步驟:
1.選擇容器
2.為容器設置布局方式
3.為容器填加組件
導入3個包
import javax.swing.*;
import java.awt.*;
import awt.event.*;
GUI底層容器的實現(xiàn)方式
第一種:
JFrame jf = new JFrame();? //拿一個容器
jf.setLayout(null);???????
JButton jb = new JButton();
jb.setBounds(0,0,20,20);? //絕對布局
jf.add(jb);
this.setSize(200,200);
this.setVisible(true);
第二種:
類 extends JFrame?? //讓自己的類變成容器
申明組件;
public 類
{
?Container ct = this.getContentPane();
?ct.add();
?this.setSize();
?this.setVisible();
}
this.setCursor(new Cursor(Cursor.HAND_CURSOR));? //變手
Image image = new ImageIcon("Sunset.jpg").getImage();
setIconImage(image);//改變圖標
容器,根容器,部件看gui資料? E盤..
布局管理器
FlowLayout 面板(缺省管理器) 流布局管理器
在setLayout(null)下全是FlowLayout
BorderLayout JFrame(缺省布局管理器) 東 西 南 北 中
GridLayout 行列(像表格)
CardLayout 卡片布局管理器(沒有頁簽)
GridBagLayout 格蘭包布局管理器(標準管理器中最靈活的,不好把控)??
FlowLayout 從上到下,從左到右放置.
1.當?shù)谝恍袥]有排滿時,會把第一行排滿再排下一行.
2.不管布局管理器是否改變,組件大小都不會改變.
FlowLayout folw = new FlowLayout (FlowLayout.LEFT);
3.在缺省狀態(tài)下從中部開始.
BorderLayout
當東西南北任何一個地區(qū)沒放置任何組件時,中部區(qū)域會把周圍的區(qū)域侵略掉.
setLayout(new BorderLayout());
組件會隨著容器大小的變化而變化.
add("North",組件); 不好用
add(組件,BorderLayout.NORTH); 清晰
GridLayout
組件會隨著容器大小的變化而變化.
setLayout(new GridLayout(3,2));? 行列
add(new Button("first",0));
根據(jù)序列依次填進去,只有列滿了才去填行.
validate();? 讓容器刷新
GardLayout
GardLayout card = new GardLayout();
setLayout(card);
add("1",new Button(""));
CardLayout cl = (CardLayout)cardLayout.getLayout;
cl.show(cardLayout,"card1");
事件
class 類 extends JFrame implements(實現(xiàn)) ActionListener(接口)
{????????????????????? (受托事件處理)
?????????????????????? 不同的事件不同的部門處理
}
1 讓類變成監(jiān)聽者
2 賦予多少職責就實現(xiàn)多少
3 建立部件與監(jiān)聽者的關系
jb.addActionListener(this);
?
CardLayout cl = (CardLayout)card.getLayout();
String s = e.getActionCommed();
if(s.equals("上一步"))
{
?cl.show(card,"card2");
?????? ?或者
??????? cl.previous(card);
?button.setEnabled(false);
}
else if(s.equals("下一步"))
{
?cl.show(card,"card1");
?????? ?或者
??????? cl.previous(card);
?button.setEnabled(false);
}
?
?
?
?
?
?
?
?
?
2.19 星期二
? 在方法里面申明的屬性必須初始化.(局部變量)
? 在類里面申明的屬性不用初始化.(全局變量)
? 如果一個方法有返回值,那么方法里必須加上return.返回類型沒有void.
? 構造器就是類的構造方法.
? 構造方法的基本特點:
? 方法名和類名一致,方法名沒有返回類型.
? 構造方法的特性:
? 1.每個類一定會有一個不帶參數(shù)的默認構造方法.
? 2.如果一個類定義了一個帶參數(shù)的構造方法,那么不帶參數(shù)的構造方法就會被洗刷掉.
? 3.構造方法可以重載.(如一個帶參數(shù)的和一個帶參數(shù)的)
? 一個類的方法同名叫做方法重載.
? 4.構造方法是不能被繼承的.
?
? 實例變量:在類里面任何一個方法外面的變量.每個對象都有屬于自己實例變量的拷貝.
? public private這個我們稱之為"可見性修飾符".它來指定數(shù)據(jù)成員和方法的訪問能力和訪問級別.
? 如果這個方法的行為是改變對象的屬性,設置對象屬性的值,那么這個方法稱之為"修改器".
? public void setHeight(float h, float w)
? {
???? height = h;
???? weight = w;
? }?
? 如果這個方法只是返回對象屬性,那么我們稱這個方法為"訪問器".
? public void abc()
? {
???? return a;
? }
12.20 星期三
? static int i;是類變量
? 缺省修飾符:本包的都可以訪問.
? 公共修飾符(public):任何地方都可以訪問.
? if()
? 語句1;
? else
? 語句2;
?
? ?? :?????? if else的工程用法(三目運算符)
?
? switch的條件語句只能是整數(shù)
? equals方法是被重寫過的.
?
? equals跟==的區(qū)別:
? equals比較的是內(nèi)存空間的內(nèi)容是否相同
? == 比較的是兩個對象的地址是否相同
12.21 星期四
properties
?
import java.io.*;
import java.util.Properties;
class P
{
?Properties pro;
?
?public P()
?{
??pro = new Properties();
?}
?
?public void load(String fileName)
?{
??try
??{
???pro.load(new FileInputStream(fileName));加載
??}
??catch(IOException e)
??{
???e.printStackTrace();
??}
?}
?
?public void getP(String key)
?{
??System.out.println(pro.getProperty(key));讀取
?}
?
?public void setP(String key,String value)
?{
??pro.setProperty(key,value);設置(在內(nèi)存里)
?}
?
?public void storeP(String fileName,String Info)
?{
??try
??{
???pro.store(new FileOutputStream(fileName),Info);保存(在文件)
??}
??catch(IOException e)
??{
???e.printStackTrace();
??}
?}
?
}
普通文件? 后綴.peoperties
(柔性軟件開發(fā))目的:可以讓程序變的靈活,配置變的輕巧。
循環(huán)語句
while循環(huán):循環(huán)次數(shù)未知使用。
for 循環(huán):已知循環(huán)次數(shù)使用。
do-while循環(huán)
?
?
java基礎
static是靜態(tài)。
靜態(tài)方法不能訪問非靜態(tài)成員。
非靜態(tài)方法可以訪問靜態(tài)成員。
int i = 3;
public static void main(String[] args)?
{?
?System.out.println(i);
}
這個就會報錯。因為靜態(tài)方法不能訪問非靜態(tài)成員??!
?static int i = 3;
?public static void main(String[] args)
?{
??nbn n = new nbn();
??n.abc();
?}
?
?public void abc()
?{
??System.out.println(i);
?}
這個就不會報錯。因為非靜態(tài)方法可以訪問靜態(tài)成員。
?
public(訪問修飾符)static(訪問修飾符)void(返回類型) main(方法名)(String[] args)(參數(shù)表){}
import javax.swing.*;
import java.text.SimpleDateFormat;
class jframe
{
?public static void main(String[] args)
?{
??JFrame jf = new JFrame();//窗口
??
??SimpleDateFormat sf = new SimpleDateFormat("yyyy-mm-dd");//時間格式
??java.util.Date da = new java.util.Date();//顯示時間的對象申明
??
??
??jf.setTitle("w.a.n");//設置標題
??jf.setSize(300,300);//設置窗體大小
??jf.setVisible(true);//顯示
??JOptionPane.showMessageDialog(jf(位置),"hello");//彈出窗口顯示HELLO
??String a = JOptionPane.showInputDialog(null,"can you see?");//輸入窗口,窗口提示為can you see
??
??JOptionPane.showMessageDialog跟JOptionPane.showInputDialog還有一種參數(shù)寫法。
??JOptionPane.showMessageDialog(null," "(顯示信息)," "(標題信息),JOptionPane.INFORMATION_MESSAGE);
??System.out.println(sf.format(da.getTime())); //輸出年月日。用SimpleDateFormat
??
?}
}
三種注釋
/**
?*文檔註釋,寫在開頭 ( 注明程序的功能,以及相關信息)
?*功能:
?*作者:
?*版本:
?*開發(fā)日期:
?**/
/*
? *多行註釋
?
*///單行註釋
import javax.swing.JOptionPane;
class Area
{
?final private static double PI = 3.1415;? //常量的申明:final
?private String r;
?private double rr;
?private double s;
?
?
?public static void main(String[] args)
?{
??Area a = new Area();
??a.Input();
??a.Areas();
?}
?
?public void Input()
?{
??r? = JOptionPane.showInputDialog(null,"請輸入圓半徑");
?}
?
?public void Areas()
?{??
??rr = Double.parseDouble(r);//類型轉換?
??s? = rr*rr*PI;
??JOptionPane.showMessageDialog(null,"圓面積是:"+s);
?}
}
類型轉換
String轉double
xx = Double.parseDouble(要轉換的數(shù)據(jù)名字);
String轉int
xx = Integer.parseInt(要轉換的數(shù)據(jù)名字);
int轉String
String s = String.valueOf(12);
或
String s = new Integer(10).toString();
注意?。?br />float f = 2.33 是錯的。因為2.33默認類型是double.
改正:float f = 2.33 F;
還要注意
高內(nèi)聚,松耦合。
函數(shù)分解。
這樣代碼看起來會很清爽。
import java.text.DecimalFormat;
class Dformat
{
?public static void main(String[] args)
?{
??DecimalFormat df = new DecimalFormat("0");//格式0后面幾個小數(shù)點表示保留幾位小數(shù)
??System.out.println(df.format(66.6666)+"%");//這樣66.666就是67%
?}
}
標準輸出
System.out.print("");//加ln是換行
標準輸入
System.out.println(System.in.read());//這個方法用來讀取阿科斯碼
System.out.println((char)System.in.read());//這個方法是強制轉換,只能讀取一個字符
import java.io.*;//用BufferedReader 要引用io包
class c
{?
?public static void main(String[] args)throws Exception //要拋異常
?{
?BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
?String s = br.readLine();
?System.out.println(s);
?}
}
?要導入util包,util是工具包.
?Scanner sc = new Scanner(System.in);
?int s = sc.nextInt();
?int s1 = sc.nextInt();
?System.out.println(s*s1);//用Scanner可以省去判斷的步驟 在jdk1.5以下的版本不能用
GregorianCalendar calendar = new GregorianCalendar(year,month,day);
int d = calendar.get(Calendar.DAY_OF_WEEK);//今天是一周內(nèi)的哪一天
?
?
?
?
?
?
?
?
?
?
?