java6

java6
2011年05月13日
  四.(下)數組Runtime類與Process類
  1. 數組的相關操作
  在Java中,所有的數組都有一個缺省的屬性length,用於獲取數組中元素的個數。
  數組的複製:System.arraycopy()。
  數組的排序:Arrays.sort()。 --- java.util包之中!
  在已排序的數組中查找某個元素:Arrays.binarySearch()。
  import java.util.Arrays;
  length是一個屬性,不是方法;不要加()!!
  arr1.length
  對象數組的初始化方法:
  Point[] pts1 = new Point[]{new Point(1,1),new Point(2,2), new Point (3,3)};
  Point[] pts2 = new Point[3];
  arraycopy對與對象數組的copy實際上是一個引用copy,數組裏面存的是對象的地址,所以對第二個數組對象進行修改操作時還是會改變第一個數組的元素(操作的是同一組對象)!
  b.排序
  int num[] = new int[]{3,1,2};
  Arrays.sort(num); //直接調用,直接傳參數;無返回值
  c.查找 (返回所查找元素的位置)
  int index = Array.binarySearch(num,3);
  d.對象的排序
  return num>s.num ? 1 : (num==s.num ? 0 : -1); //問號表達式,大於返回1,=返0,s.num ? 1 : (num==s.num ? 0 : -1); //!!!
  }
  }
  方法2: 當序號相同時再按名字排序:
  public int compareTo(Object o)
  {
  Student s=(Student)o;
  //return num>s.num ? 1 : (num==s.num ? 0 : -1);
  int result=num>s.num ? 1 : (num==s.num ? 0 : -1);
  if(0==result) //序號相同,則比較name;String類已經實現了compareTo
  {
  result=name.compareTo(s.name);
  }
  return result;
  }
  e.數組對象的搜索:
  int index=Arrays.binarySearch(ss,new Student(2,"lisi"));
  System.out.println("index="+index);
  System.out.println(ss[index]);
  2.封裝類:
  調用函數時,參數是引用類型,但我們要傳遞的又是基本類型;
  java.lang中提供了八種基本類型的引用類型--封裝類!
  基本數據類型 封裝類
  boolean Boolean
  byte Byte
  short Short
  int Integer
  long Long
  char Character
  float Float
  double Double
  class Test
  {
  public static void main(String[] args)
  {
  int i=3;
  Integer in=new Integer(i); //取得封裝類
  int j=in.intValue(); //取回整形值
  System.out.println("j="+j);
  String str=in.toString(); //Integer.toString()可以將Integer轉換爲String
  System.out.println("str="+str);
  String str2="134";
  System.out.println(Integer.valueOf(str2)); //Integer.valusOf()將String轉換成Integer
  }
  }
  parseInt(String s) -- 轉換爲基本數據類型int
  toString 也支持基本數據類型int!
  其它基本類型也都有類似的;
  所有的封裝類都是隻讀類!
  3.Class類 -- java.lang
  在Java中,每個class都有一個相應的Class對象。也就是說,當我們編寫一個類,編譯完成後,在生成的.class文件中,就會產生一個Class對象,用於表示這個類的類型信息。
  獲取Class實例的三種方式:
  (1)利用對象調用getClass()方法獲取該對象的Class實例; -- Object的方法!
  Point pt=new Point();
  Class c1=pt.getClass();
  System.out.println(c1.getName()); //getName得到一個String
  (2)使用Class類的靜態方法forName(),用類的名字獲取一個Class實例;
  Class c2=Class.forName("Point"); //會拋出異常
  System.out.println(c2.getName());
  (3)運用.class的方式來獲取Class實例,對於基本數據類型的封裝類,還可以採用.TYPE來獲取相對應的基本數據類型的Class實例。
  Class c3=Point.class;
  System.out.println(c3.getName());
  基本數據類型:
  Class c4=int.class;
  System.out.println(c4.getName());
  封裝類:
  Class c5=Integer.TYPE;
  System.out.println(c5.getName());
  在運行期間,如果我們要產生某個類的對象,Java虛擬機(JVM)會檢查該類型的Class對象是否已被加載。如果沒有被加載,JVM會根據類的名稱找到.class文件並加載它。一旦某個類型的Class對象已被加載到內存,就可以用它來產生該類型的所有對象。
  newInstance() 調用類中缺省的構造方法。 -- 可以用來在不知道一個類的名字的時候創建它的實例!
  if(args.length!=1)
  {
  return;
  }
  try
  {
  Class c=Class.forName(args[0]);
  Point pt=(Point)c.newInstance();
  pt.output();
  }
  catch(Exception e)
  {
  e.printStackTrace();
  }
  4.反射API
  用來表示或反射類、接口和對象在當前的JVM上;
  import java.lang.*; //不能導入lang的子包,必須增加:
  import java.lang.reflect.*;
  java.lang.class.isPrimitive()用來判斷是否是基本數據類型!
  反射API 動態地創建了類的實例,動態地使用類的方法!
  儘量不要用反射API當能夠以別的工具實現時。
  調試器,類的瀏覽器,圖形界面的類的構建器的時候可能會用到反射API;
  5.runtime類
  每一個Java程序都有一個Runtime類的單一實例。
  通過Runtime.getRuntime()獲取Runtime類的實例。 //無構造方法!
  Runtime類是使用單例模式的一個例子。
  成爲了一個程序和JVM的接口,提供了應用程序和環境之間的接口!
  public static void main(String[] args)
  {
  Runtime rt=Runtime.getRuntime(); //得到一個runtime實例
  System.out.println(rt.freeMemory()); //查看當前空閒內存和總內存!
  System.out.println(rt.totalMemory());
  }
  exec()方法可以來執行外部程序;會throw exception
  try
  {
  rt.exec("notepad"); //成爲當前進程的子進程
  }
  catch(Exception e)
  {
  e.printStackTrace();
  }
  也可以用來編譯源文件:
  rt.exec("javac ArrayTest.java");
  爲了更好看到執行過程: 定義一個Process類:
  Process類: 抽象類
  Process p=rt.exec("javac ArrayTest.java"); //獲取了這個子進程;
  InputStream is=p.getInputStream();
  int data;
  while((data=is.read())!=-1)
  {
  System.out.print((char)data);
  }
  Runtime類是使用單例模式的一個例子。
  6.設計模式
  在我們進行程序設計時,逐漸形成了一些典型問題和問題的解決方案,這就是軟件模式。
  每一個模式描述了一個在我們程序設計中經常發生的問題,以及該問題的解決方案。
  當我們碰到模式所描述的問題,就可以直接用相應的解決方法去解決這個問題,這就是設計模式。
  對於JAVA語言的學習:
  1.語法規則和它本身的優越性(相對於其它語言)
  2.解決方法時的一些前人的解法的經驗
  a.單例模式
  (1)一個類只有一個實例,而且自行實例化並向整個系統提供這個實例,這個類稱爲單例類。
  (2)單例類的一個最重要的特點是類的構造方法是私有的,從而避免了外部利用構造方法直接創建多個實例。
  實現:
  class Singleton
  {
  private static final Singleton st=new Singleton();
  private Singleton(){} //必須自己寫了私有構造,纔是單例模式
  public static Singleton getInstance()
  {
  return st;
  }
  }
  主要用於解決什麼問題呢?
  只需要一個實例時...
  設計模式推薦書:《java與模式》閻宏 電子工業
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章