Java学习笔记九
45.
第一個會叫的程序雖然不知道為什么,以后看看
package com.jianjian5;
?
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Date;
?
import javax.swing.JOptionPane;
import javax.swing.Timer;
?
public class TimerTest
{
?? public static void main(String[] args)
?? {
????? ActionListener listener = new TimePrinter();
????? Timer t = new Timer(1000,listener);
????? t.start();
????? JOptionPane.showMessageDialog(null,"Quit program");
????? System.exit(0);
?????
?????
?? }
}
class TimePrinterimplements ActionListener
{
?? public void actionPerformed(ActionEvent event)
?? {
????? Date now = new Date();
????? System.out.println("At the tone , the time is "+ now);
????? Toolkit.getDefaultToolkit().beep();
?? }
}
?
46.
作為接口的代表 interface Comparable 接口:
Arrays類中的sort方法承諾可以對對象數(shù)組進行排序,但要求對象所屬的類必須實現(xiàn)了Comparable接口
?
47.
if 語句中的陷阱:
public int compareTo(People other)
?? {
????? if(salary < other.salary)
??????? return -1;
????? if(salary > other.salary)
??????? return 1;
????? if(salary == other.salary)
?????
??????? return 0;
??
?? }
編譯器會提示錯誤,原因是什么呢,我比較兩個數(shù)據(jù)的大小,情況也就是這三種啊,但是我們知道,編譯器卻不知道,它認為,當全部符合三個數(shù)據(jù)的時候,我該返回什么?
所以最后一句最好寫成
return 0 ;
而不要加if 語句;
?
48.
看下面的程序
目的是通過比較三個人的薪水來排列打印出它們的薪水
其中有幾行代碼是比較重要的;
package com.jianjian5;
?
//import java.util.ArrayList;
import java.util.Arrays;
?
public class SortTest
{
?? public static void main(String[] args)
?? {
//??? ArrayList <People> list = new ArrayList<People>();
????? People[] staff = new People[3];
????? staff[0] = new People(3456);
????? staff[1] = new People(2343);
????? staff[2] = new People(2324);
????? Arrays.sort(staff);//就是按照自己的方式去比較;
????? for(int i = 0; i < staff.length; i++)
????? {
??????? System.out.println(staff[i].getSalary());
????? }
?? }
}
class People implements Comparable<People>
{
?? private int salary;
?? public int getSalary()
?? {
????? return salary;
?? }
?? public void setSalary(int salary)
?? {
????? this.salary = salary;
?? }
?? public People (int salary)
?? {
????? this.salary = salary;
?? }
?? public int compareTo(People other)
?? {
????? if(salary < other.salary)
??????? return -1;
????? if(salary > other.salary)
??????? return 1;
?????
??????? return 0;
??
?? }
}
?
49.
子類是不能繼承父類的私有域的;只能繼承其中的方法。
?
50.
增強的for each 循環(huán)!
package com.jianjian5;
?
import java.util.Arrays;
?
public class ForTest6
{
?? public static void main(String[] args)
?? {
????? int [] i = {3,1,6,7,24};
????? Arrays.sort(i);
????? for(int e : i)
????? {
??????? System.out.println(e);
????? }
?? }
1.
八種原生數(shù)據(jù)類型不能添加到泛型,即使有了自動拆裝箱,也是要使用它們的包裝類型作為泛型的說明。
?
2.
5.0新特性可以很大程度的提高程序的編寫效率,從工作平臺傳入數(shù)據(jù)字符串類型,統(tǒng)計每個字符串出現(xiàn)的次數(shù),還是利用Map;來做
?
?
package com.jianjian;
?
import java.util.HashMap;
?
public class FrequencyTest
{
?? public static void main(String[] args)
?? {
????? HashMap<String, Integer> map = new HashMap<String,Integer> ();//泛型
????? for(String s : args)//增強的for循環(huán)
????? {
??????? map.put(s,(null == map.get(s))? 1: map.get(s) + 1);
???????
????? }
????? System.out.println(map);
?????
?? }
}
看起來是很簡單的,但是要真正的理解才可以。
?
3.
枚舉應(yīng)用,個人認為枚舉是為我們提供了可選的基礎(chǔ)常量,是我們經(jīng)常會用到的,突出的是可選的,枚舉與switch語句結(jié)合的效果很好
隨著計算機的不斷普及,程序不僅只用于數(shù)值計算,還更廣泛地用于處理非數(shù)值的數(shù)據(jù)。例如:性別、月份、星期幾、顏色、單位名、學(xué)歷、職業(yè)等,都不是數(shù)值數(shù)據(jù)。在其它程序設(shè)計語言中,一般用一個數(shù)值來代表某一狀態(tài),這種處理方法不直觀,易讀性差。如果能在程序中用自然語言中有相應(yīng)含義的單詞來代表某一狀態(tài),則程序就很容易閱讀和理解。也就是說,事先考慮到某一變量可能取的值,盡量用自然語言中含義清楚的單詞來表示它的每一個值,這種方法稱為枚舉方法,用這種方法定義的類型稱枚舉類型
?
package com.jianjian5;
?
public enum ActionTest
{
?? GO, RUN,JUMP;
}
?
package com.jianjian5;
?
public class Action
{
?? public void method(ActionTest test)
?? {
????? switch (test)
????? {
??????? case?GO :
??????? ?? System.out.println("go");
?????????? break;
??????? case?RUN :
?????????? System.out.println("run");
?????????? break;
??????? case?JUMP :
?????????? System.out.println("jump");
?????????? break;
???????
????? }
??
?? }
?? public static void main(String[] args)
?? {
????? ActionTest test = ActionTest.GO;
????? Action action = new Action();
????? action.method(test);
?????
?? }
?
}
?
4.
每個枚舉類型都有一個values(),其作用是返回自身的數(shù)組,這樣就可以用增強的for循環(huán)進行遍歷:
for(Color color :Color.values())
{
????? System.out.println(color);
}
總之就是values()方法返回一個數(shù)組!!!
?
5.
對于switch語句只能接受五種類型的數(shù)據(jù),其中的四種是 int ,char ,bity, sort,最后一種是 枚舉類型;
?
6.
同一類中的主方法,是可以調(diào)用向同類下的靜態(tài)方法的!記住。必須是靜態(tài)的
package com.jianjian7;
?
public class ThinkTest
{
?? public static void method()
?? {
????? System.out.println("helloworld");
?????
?? }
?? public static void main(String[] args)
?? {
????? method();
?? }
??
}
?
7.
枚舉與類的最大區(qū)別就是,枚舉在編譯時就已經(jīng)定義好的了實例,固定的實例,將枚舉中的成員都看作是枚舉的一個實例,枚舉和類一樣,也是有構(gòu)造方法的,在成員后面加上小括號其實就是在生成構(gòu)造方法,
?
?
package com.jianjian7;
?
public enum EnumTest
{
?? one("卡內(nèi)奇"),two("西多"),three("洛基");
?? private Stringname;
?? EnumTest(String name)
?? {
????? this.name = name;//this關(guān)鍵字只存在非靜態(tài)方法中,表示調(diào)用當前對象的形參,在靜態(tài)方法中不會使用this關(guān)鍵字,因為不需要形參!
?????
?? }
?? public String getName()
?? {
????? return name;
?? }
?? public static void main(String[] args)
?? {
????? EnumTest test = EnumTest.one;//用類名來獲取對象顯然的一說枚舉成員都是public static final 的!
????? System.out.println(test.name);
?? }
??
}
?
?
枚舉類型的valuesOf(String obj)接受一個String類型的對象轉(zhuǎn)換成枚舉類型
而且的一說,這個方法是靜態(tài)的方法,所以使用的時候最好用類名來調(diào)用,而且的而且,傳入的字符串必須是枚舉成員變量中的一個,這個方法的意義不大,聽張龍老師說好像是為了后面的方法利用,還有比較成員變量位置;
package com.jianjian7;
?
public enum Direction
{
?? UP,DOWN,LEFT,RIGHT;
?? public static void main(String[] args)
?? {
????? ?
????? System.out.println(Direction.valueOf("DOWN"));
?? }
}
?
8.
靜態(tài)導(dǎo)入,個人覺得意義不大,在靜態(tài)方法,靜態(tài)成員變量的基礎(chǔ)上省略掉類的名字,要求導(dǎo)入包的時候要精確到域或者方法
?
?
9.
要開始反射(reflection)的學(xué)習(xí),聽說難度非同一般,嗯,總之做好心理準備,堅持下去,做好筆記:
?
10.
Java中無論一個類生成了多少個對象,這些類都對應(yīng)一個相同的class類。
?
總結(jié)