<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                # JAVA之旅(五)——this,static,關鍵字,main函數,封裝工具類,生成javadoc說明書,靜態代碼塊 * * * > 周末收獲頗多,繼續學習 ## 一.this關鍵字 > 用于區分局部變量和成員變量同名的情況 > > this的特點? > this就代表本類對象 > > 這在我們的set方法里面是有的 ~~~ public void setName(String name) { this.name = name; } ~~~ > this代表他所在的函數對屬對象的引用 > > 現在我們這里有這么一個需求 ~~~ //公共的 類 類名 public class HelloJJAVA { // 公共的 靜態 無返回值 main方法 數組 public static void main(String[] str) { /** * 需求:給人定義一個用于比較年齡相同的功能,也就是是否是同齡人 */ Person p1 = new Person(20); Person p2 = new Person(25); boolean b = p1.compare(p2); System.out.println(b); } } class Person { private int age; // 一初始化就有年齡 public Person(int age) { this.age = age; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public boolean compare(Person p) { return this.age == p.age; } } ~~~ > 得到的結果肯定是false啦 ![這里寫圖片描述](http://img.blog.csdn.net/20160522100445043) > 可以知道,當定義類中的功能時,該函數內部要用到該函數的對象時,這時用this來表示,但凡本類功能內部使用到了本類對象,都用this表示 > > 我們再來看個小知識點,我們看一個需求 ~~~ //公共的 類 類名 public class HelloJJAVA { // 公共的 靜態 無返回值 main方法 數組 public static void main(String[] str) { // 構造函數間只能用this語句 } } class Person { private int age; private String name; public Person(int age) { this.age = age; } public Person(int age, String name) { this(age); // 代表p的age this.name = name; } } ~~~ > this()函數的引用,這里我們要注意,this語句只能放在構造函數的第一行對對象進行初始化 ## 二.static關鍵字 > 靜態,我們來看一個小例子 ~~~ //公共的 類 類名 public class HelloJJAVA { // 公共的 靜態 無返回值 main方法 數組 public static void main(String[] str) { Person p = new Person(); p.age = 18; p.show(); } } class Person { int age; String name = "lgl"; static String country = "cn"; public void show() { System.out .println("你的名字:" + name + "今年:" + age + "歲" + "國籍:" + country); } } ~~~ > static是一個修飾符,是一個修飾成員變量,成員函數的關鍵字,被靜態修飾之后,他就不在內存中了,被單獨提取出來,每個人都能訪問,靜態修飾內容被對象所共享 > > 當成員被靜態修飾后,就多了一種調用方式,除了可以被對象調用外,還可以直接被類名調用:類名.靜態成員 ~~~ System.err.println(Person.country); ~~~ > 一樣可以 ![這里寫圖片描述](http://img.blog.csdn.net/20160522102822159) > 這樣,我們可以總結一下static的特點 * 1.隨著類的加載而加載 > 所謂隨著類的加載而加載,Person這個類你一使用的時候,靜態就已經存在了 * 2.優先于對象存在 > 明確一點,靜態時先存在的,參照1 * 3.被所有對象所共享 * 4.可以直接被類名所調用 > 實例變量和類變量的區別: * 存放位置? * 類變量隨著類的加載而存在于方法區中,隨著類的消失而消失 * 實例變量隨著對象的建立而存在于堆內存中 * 生命周期? * 類變量生命周期最長,隨著類的消失而消失 * 實例變量的生命周期隨著對象的消失而消失 > 靜態變量的使用注意事項 * 靜態方法只能訪問靜態成員? * 非靜態方法方法即可以訪問靜態也可以訪問非靜態 * 靜態方法中不可以定義this,super關鍵字,因為靜態優先于對象存在,所在靜態方法中不可以出現他們 * 主函數是靜態 > 靜態有利有弊 * 利:對對象的共享數據進行單獨控件的存儲,節省空間,沒必要每個對象都存儲一遍,也可以直接被類名調用 * 弊:生命周期過長,訪問出現局限性(靜態雖好,只能訪問靜態) > 這里要說一個小知識點: ### main函數 > 主函數大家應該都很熟悉了 > > 主函數是一個特殊的函數,可以被JVM調用,作為程序的入口 * public:代表的該訪問權限是最大的 * static:代表主函數隨著類的加載而存在 * void:主函數沒有具體的返回值 * main:不是關鍵字,但是是一個特殊的單詞,可以被jvm識別 * 函數的參數:參數類型是一個數組,該數組中的元素是字符串,字符串類型的數組 > 主函數的格式是固定的,jvm識別 > > OK,了解了主函數,我們回到靜態,什么時候使用static? > > 要從兩方面下手,因為靜態修飾的內容有成員變量和函數 * 什時候定義靜態變量 > 當對象中出現共享數據時,該數據被靜態修飾,對象中的特有數據,定義成非靜態,存在于堆內存中 * 什么時候定義靜態函數 > 當功能內部沒有訪問到非靜態數據(對象的特有數據),那么該功能可以定義為靜態 ## 封裝工具類 > 我們可以看我們是怎么求最大值的 ~~~ //公共的 類 類名 public class HelloJJAVA { // 公共的 靜態 無返回值 main方法 數組 public static void main(String[] str) { int[] arr = { 0, 9, 0, 6, 2, 8 }; int max = getMa(arr); System.out.println("最大值:" + max); } /** * 求一個數組的最大值 * @param arr * @return */ public static int getMa(int[] arr) { int max = 0; for (int i = 0; i < arr.length; i++) { if (arr[i] > arr[max]) { max = i; } } return arr[max]; } } ~~~ > 我們把這個方法提取出來,確實很方便,但是,要是其他的類也有數組需要求最大值呢?這個時候我們就可以封裝成一個工具類了 * 每一個應用程序都有共性的部分,可以將這些功能抽取,獨立封裝,以便使用,所以我們可以這樣寫: ~~~ /** * 數組工具 * * @author LGL * */ public class ArrayTools { /** * 求一個數組的最大值 * * @param arr * @return */ public static int getMax(int[] arr) { int max = 0; for (int i = 0; i < arr.length; i++) { if (arr[i] > arr[max]) { max = i; } } return arr[max]; } /** * 求一個數組的最小值 * * @param arr * @return */ public static int getMin(int[] arr) { int min = 0; for (int i = 0; i < arr.length; i++) { if (arr[i] < arr[min]) { min = i; } } return arr[min]; } } ~~~ > 把獲取最大值和最小值的方法都封裝起來,用static去修飾,這樣 ~~~ //公共的 類 類名 public class HelloJJAVA { // 公共的 靜態 無返回值 main方法 數組 public static void main(String[] str) { int[] arr = { 0, 9, 1, 6, 2, 8 }; int max = ArrayTools.getMax(arr); int min = ArrayTools.getMin(arr); System.out.println("最大值:" + max); System.out.println("最小值:" + min); } } ~~~ > 我們就可以直接去獲取 ![這里寫圖片描述](http://img.blog.csdn.net/20160522115756008) > 雖然我們可以通過ArrayTools的對象使用這些方法,對數組進行操作,但是,會存在一些問題‘’ * 對象是用來封裝數據的,可是ArrayTools 對象病沒有封裝特有的數據 * 操作一個數組的每個方法都沒有用到ArrayTools 對象中的特有數據 > 這個時候我們可以考慮,讓程序更加的嚴謹,不需要對象,可以將ArrayTools 的方法都定義成靜態的,直接通過類名調用即可 ### 生成javadoc說明書 > 當我們寫好一個工具類的時候,是可用廣為流傳的,但是,人家也不知道呢寫了啥呀,所以,我們寫個說明書是必須的,首先回到我們的工具類 ~~~ /** * 數組工具 * * @author LGL * */ public class ArrayTools { /** * 求一個數組的最大值 * * @param arr * 接收到數組 * @return */ public static int getMax(int[] arr) { int max = 0; for (int i = 0; i < arr.length; i++) { /** * 兩數比較 */ if (arr[i] > arr[max]) { max = i; } } /** * 返回最大值 */ return arr[max]; } /** * 求一個數組的最小值 * * @param arr * 接收到數組 * @return */ public static int getMin(int[] arr) { int min = 0; for (int i = 0; i < arr.length; i++) { /** * 兩數比較 */ if (arr[i] < arr[min]) { min = i; } } /** * 返回最小值 */ return arr[min]; } } ~~~ > 你可以看到,我們添加了很多的注釋,現在我們可以去生成了,我們在jdk安裝目錄的bin文件下看到一個文件叫做javadoc,我們就需要他,我們可以在java類目錄下 ~~~ // myhelp:文件夾 -author:作者,可以不寫 javadoc -d myhelp -author ArrayTools.java ~~~ ![這里寫圖片描述](http://img.blog.csdn.net/20160522122555724) > 生成之后我們打開index.html ![這里寫圖片描述](http://img.blog.csdn.net/20160522122616099) ### 靜態代碼塊 > 我們講一個小知識點靜態代碼快,我們先看一下格式 ~~~ class StaticDemo { static { //靜態代碼快 } } ~~~ > 靜態代碼塊的特點:隨著類的加載而執行,只執行一次 ~~~ //公共的 類 類名 public class HelloJJAVA { static { // 靜態代碼快 System.err.println("b"); } // 公共的 靜態 無返回值 main方法 數組 public static void main(String[] str) { new StaticDemo(); System.out.println("over"); } static { // 靜態代碼快 System.err.println("c"); } } class StaticDemo { static { // 靜態代碼快 System.err.println("a"); } } ~~~ > 我們可以猜猜看,執行的順序是什么?靜態方法是從上往下執行優先于mian方法的,所以是b,然后走main方法輸出a,over ## 好的,本篇幅就先到這里,有興趣的可以加群:555974449 版權聲明:本文為博主原創文章,博客地址:http://blog.csdn.net/qq_26787115,未經博主允許不得轉載。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看