javaweb之Java基礎加強,javawebjava基礎

來源:互聯網
上載者:User

javaweb之Java基礎加強,javawebjava基礎

1、myeclipse的安裝和使用    * eclipse:是一個免費的開發工具    * myeclipse:是一個收費的外掛程式,破解myeclipse,        ** 安裝目錄的要求: 不能有中文和空格        ** 安裝完成之後,選擇一個工作空間 ,這個工作空間不能有中文和空格    * 破解myeclipse        ** 運行run.bat檔案,但是運行之前,必須要安裝jdk,通過配置環境變數    * myeclipse的使用        * 建立一個工程             - 類型 java project  web  project            - 選擇依賴的jdk,可以使用myeclipse內建的jdk,或者可以使用安裝的jdk                * 建立包 package            - cn.itcast.test  XX.XX.XX                * 在包裡面建立一個類            - 類的命名規範:                ** 首字母要大寫                    比如: TestDemo1  UserManager                * 在類裡面建立方法            public void test1(參數列表) {                方法體或者傳回值;            }             - 方法的命名規範                首字母小寫  比如:addNum()                * 定義變數            - 變數的命名規範            ** 首字母小寫,第二個單詞的首字母要大寫 ,比如 userName                * 這些命名還有一種方式            ** 使用漢語拼音命名 yonghuming mima            ** 不能把漢語拼音和英文字母混合使用                userMing        * 命名的最基本的原則:看到名字知道是什麼含義        * 代碼需要有縮排        * 運行程式  run as  java application                debug as  java application2、debug的偵錯模式(斷點偵錯模式)    * 使用這種模式,偵錯工具(看到程式裡面資料的變化)    * 使用debug第一步需要設定一個斷點(讓程式運行停止在這一行)        - 顯示出來行號        - 雙擊左邊,出現一個圓點,表示設定了一個斷點    * 使用debug as方式,運行程式        - 提示是否進入到調試介面,yes        - 在斷點那一個,有一個綠色條,表示程式停止在這一行,沒有向下運行    * 可以讓程式向下執行,        - 使用 step over 快速鍵是 F6(逐步執行)        - resume F8:表示調試結束,直接向下運行            ** 比如當前的斷點之後還有斷點,跳到下一個斷點,            ** 如果當前斷點後面沒有斷點,程式直接運行結束        * debug另外一個用途        ** 查看程式的原始碼        ** F5 step into:進入到方法        ** F7 step return :返回3、myeclipse的快速鍵的使用    * 代碼提示 alt /    * 快速導包 ctrl shift o    * 單行注釋 ctrl /    * 去掉單行注釋 ctrl /    * 多行注釋 ctrl shift /    * 去掉多行注釋 ctrl shift \    * 刪除行 ctrl d4、junit的使用    * 單元測試    * 測試對象是 是一個類中的方法    * juint不是javase的一部分,想要使用匯入jar包        ** 但是,在myeclipse中內建了junit的jar包        * 首先junit版本 3.x 4.x        * 單元測試方法時候,方法命名規則 public void 方法名() {}        * 使用註解方式運行測試方法, 在方法的上面        ** @Test:表示方法進行單元測試        ---     @Test            public void testAdd1() {                TestJunit test01 = new TestJunit();                test01.testAdd(2, 3);            }            - 選中方法名稱,右鍵運行 點擊run as --- junit  test            - 當出現綠色條,表示方法測試通過            - 當出現了紅棕色條,表示方法測試不通過        --- 要運行類中的多個測試方法,點擊類中的其他位置,run as --- junit  test            ** @Ignore :表示這個方法不進行單元測試        ** @Before: 在每個方法執行運行        ** @After:在每個方法之後運行        ** 斷言(瞭解)            - Assert.assertEquals("測試期望的值", "方法啟動並執行實際的值")        jdk5.0新特性jdk 1.1  1.2   1.4   5.0** 泛型、枚舉、靜態匯入、自動拆裝箱、增強for、可變參數** 反射5、泛型的簡介    * 為什麼要使用泛型?        - 一般使用在集合上        ** 比如現在把一個字串類型的值放入到集合裡面,這個時候,這個值放入到集合之後,失去本事的類型,只能是object類型,        這個時候,比如想要對這個值進行類型轉換,很容易出現類型轉換錯誤,怎麼解決這個問題,可以使用泛型來解決        * 在集合上如何使用泛型        - 常用集合 list  set  map        - 泛型文法 集合<String>  比如 List<String>    * 在泛型裡面寫是一個對象,String 不能寫基本的資料類型 比如int (****)        ** 寫基本的資料類型對應封裝類            byte -- Byte            short -- Short            int -- Integer            long -- Long            float -- Float            double -- Double            char   -- Character            boolean -- Boolean    * 在list上使用泛型        list的三種實現 ArrayList linkedList  Vector        代碼:        @Test        public void testList() {            List<String> list = new ArrayList<String>();            list.add("aaa");            list.add("bbb");            list.add("ccc");            //遍曆list集合 有幾種方式  三種            //普通for迴圈  迭代器  增強for            //普通for迴圈            for(int i=0;i<list.size();i++) {                String s = list.get(i);                System.out.println(s);            }            System.out.println("=================");            //使用增強for            for (String s1 : list) {                System.out.println(s1);            }            System.out.println("=================");            //使用迭代器遍曆            Iterator<String> it = list.iterator();            while(it.hasNext()) {                System.out.println(it.next());            }        * 作業1: ArrayList linkedList  Vector 這三個區別    * 在set上使用泛型        代碼:        //泛型使用set集合上        @Test        public void testSet() {            Set<String> set = new HashSet<String>();            set.add("www");            set.add("qqq");            set.add("zzz");            //set.add("qqq");            //遍曆set 有幾種方式  兩種            //迭代器  增強for            //使用增強for遍曆            for (String s2 : set) {                System.out.println(s2);            }            System.out.println("=================");            //使用迭代器遍曆            Iterator<String> it1 = set.iterator();            while(it1.hasNext()) {                System.out.println(it1.next());            }        }        * 在map上面使用泛型        - map結構:key-valu形式        代碼:        //在map上使用泛型        @Test        public void testMap() {            Map<String,String> map = new HashMap<String,String>();            map.put("aaa", "111");            map.put("bbb", "222");            map.put("ccc", "333");            //遍曆map 有幾種遍曆方式 兩種            // 1、擷取所有的key,通過key得到value 使用get方法            // 2、擷取key和value的關係            //使用第一種方式遍曆            //擷取所有的key            Set<String> sets = map.keySet();            //遍曆所有key返回的set            for (String key : sets) {                //通過key得到value                String value = map.get(key);                System.out.println(key+" : "+value);            }                        System.out.println("==============");            //得到key和value的關係            Set<Entry<String, String>> sets1 = map.entrySet();            //遍曆sets1            for (Entry<String, String> entry : sets1) {                //entry是key和value關係                String keyv = entry.getKey();                String valuev = entry.getValue();                System.out.println(keyv+" : "+valuev);            }        }6、泛型使用在方法上    * 定義一個數組,實現指定位置上數組元素的交換    * 方法邏輯相同,只是資料類型不同,這個時候使用泛型方法    * /*     * 使用泛型方法 需要定義一個類型 使用大寫字母表示 T :這個T表示任意的類型     * 寫在傳回值之前  void之前 <T>     * =======表示定義了一個類型 這個類型是 T     * 在下面就可以使用這個類型了  T     * */        public static <T> void swap1(T[] arr ,int a,int b) {        T temp = arr[a];        arr[a] = arr[b];        arr[b] = temp;    }    ** 作業2: 實現一個泛型方法,接受任意一個數組,顛倒數組中所有元素7、泛型在類上的使用(瞭解)    * 在一個類上定義一個類型,這個類型可以在類裡面直接使用    * public class TestDemo04<T> {        //在類裡面可以直接使用T的類型    T aa;    public void test11(T bb) {}        //寫一個靜態方法 在類上面定義的泛型,不能再靜態方法裡面使用    public static <A> void test12(A cc) {}    }8、枚舉的簡介    * 什麼是枚舉?        ** 需要在一定的範圍內取值,這個值只能是這個範圍內中的任意一個。        ** 現實情境:交通號誌,有三種顏色,但是每次只能亮三種顏色裡面的任意一個        * 使用一個關鍵字 enum    ** enum Color3 {        RED,GREEN,YELLOW;    }    * 枚舉的構造方法也是私人的    * 特殊枚舉的操作(瞭解)    ** 在枚舉類裡面有構造方法        ** 構造方法裡面有參數,需要在每個執行個體上面都寫參數    ** 在枚舉類裡面有抽象方法        ** 在枚舉的每個執行個體裡面都重寫這個抽象方法9、枚舉的api的操作    ** name() :返回枚舉的名稱    ** ordinal() :枚舉的下標,下標從0開始    ** valueOf(Class<T> enumType, String name) :得到枚舉的對象    ** 還有兩個方法,都是這兩個方法不在api裡面,編譯的時候產生兩個方法    *** valueof(String name)  轉換枚舉對象    *** values()  獲得所有枚舉對象數組    * 練習:枚舉對象、枚舉對象下標、枚舉對象名稱表示之間的轉換    - //知道枚舉的對象,得到枚舉名稱和下標    @Test    public void test1() {        //得到枚舉對象        Color100 c100 = Color100.RED;        //枚舉名稱        String name = c100.name();        //枚舉的下標        int idx = c100.ordinal();        System.out.println(name+" "+idx);    }    - //知道枚舉的名稱,得到枚舉的對象和下標    @Test    public void test2() {        String name1 = "GREEN";        //得到對象        Color100 c1 = Color100.valueOf(name1);        //枚舉下標        int idx1 = c1.ordinal();        System.out.println(idx1);    }    - //知道枚舉的下標,得到枚舉的對象和名稱    @Test    public void test3() {        int idx2 = 2;        //得到枚舉的對象        Color100[] cs = Color100.values();        //根據下標得到對象        Color100 c12 = cs[idx2];        //得到枚舉的名稱        String name = c12.name();        System.out.println(name);    }10、靜態匯入(瞭解)    * 可以在代碼裡面,直接使用靜態匯入方式,匯入靜態方法或者常量    * import static XX.XX.xxx    * import static java.lang.System.out;    import static java.util.Arrays.sort;    ** 比如現在實現一個計算機 在Math類裡面11、自動拆裝箱    * 裝箱        ** 把基本的資料類型轉換成封裝類    * 拆箱        ** 把封裝類轉換成基本的資料類型    **     //自動裝箱        Integer i = 10;                //自動拆箱        int m = i;        ** 在jdk1.4裡面如何?裝箱和拆箱        - //在jdk1.4裡面實現拆裝箱        public void test1() {            //裝箱            Integer m = new Integer(10);                    //拆箱                int a = m.intValue();        }    ** jdk是會向下相容        - 比如 jdk1.4裡面寫的代碼,這個時候到5.0裡面也可以運行    ** 練習:向下相容    == 執行的結果是會調用  doSomething(double m)    == 首先在jdk1.4裡面肯定調用這個方法,如果調用下面的方法,需要類型轉換,但是jdk1.4不能實現自動拆裝箱    == 由於jdk是向下相容,所以,在jdk1.4調用這個方法,在jdk5.0裡面還是會調用這個方法        public static void main(String[] args) {            doSomething(10);        }                public static void doSomething(double m) {            System.out.println("double......");        }                public static void doSomething(Integer a){            System.out.println("integer.....");        }    ** 記住:八種基本的資料類型對應的封裝類        * int --- Integer        * char--- Character12、增強for迴圈(*****)    * 文法 for(遍曆出來的值 : 要遍曆的集合) {}        - for(String s : list) {            System.out.println(s);        }    * 使用情境: 數組;實現Iterable介面的集合 可以使用增強for迴圈    * 在集合上使用增強for迴圈遍曆        list  set 實現了Iterator介面,所以可以使用增強for迴圈        map不能使用增強for迴圈,沒有實現Iterator介面,所以不能使用增強for迴圈    * 增強for迴圈出現目的:為了替代迭代器        ** 增強for底層就是迭代器實現的    13、內容補充    (1)泛型擦除        * 首先泛型只是出現在原始碼階段,當編譯之後泛型不存在了        (2)練習:實現一個泛型方法,接受任意類型的數組,顛倒數組中所有元素    代碼    public static <T> void reverses(T[] arr1) {        /*         * 基本思想:把第一個元素和最後一個元素交換位置,把第二個元素和倒數第二個元素交換位置。。。。         * 交換 長度/2         * */        //遍曆數組        for(int i=0;i<arr1.length/2;i++) {            /*int temp = arr1[0];            arr1[0] = arr1[arr1.length-1];*/            T temp = arr1[i];            arr1[i] = arr1[arr1.length-i-1];            arr1[arr1.length-i-1] = temp;        }            }14、可變參數    * 可變參數可以應用在什麼情境:    ** 實現兩個數的相加,實現三個數的相加 四個數的相加    -- 如果實現的多個方法,這些方法裡面邏輯基本相同,唯一不同的是傳遞的參數的個數,可以使用可變參數    * 可變參數的定義方法 資料類型...數組的名稱    * 理解為一個數組,這個數組儲存傳遞過來的參數    - 代碼        public static void add1(int...nums) {            //nums理解為一個數組,這個數組儲存傳遞過來的參數            //System.out.println(nums.length);            int sum = 0;            //遍曆數組            for(int i=0;i<nums.length;i++) {                sum += nums[i];            }            System.out.println(sum);        }        * 注意的地方        (1)可變參數需要寫在方法的參數列表中,不能單獨定義        (2)在方法的參數列表中只能有一個可變參數        (3)方法的參數列表中的可變參數,必須放在參數最後            - add1(int a,int...nums)15、反射的原理(********理解********)    * 應用在一些通用性比較高的代碼 中    * 後面學到的架構,大多數都是使用反射來實現的    * 在架構開發中,都是基於設定檔開發        ** 在設定檔中配置了類,可以通過反射得到類中的 所有內容,可以讓類中的某個方法來執行    * 類中的所有內容:屬性、沒有參數的構造方法、有參數的構造方法、普通方法        * 畫圖分析反射的原理        * 首先需要把java檔案儲存到本地硬碟 .java        * 編譯java檔案,成.class檔案        * 使用jvm,把class檔案通過類載入載入到記憶體中        * 萬事萬物都是對象,class檔案在記憶體中使用Class類表示        * 當使用反射時候,首先需要擷取到Class類,得到了這個類之後,就可以得到class檔案裡面的所有內容            - 包含屬性  構造方法 普通方法        * 屬性通過一個類 Filed        * 構造方法通過一個類 Constructor        * 普通方法通過一個類 Method16、使用反射操作類裡面的無參數的構造方法(**會寫**)    * 首先擷取到Class類        - // 擷取Class類        Class clazz1 = Person.class;        Class clazz2 = new Person().getClass();        Class clazz3 = Class.forName("cn.itcast.test09.Person");    * 比如: 要對一個類進行執行個體化,可以new,不使用new,怎麼擷取?        - //得到Class        Class c3 = Class.forName("cn.itcast.test09.Person");        //得到Person類的執行個體        Person p = (Person) c3.newInstance();    * 代碼    //操作無參數的構造方法    @Test    public void test1() throws Exception {        //得到Class        Class c3 = Class.forName("cn.itcast.test09.Person");        //得到Person類的執行個體        Person p = (Person) c3.newInstance();        //設定值        p.setName("zhangsan");        System.out.println(p.getName());    }17、使用反射操作有參數的構造方法(**會寫**)    //操作有參數的構造方法    @Test    public void test2() throws Exception {        //得到Class        Class c1 = Class.forName("cn.itcast.test09.Person");        //使用有參數的構造方法        //c1.getConstructors();//擷取所有的構造方法        //傳遞是有參數的構造方法裡面參數類型,類型使用class形式傳遞        Constructor cs = c1.getConstructor(String.class,String.class);        //通過有參數的構造方法設定值        //通過有參數的構造方法建立Person執行個體        Person p1 = (Person) cs.newInstance("lisi","100");        System.out.println(p1.getId()+" "+p1.getName());    }18、使用反射操作屬性(**會寫**)    * //操作name屬性    @Test    public void test3() {        try {            //得到Class類            Class c2 = Class.forName("cn.itcast.test09.Person");            //得到name屬性            //c2.getDeclaredFields();//表示得到所有的屬性            //得到Person類的執行個體            Person p11 = (Person) c2.newInstance();            //通過這個方法得到屬性,參數是屬性的名稱            Field f1 = c2.getDeclaredField("name");            //操作的是私人的屬性,不讓操作,需要設定可以操作私人屬性setAccessible(true),可以操作私人屬性            f1.setAccessible(true);            //設定name值 set方法,兩個參數:第一個參數類的執行個體,第二個參數是設定的值            f1.set(p11, "wangwu"); //相當於 在 p.name = "wangwu";            System.out.println(f1.get(p11)); //相當於 p.name        }catch(Exception e) {            e.printStackTrace();        }    }19、使用泛型操作普通方法(**會寫**)    * 使用Method類表示普通方法    * 代碼    //操作普通方法 ,比如操作 setName    @Test    public void test4() throws Exception {        //得到Class類        Class c4 = Class.forName("cn.itcast.test09.Person");        //得到Person執行個體        Person p4 = (Person) c4.newInstance();        //得到普通方法        //c4.getDeclaredMethods();//得到所有的普通方法        //傳遞兩個參數:第一個參數,方法名稱;第二個參數,方法裡面參數的類型        Method m1 = c4.getDeclaredMethod("setName", String.class);        //讓setName方法執行 ,執行設定值        //使用invoke(p4, "niuqi");傳遞兩個參數:第一個參數,person執行個體;第二個參數,設定的值        //執行了invoke方法之後,相當於,執行了setName方法,同時通過這個方法設定了一個值是niuqi        m1.invoke(p4, "niuqi");        System.out.println(p4.getName());    }        * //操作的私人的方法 ,需要設定值是true    * //m1.setAccessible(true);    * 當操作的方法是靜態方法時候,因為靜態方法調用方式是 類名.方法名,不需要類的執行個體    * 使用反射操作靜態方式時候,也是不需要執行個體    * 在invokie方法的第一個參數裡面,寫一個 null        - m1.invoke(null, "niuqi");

  

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.