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

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

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

    午后星期午

    2014年3月25日 #

    Java 單例模式詳解

         摘要: 概念:  java中單例模式是一種常見的設(shè)計模式,單例模式分三種:懶漢式單例、餓漢式單例、登記式單例三種。  單例模式有一下特點(diǎn):  1、單例類只能有一個實例。  2、單例類必須自己自己創(chuàng)建自己的唯一實例。  3、單例類必須給所有其他對象提供這一實例。  單例模式確保某個類只有一個實例,而且自行實例化并向整個系統(tǒng)提供這個實例。在計算機(jī)系統(tǒng)中,線程池、緩存、日志對象、對話框、打印機(jī)、顯卡的驅(qū)動程序?qū)?..  閱讀全文

    posted @ 2014-03-27 01:20 午后星期午 閱讀(92) | 評論 (0)編輯 收藏

    值傳遞、引用傳遞的區(qū)別

    所謂值傳遞,就是說僅將對象的值傳遞給目標(biāo)對象,就相當(dāng)于copy;系統(tǒng)將為目標(biāo)對象重新開辟一個完全相同的內(nèi)存空間。
    所謂引用,就是說將對象在內(nèi)存中的地址傳遞給目標(biāo)對象,就相當(dāng)于使目標(biāo)對象和原始對象對應(yīng)同一個內(nèi)存存儲空間。此時,如果對目標(biāo)對象進(jìn)行修改,內(nèi)存中的數(shù)據(jù)也會改變。
    值傳遞,例如:
    class TestT1 
    public static void main(String[] args) 
    int i = 5; 
    int j = 6; 
    System.out.println("before exchange i = "+i);//交換前
    exchange(i, j); 
    System.out.println("after exchange i = "+i);//交換后
    }
    public static void exchange(int a,int b) 
    int k;
    k = a;a = b; b = k; 
    程序的結(jié)果是5!!! 
    這說明,原始數(shù)據(jù)類型是按值傳遞的,這個按值傳遞也是指的是進(jìn)行賦值時的行為。 
    Java語言明確說明取消了指針,因為指針往往是在帶來方便的同時也是導(dǎo)致代碼不安全的根源,同時也會使程序的變得非常復(fù)雜難以理解,但這只是在Java語言中沒有明確的指針定義,實質(zhì)上每一個new語句返回的都是一個指針的引用。
    引用傳遞,例如:
    class TestT2
    public static void main(String[] args) 
    StringBuffer s= new StringBuffer("good"); 
    StringBuffer s2=s; 
    s2.append(" afternoon."); 
    System.out.println(s); 
    對象s和s2指向的是內(nèi)存中的同一個地址因此指向的是同一個對象。 
    這里的意思是進(jìn)行對象賦值操作是傳遞的是對象的引用,因此對象是按引用傳遞的。 
    程序運(yùn)行的輸出是: 
    good afternoon. 
    這說明s2和s是同一個對象。
    總結(jié): 
    大家都知道,在JAVA中變量有以下兩種:
    基本類型變量,包括boolean、byte、char、short、int、long、float、double。
    引用類型變量,包括類、接口、數(shù)組(基本類型數(shù)組和對象數(shù)組)。
    對于基本類型和基本類型變量被當(dāng)作參數(shù)傳遞給方法時,是值傳遞。在方法實體中,無法給原變量重新賦值,也無法改變它的值。
    而對象作為參數(shù),如果在方法中把對象作為參數(shù),方法調(diào)用時,參數(shù)傳遞的是對象的引用,即在方法調(diào)用時,實際參數(shù)把對對象的引用傳遞給形式參數(shù)。這是實際參數(shù)與形式參數(shù)指向同一個地址,即同一個對象,方法執(zhí)行時,對形式參數(shù)的改變實際上就是對實際參數(shù)的改變,這個結(jié)果在調(diào)用結(jié)束后被保留了下來。

    形參和實參有以下顯著的區(qū)別:
        1、形參不能離開方法。形參只有在方法內(nèi)才會發(fā)生作用,也只有在方法中使用,不會在方法外可見。而實參可以再程序的任何地方都使用。
        2、形參代表一個合集,具有不確定性,而形參代表一個獨(dú)立事物,具有確定性(即使是為null)。也就是說,形參不能代表具體的對象,只能代表這些對象共同的屬性(比如超類、各種其他自定義屬性等等),而實參則是具體的對象(比如超類的實例)。
        3、形參的值在調(diào)用時根據(jù)調(diào)用者更改,實參則用自身的值更改形參的值(指針、引用皆在此列)

    posted @ 2014-03-26 22:29 午后星期午 閱讀(143) | 評論 (0)編輯 收藏

    使用Spring mvc 利用java的反射技術(shù),來掃描對應(yīng)包下的注解請求url 統(tǒng)一保存在數(shù)據(jù)庫中

    僅對  @requestMapping("/xxxx/其他參數(shù)")  的格式
     package cc.wshao.springmvc.util;
    import java.io.File;
    import java.lang.reflect.Method;
    import java.net.URL;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import cc.wshao.springmvc.service.RightService;
    public class RegRightUtils {
    private static final String rootUrl = "/spring";
    private static RightService rightService;
    public static void main(String[] args) throws Exception {
    ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
      rightService = context.getBean(RightService.class);
    ClassLoader classLoader = RegRightUtils.class.getClassLoader();
    URL url = classLoader.getResource("com/er07/book/springmvc/controller");
    String rootPath = url.getPath().toString();
    File rootFile = new File(rootPath);
    File [] files = rootFile.listFiles();
    for(File f: files) {
    System.err.println(f.getName());
    String className = f.getName().substring(0, f.getName().indexOf(".class"));
    Class clazz = Class.forName("com.er07.book.springmvc.controller."+className);
    parseClass(clazz);  //解析  出url
    }
     
    }
    public  static void parseClass(Class clazz) {
     
    if(clazz.isAnnotationPresent(Controller.class)) {   //是否為一個controller ? 
    String classUrl ="";
     if(clazz.isAnnotationPresent(RequestMapping.class)) {
     RequestMapping requestMapping_clazz = (RequestMapping) clazz.getAnnotation(RequestMapping.class);
      classUrl = requestMapping_clazz.value()[0];
      
      if(classUrl.equals("/")) {  //如果是"/" 的話  制空    
      classUrl ="";
      }
     }
     Method [] ms = clazz.getDeclaredMethods();
     
     for(Method m :ms) {
     
     if(m.isAnnotationPresent(RequestMapping.class)) {
     RequestMapping requestMapping_method = m.getAnnotation(RequestMapping.class);
     String methodUrl = requestMapping_method.value()[0];
     
       int  index = methodUrl.indexOf("/");
       index = methodUrl.indexOf("/",index+1);
       if(index!=-1) {  //如果存在 則進(jìn)行截取前面的url 
       
        methodUrl = methodUrl.substring(0, index);
       }
     String resultUrl = rootUrl+classUrl+methodUrl;
     rightService.appendRightByUrl(resultUrl);
     }
     }
    }
    }
    }
    //實現(xiàn)方法: 
    public void appendRightByUrl(String url) {
    //查詢 此url 在數(shù)據(jù)庫中是否存在  此權(quán)限
    String hql = "from Right where rightUrl =?";
    Right r = (Right) this.rightDao.uniqueResult(hql, url);
    if(r==null) { //不存在 , 插入數(shù)據(jù)庫中
    Right newRight = new Right();
    newRight.setRightUrl(url);
    this.saveOrUpdateRight(newRight);
    }
    }

    posted @ 2014-03-25 14:54 午后星期午 閱讀(1248) | 評論 (0)編輯 收藏

    主站蜘蛛池模板: 亚洲一级免费视频| 久久这里只精品国产免费10 | 东北美女野外bbwbbw免费 | 无码AV片在线观看免费| 久久精品国产亚洲网站| 18禁超污无遮挡无码免费网站| 亚洲熟妇少妇任你躁在线观看无码| 色老头综合免费视频| 精品亚洲一区二区三区在线观看 | 亚洲高清一区二区三区电影| 免费黄色毛片视频| 国产区图片区小说区亚洲区| 亚洲A丁香五香天堂网| 国产日韩精品无码区免费专区国产| 中文字幕精品亚洲无线码二区| a级毛片高清免费视频| 自怕偷自怕亚洲精品| 免费看成人AA片无码视频羞羞网| va天堂va亚洲va影视中文字幕| 日韩免费视频播播| 久久国产一片免费观看| 亚洲高清视频在线观看| 99久久99这里只有免费费精品 | 亚洲国产人成中文幕一级二级| 一级毛片大全免费播放下载| 亚洲国产成人一区二区三区| 麻豆视频免费观看| 国产亚洲精品欧洲在线观看| 亚洲精品tv久久久久久久久| 91精品成人免费国产片| 久久亚洲精品无码gv| 国产精品亚洲片在线观看不卡| 猫咪免费人成网站在线观看| 亚洲av无码专区在线电影| 亚洲午夜国产片在线观看| 日本亚洲欧洲免费天堂午夜看片女人员| 亚洲成人网在线观看| 免费国产小视频在线观看| 女人体1963午夜免费视频| 亚洲乱码在线卡一卡二卡新区| 亚洲一级Av无码毛片久久精品|