<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    BloveSaga

    在希臘帕爾納斯山南坡上,有一個(gè)馳名世界的戴爾波伊神托所,在它的入口處的巨石上赫然銹刻著這樣幾個(gè)大字: 認(rèn)識你自己!

      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      34 隨筆 :: 12 文章 :: 122 評論 :: 0 Trackbacks

    #

         摘要: JAVA 程序員面試 32 問 第一,談?wù)? final , ...  閱讀全文
    posted @ 2006-06-05 15:16 藍(lán)色Saga 閱讀(328) | 評論 (2)編輯 收藏

    >>>>>>>>>>>>>>>>Runtime和Process類<<<<<<<<<<<<<<<<<<<
    1> 每一個(gè)Java程序都有一個(gè)Runtime類的單一實(shí)例。
    2> 通過Runtime.getRuntime()獲取Runtime類的實(shí)例。
    3> Runtime類是使用單例模式的一個(gè)例子。
    ?? Runtime沒有public的構(gòu)造方法。我們必須用Runtime的靜態(tài)方法getRuntime();我們可以用
    ?? Runtime的exec來執(zhí)行一個(gè)外部程序,也可以用來編譯一個(gè)源文件(用來做圖形界面的編譯器)。
    import java.io.*;
    class RuntimeTest
    {
    ?public static void main(String[] args)
    ?{
    ??Runtime rt=Runtime.getRuntime();
    ??//System.out.println(rt.freeMemory());
    ??try
    ??{
    ???//rt.exec("notepad");
    ???Process p=rt.exec("java ArrayTest");
    ???InputStream is=p.getInputStream(); //從執(zhí)行ArrayTest類所得來的
    ???int data;
    ???while((data=is.read())!=-1)
    ???{
    ????System.out.print((char)data);
    ???}
    ??}
    ??catch(Exception e)
    ??{
    ???e.printStackTrace();
    ??}
    ?}
    }

    ------------->>設(shè)計(jì)模式<<-------------
    1> 在我們進(jìn)行程序設(shè)計(jì)時(shí),逐漸形成了一些典型問題和問題解決方案,這就是軟件模式。
    2> 每一個(gè)模式描述了一個(gè)在我們程序設(shè)計(jì)中經(jīng)常發(fā)生的問題,以及該問題的解決方案。
    3> 當(dāng)我們碰到模式所描述的問題,就可以直接用相應(yīng)的解決方法去解決這個(gè)問題,這就是設(shè)計(jì)模式。
    <$>單例(Singleton)模式
    1> 一個(gè)類只有一個(gè)實(shí)例,而且自行實(shí)例化并像整個(gè)系統(tǒng)提供這個(gè)實(shí)例,這個(gè)類稱為單例類。
    2> 單例類的一個(gè)重要特點(diǎn)就是類的構(gòu)造方法是私有的,從而避免了外部用利用構(gòu)造方法直接創(chuàng)建多個(gè)實(shí)例。
    ?? 如:Runtime類。

    單例類的實(shí)現(xiàn):(code)
    class Singleton
    {
    ?private static final Singleton st=new Singleton();
    ?private Singleton()
    ?{
    ??
    ?}
    ?public static Singleton getInstance()
    ?{
    ??return st;
    ?}
    }

    posted @ 2006-06-05 14:47 藍(lán)色Saga 閱讀(324) | 評論 (0)編輯 收藏

    =============================封裝類===============
    針對八種基本數(shù)據(jù)類型定義的相應(yīng)的引用類型-封裝類(包裝類,包裹類)
    基本數(shù)據(jù)類型????????? 封裝類
    ?boolean?????????????? Boolean
    ?byte????????????????? Byte
    ?short???????????????? Short
    ?int?????????????????? Integer
    ?long????????????????? Long
    ?char????????????????? Character
    ?float???????????????? Float
    ?double??????????????? Double
    所有的封狀類都是一個(gè)只讀類(不能修改的).針對沒個(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對象轉(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對象。也就是說,當(dāng)我們編寫一個(gè)類,編譯完成后,在生成
    ?? 的.class文件中,就會產(chǎn)生一個(gè)Class對象,用于表示這個(gè)類的類型信息。
    2> 獲取Class實(shí)例的方法有三種:
    ?? <1>利用對象調(diào)用getClass()方法獲得該對象的Class實(shí)例。
    ?? <2>使用Class類的靜態(tài)方法forName(),用類的名字獲取一個(gè)Class的是實(shí)例。
    ?? <3>運(yùn)用.class的方式來獲取Class實(shí)例,對于基本數(shù)據(jù)類型的封裝類,還可以用.TYPE來獲取相應(yīng)的
    ????? 基本數(shù)據(jù)類型的Class實(shí)例。
    ?? <4>在運(yùn)行期間,如果我們要產(chǎn)生某個(gè)類的對象,JAVA虛擬機(jī)(JVM)會檢查該類型的Class對象是否被
    ????? 加載,如果沒有加載,JVM會根據(jù)類的名稱找到.class文件并加載它。一旦某個(gè)類型的Class對象已
    ????? 經(jīng)被加載到內(nèi)存,就可以用它來產(chǎn)生該類型所有的對象。
    ?? <5>newInstance()調(diào)用類中缺省的構(gòu)造方法。(好處是我們在不知道類的名字的情況下去創(chuàng)造一個(gè)實(shí)例)
    import java.lang.reflect.*;?????? //子包必須手動導(dǎo)入
    class ClassTest
    {
    ?public static void main(String[] args)//throws Exception
    ?{
    ??/*
    ??Point pt=new Point();?????????????
    ??Class c1=pt.getClass();//利用對象調(diào)用getClass()方法獲得該對象的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的方式來獲取Class實(shí)例
    ??System.out.println(c3.getName());
    ??
    ??Class c4=Integer.TYPE;//封裝類用.TYPE來獲取相應(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-05 05:59 藍(lán)色Saga 閱讀(135) | 評論 (0)編輯 收藏

    ~~~~~~~~~~~~~~~~~~~~~~~~~~函數(shù)的調(diào)用~~~~~~~~~~~~~~~~~~~~
    1> 在java中,傳參時(shí),都是以傳值的形式驚行。
    2> 對于基本數(shù)據(jù)類型,傳遞的是數(shù)據(jù)的拷貝,對于引用類型,傳遞的引用的拷貝。
    3> 當(dāng)我們在打印一個(gè)對象的時(shí)候,比如System.out.println(pt);,它會自動調(diào)用類的toString()方法
    ?? ,所以建議在所有的子類中重寫toString()方法。
    我們寫一個(gè)函數(shù)用來交換兩個(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,并沒有達(dá)到我們的要求,為什么呢?那是因?yàn)閷τ诨緮?shù)據(jù)類型,傳遞的是數(shù)據(jù)的拷貝,對于引用類型,傳遞的是引用(首地址)的拷貝。看看下面的內(nèi)存圖解應(yīng)該你就能看出來了.看看引用類型怎么來實(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)存變化圖:
    以上說明了在Java中函數(shù)的調(diào)用:
    a> 在Java中,傳參時(shí),都是以傳值的方式進(jìn)行。
    b> 對于基本數(shù)據(jù)類型,傳遞的是數(shù)據(jù)的拷貝,對于引用類型,傳遞的是引用(首地址)的拷貝。
    posted @ 2006-06-05 04:19 藍(lán)色Saga 閱讀(133) | 評論 (0)編輯 收藏

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

    * 淺克隆是針對沒有引用類型的變量來克隆。針對引用類型的克隆應(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-05 04:15 藍(lán)色Saga 閱讀(155) | 評論 (0)編輯 收藏

    僅列出標(biāo)題
    共7頁: 上一頁 1 2 3 4 5 6 7 下一頁 
    主站蜘蛛池模板: 国产亚洲精品看片在线观看 | 国产精品视_精品国产免费 | 亚洲精品无码久久久久| 亚洲国产成人久久综合一| 亚洲中文字幕久久无码| 一级黄色片免费观看| 18勿入网站免费永久| 在线a亚洲v天堂网2019无码| 国产91在线|亚洲| 国产又黄又爽又大的免费视频| 黄色片网站在线免费观看| 久久免费高清视频| 午夜国产大片免费观看| 亚洲欧洲日产v特级毛片| 久久精品无码专区免费| 免费久久精品国产片香蕉| 亚洲码一区二区三区| 久久大香香蕉国产免费网站| 精品亚洲视频在线观看| 在线观看免费黄色网址| 亚洲天堂在线视频| 黄色一级毛片免费| 久久乐国产精品亚洲综合| 四虎国产成人永久精品免费 | 免费网站看v片在线香蕉| 亚洲视频在线不卡| 精品无码国产污污污免费网站国产 | a毛片在线还看免费网站| 久久亚洲国产视频| 精品国产污污免费网站入口| 亚洲成色www久久网站夜月| 人妻仑乱A级毛片免费看| 亚洲VA综合VA国产产VA中| 国产精品国产亚洲区艳妇糸列短篇| 免费看一级一级人妻片| 国产精品免费视频网站| www免费插插视频| 亚洲黄色在线电影| 亚洲AV无码乱码在线观看| 精品一卡2卡三卡4卡免费视频| 国产91精品一区二区麻豆亚洲 |