=============================封裝類===============
          針對(duì)八種基本數(shù)據(jù)類型定義的相應(yīng)的引用類型-封裝類(包裝類,包裹類)
          基本數(shù)據(jù)類型????????? 封裝類
          ?boolean?????????????? Boolean
          ?byte????????????????? Byte
          ?short???????????????? Short
          ?int?????????????????? Integer
          ?long????????????????? Long
          ?char????????????????? Character
          ?float???????????????? Float
          ?double??????????????? Double
          所有的封狀類都是一個(gè)只讀類(不能修改的).針對(duì)沒(méi)個(gè)基本類型我們只能建立一個(gè)這讀的。

          class Test
          {
          ?public static void main(String[] args)
          ?{
          ? int i=3;
          ? Integer in=new Integer(i);
          ? int j=in.intValue();
          ? System.out.println(j);
          ? String str=in.toString();? //把Integer對(duì)象轉(zhuǎn)換為String類型
          ? System.out.println("str="+str);
          ?
          ? String str1="123";
          ? System.out.println(Integer.valueOf(str1));? //把String類型轉(zhuǎn)換為Integer類型
          ?
          ? boolean b1=false;
          ? Boolean b=new Boolean(b1);
          ? String s1=b.toString();
          ? System.out.println(s1);
          ?
          ? String s2="NO";
          ? System.out.println(Boolean.valueOf(s2));
          ?}
          }

          *****************Class*********************
          1> 在Java中,每個(gè)class都有一個(gè)相應(yīng)的Class對(duì)象。也就是說(shuō),當(dāng)我們編寫(xiě)一個(gè)類,編譯完成后,在生成
          ?? 的.class文件中,就會(huì)產(chǎn)生一個(gè)Class對(duì)象,用于表示這個(gè)類的類型信息。
          2> 獲取Class實(shí)例的方法有三種:
          ?? <1>利用對(duì)象調(diào)用getClass()方法獲得該對(duì)象的Class實(shí)例。
          ?? <2>使用Class類的靜態(tài)方法forName(),用類的名字獲取一個(gè)Class的是實(shí)例。
          ?? <3>運(yùn)用.class的方式來(lái)獲取Class實(shí)例,對(duì)于基本數(shù)據(jù)類型的封裝類,還可以用.TYPE來(lái)獲取相應(yīng)的
          ????? 基本數(shù)據(jù)類型的Class實(shí)例。
          ?? <4>在運(yùn)行期間,如果我們要產(chǎn)生某個(gè)類的對(duì)象,JAVA虛擬機(jī)(JVM)會(huì)檢查該類型的Class對(duì)象是否被
          ????? 加載,如果沒(méi)有加載,JVM會(huì)根據(jù)類的名稱找到.class文件并加載它。一旦某個(gè)類型的Class對(duì)象已
          ????? 經(jīng)被加載到內(nèi)存,就可以用它來(lái)產(chǎn)生該類型所有的對(duì)象。
          ?? <5>newInstance()調(diào)用類中缺省的構(gòu)造方法。(好處是我們?cè)诓恢李惖拿值那闆r下去創(chuàng)造一個(gè)實(shí)例)
          import java.lang.reflect.*;?????? //子包必須手動(dòng)導(dǎo)入
          class ClassTest
          {
          ?public static void main(String[] args)//throws Exception
          ?{
          ? /*
          ? Point pt=new Point();?????????????
          ? Class c1=pt.getClass();//利用對(duì)象調(diào)用getClass()方法獲得該對(duì)象的Class實(shí)例
          ? System.out.println(c1.getName());
          ?
          ? Class c2=Class.forName("Point");//使用Class類的靜態(tài)方法forName(),用類的名字獲取一個(gè)Class的是實(shí)例
          ? System.out.println(c2.getName());
          ?
          ? Class c3=Point.class;//運(yùn)用.class的方式來(lái)獲取Class實(shí)例
          ? System.out.println(c3.getName());
          ?
          ? Class c4=Integer.TYPE;//封裝類用.TYPE來(lái)獲取相應(yīng)的基本數(shù)據(jù)類型的Class實(shí)例。
          ? System.out.println(c4.getName());
          ? */
          ? /*
          ? System.out.println("before new Point()");
          ? new Point();
          ? System.out.println("after new Point()");
          ? Class.forName("Line");
          ? */
          ? /*
          ? if(args.length!=1)
          ? {
          ?? return;
          ? }
          ? try
          ? {
          ?? Class c=Class.forName(args[0]);
          ?? Point pt=(Point)c.newInstance();
          ?? pt.output();
          ? }
          ? catch(Exception e)
          ? {
          ?? e.printStackTrace();
          ? }
          ? */
          ? if(args.length!=1)
          ? {
          ?? return;
          ? }
          ? try
          ? {
          ?? Class c=Class.forName(args[0]);
          ?? Constructor[] cons=c.getDeclaredConstructors();
          ?? /*
          ?? for(int i=0;i<cons.length;i++)
          ?? {
          ??? System.out.println(cons[i]);
          ?? }
          ?? Method[] ms=c.getDeclaredMethods();
          ?? for(int i=0;i<ms.length;i++)
          ?? {
          ??? System.out.println(ms[i]);
          ?? }*/
          ?? Class[] params=cons[0].getParameterTypes();
          ?? Object[] paramValues=new Object[params.length];
          ?? for(int i=0;i<params.length;i++)
          ?? {
          ??? if(params[i].isPrimitive())
          ??? {
          ???? paramValues[i]=new Integer(i+3);
          ??? }
          ?? }
          ?? Object o=cons[0].newInstance(paramValues);
          ?? Method[] ms=c.getDeclaredMethods();
          ?? ms[0].invoke(o,null);
          ? }
          ? catch(Exception e)
          ? {
          ?? e.printStackTrace();
          ? }
          ?
          ?}
          }

          class Point
          {
          ?static
          ?{
          ? System.out.println("Loading Point");
          ?}
          ?int x,y;
          ?void output()
          ?{
          ? System.out.println("x="+x+","+"y="+y);
          ?}
          ?Point(int x,int y)
          ?{
          ? this.x=x;
          ? this.y=y;
          ?}
          }

          class Line
          {
          ?static
          ?{
          ? System.out.println("Loading Line");
          ?}
          }

          posted @ 2006-06-27 17:29 多力宇揚(yáng) 閱讀(363) | 評(píng)論 (0)編輯 收藏

          ~~~~~~~~~~~~~~~~~~~~~~~~~~函數(shù)的調(diào)用~~~~~~~~~~~~~~~~~~~~
          1> 在java中,傳參時(shí),都是以傳值的形式驚行。
          2> 對(duì)于基本數(shù)據(jù)類型,傳遞的是數(shù)據(jù)的拷貝,對(duì)于引用類型,傳遞的引用的拷貝。
          3> 當(dāng)我們?cè)诖蛴∫粋€(gè)對(duì)象的時(shí)候,比如System.out.println(pt);,它會(huì)自動(dòng)調(diào)用類的toString()方法
          ?? ,所以建議在所有的子類中重寫(xiě)toString()方法。
          我們寫(xiě)一個(gè)函數(shù)用來(lái)交換兩個(gè)變量(x,y)的值.
          ?code:
          class StringTest
          {
          ?public static void change(int x, int y)
          ?{
          ? x=x+y;
          ? y=x-y;
          ? x=x-y;
          ?}
          ?/*
          ?public static void change(int[] num)
          ?{
          ? num[0]=num[0]+num[1];
          ? num[1]=num[0]-num[1];
          ? num[0]=num[0]-num[1];
          ?}
          ?public static void change(Point pt)
          ?{
          ? pt.x=pt.x+pt.y;
          ? pt.y=pt.x-pt.y;
          ? pt.x=pt.x-pt.y;
          ?}
          ?*/
          ?public static void main(String[] args)
          ?{
          ?int x=3;
          ?int y=4;
          ?change(3,4);
          ?System.out.println("x="+x+","+"y="+y);
          ?}
          我們期望的輸出結(jié)果是 x=4,y=3 然后你運(yùn)行后發(fā)現(xiàn)結(jié)果為x=3,y=4,并沒(méi)有達(dá)到我們的要求,為什么呢?那是因?yàn)閷?duì)于基本數(shù)據(jù)類型,傳遞的是數(shù)據(jù)的拷貝,對(duì)于引用類型,傳遞的是引用(首地址)的拷貝。看看下面的內(nèi)存圖解應(yīng)該你就能看出來(lái)了.看看引用類型怎么來(lái)實(shí)現(xiàn):

          code:
          class StringTest
          {
          ?/*
          ?public static void change(int x, int y)
          ?{
          ? x=x+y;
          ? y=x-y;
          ? x=x-y;
          ?}
          ?*/
          ?public static void change(int[] num)
          ?{
          ? num[0]=num[0]+num[1];
          ? num[1]=num[0]-num[1];
          ? num[0]=num[0]-num[1];
          ?}
          ?public static void change(Point pt)
          ?{
          ? pt.x=pt.x+pt.y;
          ? pt.y=pt.x-pt.y;
          ? pt.x=pt.x-pt.y;
          ?}
          ?public static void main(String[] args)
          ?{
          ? /*
          ?? int x=3;
          ?? int y=4;
          ?? change(3,4);
          ?? System.out.println("x="+x+","+"y="+y);
          ?? */
          ?? int[] num=new int[]{3,4};
          ?? change(num);
          ?? System.out.println("x="+num[0]+","+"y="+num[1]);
          ??
          ?? Point pt=new Point();
          ?? pt.x=3;
          ?? pt.y=4;
          ?? change(pt);
          ?? System.out.println("x="+pt.x+","+"y="+pt.y);?
          ?}
          class Point
          {
          ?int x,y;
          }
          再看看引用類型的內(nèi)存變化圖:
          以上說(shuō)明了在Java中函數(shù)的調(diào)用:
          a> 在Java中,傳參時(shí),都是以傳值的方式進(jìn)行。
          b> 對(duì)于基本數(shù)據(jù)類型,傳遞的是數(shù)據(jù)的拷貝,對(duì)于引用類型,傳遞的是引用(首地址)的拷貝。

          posted @ 2006-06-27 17:26 多力宇揚(yáng) 閱讀(240) | 評(píng)論 (0)編輯 收藏

          ^^^^^^^^^^^^^^^對(duì)象的克隆^^^^^^^^^^^^^
          1> 為了獲取對(duì)象的一份拷貝,我們可以利用Object類的clone()方法。
          2> 在派生類中覆蓋基類的clone(),并聲明為public。
          3> 在派生類的clone()方法中,調(diào)用super.clone()。
          4> 在派生類中實(shí)現(xiàn)Cloneable接口。
          4> 沒(méi)有抽象方法的接口叫標(biāo)識(shí)接口。
          5> 為什么我們?cè)谂缮愔懈采wObject的clone()方法時(shí),一定要調(diào)用super.clone()呢?在運(yùn)行時(shí)刻,Object?的clone()方法能識(shí)別出你要復(fù)制的是哪一個(gè)對(duì)象,然后為此對(duì)象分配空間,并進(jìn)行對(duì)象的復(fù)制,將原?始對(duì)象的內(nèi)容一一復(fù)制到新的對(duì)象空間去。

          * 淺克隆是針對(duì)沒(méi)有引用類型的變量來(lái)克隆。針對(duì)引用類型的克隆應(yīng)該用Deeply Clone。
          淺克隆:
          Code:
          class FleetClone
          {
          ?public static void main(String[] args)
          ?{
          ?? Professor p=new Professor("feiyang",23);
          ?? Student s1=new Student("zhangshan",18,p);
          ?? Student s2=(Student)s1.clone();
          ?? s2.p.name="feifei";
          ?? s2.p.age=30;
          ?? System.out.println("name="+s1.p.name+","+"age="+s1.p.age);
          ?}
          }
          class Professor
          {
          ?String name;
          ?int age;
          ?Professor(String name,int age)
          ?{
          ? this.name=name;
          ? this.age=age;
          ?}
          }

          class Student implements Cloneable
          {
          ?Professor p;
          ?String name;
          ?int age;
          ?Student(String name, int age,Professor p)
          ?{
          ? this.name=name;
          ? this.age=age;
          ? this.p=p;
          ?}
          ?public Object clone()
          ?{
          ? Object o=null;
          ? try
          ? {
          ?? o=super.clone();
          ? }
          ? catch(CloneNotSupportedException e)
          ? {
          ?? e.printStackTrace();
          ? }
          ? return o;
          ?}
          }
          改變學(xué)生s2的教授信息,打印s1教授信息,結(jié)果為:name=feifei,age=30.產(chǎn)生這個(gè)結(jié)果是因?yàn)镾tring是一個(gè)常量類型.
          ?
          深克隆
          code:
          class DeeplyClone
          {
          ?public static void main(String[] args)
          ?{
          ?? Professor p=new Professor("feiyang",23);
          ?? Student s1=new Student("zhangshan",18,p);
          ?? Student s2=(Student)s1.clone();
          ?? s2.p.name="Bill.Gates";
          ?? s2.p.age=30;
          ?? System.out.println("name="+s1.p.name+","+"age="+s1.p.age);
          ?}
          }
          class Professor implements Cloneable
          {
          ?String name;
          ?int age;
          ?Professor(String name,int age)
          ?{
          ? this.name=name;
          ? this.age=age;
          ?}
          ?public Object clone()
          ?{
          ? Object o=null;
          ? try
          ? {
          ?? o=super.clone();
          ? }
          ? catch(CloneNotSupportedException e)
          ? {
          ?? e.printStackTrace();
          ? }
          ? return o;
          ?}
          }

          class Student implements Cloneable
          {
          ?Professor p;
          ?String name;
          ?int age;
          ?Student(String name, int age,Professor p)
          ?{
          ? this.name=name;
          ? this.age=age;
          ? this.p=p;
          ?}
          ?public Object clone()
          ?{
          ? //Object o=null;
          ? Student o=null;
          ? try
          ? {
          ?? o=(Student)super.clone();
          ? }
          ? catch(CloneNotSupportedException e)
          ? {
          ?? e.printStackTrace();
          ? }
          ? o.p=(Professor)p.clone();
          ? return o;
          ?}
          }
          打印結(jié)果為:name=Bill.Gates,age=30,這就是深克隆.

          posted @ 2006-06-27 17:24 多力宇揚(yáng) 閱讀(901) | 評(píng)論 (0)編輯 收藏

          Java數(shù)組的相關(guān)操作

          1> 在Java中所有的數(shù)組都有一個(gè)缺省的屬性length,用于獲取數(shù)組元素的個(gè)數(shù)。
          2> 數(shù)組的復(fù)制: System.arraycopy()。
          3> 數(shù)組的排序: Arrays.sort()。
          4> 在已排序的數(shù)組中查找某個(gè)元素:Arrays.binarySearch()。
          具體的看看下面的2個(gè)例子:
          code1:
          class ArrayTest
          {
          ?public static void main(String[] args)
          ?{
          ? /*數(shù)組的copy
          ? int[] num1=new int[]{1,2,3};
          ? int[] num2=new int[3];
          ? System.arraycopy(num1,0,num2,0,num1.length);
          ? for(int i=0;i<num2.length;i++)
          ? {
          ?? System.out.println(num2[i]);
          ? }
          ? */
          ? //引用類型的數(shù)組copy
          ? Point[] pts1=new Point[]{new Point(1,1),new Point(2,2),new Point(3,3)};
          ? Point[] pts2=new Point[3];
          ? System.arraycopy(pts1,0,pts2,0,pts1.length);
          ? for(int i=0;i<pts2.length;i++)
          ? {
          ?? System.out.println("x="+pts2[i].x+","+"y="+pts2[i].y);
          ? }
          ? /*
          ? *因?yàn)橐妙愋蛡鬟f的是引用的拷貝,所以我們修改pts2數(shù)組的第二個(gè)點(diǎn)的坐標(biāo),
          ? *當(dāng)我們打印pts1數(shù)組的第一個(gè)點(diǎn)的坐標(biāo)時(shí),它的坐標(biāo)點(diǎn)已經(jīng)被修改為(5,5)了
          ? pts2[1].x=5;
          ? pts2[1].y=5;
          ? System.out.println("x="+pts1[1].x+","+"y="+pts1[1].y);
          ? */
          ?}
          }

          class Point
          {
          ?int x, y;
          ?Point(int x,int y)
          ?{
          ? this.x=x;
          ? this.y=y;
          ?}
          }


          code2:
          import java.util.*;
          class TestArray
          {
          ?public static void main(String[] args)
          ?{
          ? /*
          ? int[] num=new int[]{3,2,1};
          ? Arrays.sort(num);
          ? for(int i=0;i<num.length;i++)
          ? {
          ?? System.out.println(num[i]);
          ? }
          ? int index=Arrays.binarySearch(num,3);
          ? System.out.println("index="+index);
          ? System.out.println("Element="+num[index]);
          ? */
          ? Student[] ss=new Student[]{new Student("zhangshan",1),
          ??????????????????????????? new Student("lisi",2),
          ??????????????????????????? new Student("wangwu",3),
          ??????????????????????????? new Student("mybole",3)};
          ?? Arrays.sort(ss);
          ?? for(int i=0;i<ss.length;i++)
          ?? {
          ??? System.out.println(ss[i]);
          ?? }
          ?? int index=Arrays.binarySearch(ss,new Student("lisi",2));
          ?? System.out.println("name="+ss[index].name+","+"index="+index);
          ?}
          }

          class Student implements Comparable
          {
          ?String name;
          ?int num;
          ?Student(String name,int num)
          ?{
          ? this.name=name;
          ? this.num=num;
          ?}
          ?public String toString()
          ?{
          ? return "name="+name+","+"number="+num;
          ?}
          ?public int compareTo(Object o)? //對(duì)于Object[]排序要求實(shí)現(xiàn)Comparable接口
          ?{
          ? 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)
          ? {
          ?? result=name.compareTo(s.name);
          ? }
          ? return result;
          ?}
          }

          posted @ 2006-06-27 17:22 多力宇揚(yáng) 閱讀(188) | 評(píng)論 (0)編輯 收藏

          理解繼承是理解面向?qū)ο蟪绦蛟O(shè)計(jì)的關(guān)鍵.在Java中,通過(guò)關(guān)鍵字extends繼承一個(gè)已有的類,被繼承的類稱為父類(超類,基類),新的類稱為子類(派生類).在Java中不允許多繼承.code:
          class Animal
          {
          ?int height,weight;
          ?void eat()
          ?{
          ? System.out.println("Animal eat!");
          ?}
          ?void sleep()
          ?{
          ? System.out.println("Animal sleep!");
          ?}
          ?void breathe()
          ?{
          ? System.out.println("Animal breathe!");
          ?}
          }
          class Fish extends Animal
          {
          ?
          }
          class DoMain
          {
          ?public static void main(String[] args)
          ?{
          ? Animal an=new Animal();
          ? Fish fn=new Fish();
          ?
          ? an.breathe();
          ? fn.breathe();
          ? fn.height=30;
          ? fn.weight=20;
          ?}
          }
          Result:
          F:\Java Develop>javac Animal.java

          F:\Java Develop>java DoMain
          Animal breathe!
          Animal breathe!
          (這說(shuō)明派生類繼承了父類的所有方法和成員變量.)

          方法的覆蓋(override)
          在子類中定義一個(gè)與父類同名,返回類型,參數(shù)類型均相同的一個(gè)方法,稱為方法的覆蓋,方法的覆蓋發(fā)生在子類與父類之間.
          code:
          class Animal
          {
          ?int height,weight;
          ?void eat()
          ?{
          ? System.out.println("Animal eat!");
          ?}
          ?void sleep()
          ?{
          ? System.out.println("Animal sleep!");
          ?}
          ?void breathe()
          ?{
          ? System.out.println("Animal breathe!");
          ?}
          }
          class Fish extends Animal
          {
          ?int weight,height;?? //隱藏了父類的weight,height;
          ?void breathe()? //override method breathe()
          ?{
          ? super.breathe();? //用super調(diào)用父類的構(gòu)造方法
          ? System.out.println("Fish bubble");
          ?}
          }
          class DoMain
          {
          ?public static void main(String[] args)
          ?{
          ?// Animal an=new Animal();
          ? Fish fn=new Fish();
          ?
          ? an.breathe();
          ? fn.breathe();
          ? fn.height=30;
          ? fn.weight=20;
          ?}
          }
          輸出結(jié)果:
          F:\Java Develop>javac Animal.java

          F:\Java Develop>java DoMain
          Animal breathe!
          Fish bubble

          特殊變量super
          * 使用特殊變量super提供對(duì)父類的訪問(wèn)
          * 可以使用super訪問(wèn)父類被子類隱藏的變量或覆蓋的方法
          * 每個(gè)子類構(gòu)造方法的第一條語(yǔ)句都是隱含的調(diào)用super,如果父類沒(méi)有這種形式的構(gòu)造函數(shù)就會(huì)報(bào)錯(cuò).
          code:
          class Animal
          {
          ?int height,weight;
          ?Animal()
          ?{
          ? System.out.println("Animal construct");
          ?}
          ?void eat()
          ?{
          ? System.out.println("Animal eat!");
          ?}
          ?void sleep()
          ?{
          ? System.out.println("Animal sleep!");
          ?}
          ?void breathe()
          ?{
          ? System.out.println("Animal breathe!");
          ?}
          }

          class Fish extends Animal
          {
          ?Fish()
          ?{
          ? System.out.println("Fish construct");
          ?}
          ?void breathe()? //override method breathe()
          ?{
          ? System.out.println("Fish bubble");
          ?}
          }
          class DoMain
          {
          ?public static void main(String[] args)
          ?{
          ? //Animal an=new Animal();
          ? Fish fn=new Fish();
          ?
          ? //an.breathe();
          ? //fn.breathe();
          ? //fn.height=30;
          ? //fn.weight=20;
          ?}
          }
          輸出結(jié)果:
          F:\Java Develop>javac Animal.java

          F:\Java Develop>java DoMain
          Animal construct
          Fish construct



          ?通過(guò)覆蓋父類的方法來(lái)實(shí)現(xiàn),在運(yùn)行時(shí)根據(jù)傳遞對(duì)象的引用,來(lái)調(diào)用相應(yīng)的方法.
          code:
          class Animal
          {
          ?int height,weight;
          ?Animal()
          ?{
          ? System.out.println("Animal construct");
          ?}
          ?void eat()
          ?{
          ? System.out.println("Animal eat!");
          ?}
          ?void sleep()
          ?{
          ? System.out.println("Animal sleep!");
          ?}
          ?void breathe()
          ?{
          ? System.out.println("Animal breathe!");
          ?}
          }

          class Fish extends Animal
          {
          ?Fish()
          ?{
          ? System.out.println("Fish construct");
          ?}
          ?void breathe()? //override method breathe()
          ?{
          ? System.out.println("Fish bubble");
          ?}
          }
          class DoMain
          {
          ?static void fn(Animal an)
          ?{
          ? an.breathe();
          ?}
          ?public static void main(String[] args)
          ?{
          ? //Animal an=new Animal();
          ? Fish fh=new Fish();
          ? Animal an;
          ? an=fh;
          ? DoMain.fn(an);
          ?}
          }

          posted @ 2006-06-27 17:20 多力宇揚(yáng) 閱讀(210) | 評(píng)論 (0)編輯 收藏

          僅列出標(biāo)題
          共5頁(yè): 上一頁(yè) 1 2 3 4 5 下一頁(yè) 
          主站蜘蛛池模板: 丰顺县| 保定市| 清水河县| 环江| 龙州县| 永新县| 浙江省| 民县| 陇西县| 长兴县| 黄山市| 安龙县| 永登县| 棋牌| 武义县| 乐平市| 新民市| 视频| 博客| 天柱县| 宜宾县| 东宁县| 游戏| 自治县| 长丰县| 洛浦县| 淅川县| 黄浦区| 永善县| 富阳市| 保康县| 怀安县| 信宜市| 都匀市| 清涧县| 隆子县| 壤塘县| 阿瓦提县| 长海县| 松阳县| 葫芦岛市|