• <noscript id="e0iig"><kbd id="e0iig"></kbd></noscript>
  • <td id="e0iig"></td>
  • <option id="e0iig"></option>
  • <noscript id="e0iig"><source id="e0iig"></source></noscript>
  • JAVA入門級教學之(this關鍵字)

    標簽: JAVA入門教學

     this關鍵字

     * 關于java語言中的this關鍵字
     * 
     *     1.this是一個關鍵字,翻譯為:這個
     *     2.this是一個引用,this是一個變量,this變量中保存了內存地址指向了自身,this存儲在JVM堆內存java對象內部
     *     3.創建100個java對象,每一個對象都有this,也就是說有100個不同的this
     *     4.this可以出現在"實例方法"當中,this指向當前正在執行這個動作的對象。(this代表當前對象)

     

    最終結論:

            在帶有static的方法中不能"直接"訪問實例變量和實例方法,因為實例變量和實例方法都需要對象的存在

            然而static的方法中沒有this,也就是說當前對象是不存在的

            自然無法訪問當前對象的實例變量和實例方法

    新建一個顧客類:

    package com.lbj.javase06;
    /**
     * 關于java語言中的this關鍵字
     * 
     * 	1.this是一個關鍵字,翻譯為:這個
     * 	2.this是一個引用,this是一個變量,this變量中保存了內存地址指向了自身,this存儲在JVM堆內存java對象內部
     * 	3.創建100個java對象,每一個對象都有this,也就是說有100個不同的this
     * 	4.this可以出現在"實例方法"當中,this指向當前正在執行這個動作的對象。(this代表當前對象)
     * 	5.this在多數情況下是可以省略不寫的
     * 	6.this不能使用在帶有static的方法中
     * @author 14811
     *
     */
    public class Customer {
    	//姓名【堆內存的對象內部中存儲,所以訪問該數據的時候,必須先創建對象,通過引用方式訪問】
    	String name;//實例變量:必須采用"引用."的方式訪問
    	
    	//構造方法
    	public Customer(){
    		
    	}
    	
    	//不帶有static關鍵字的一個方法
    	//顧客購物的行為
    	//每一個顧客購物最終的結果不一樣的
    	//所以購物這個行為是屬于對象級別的行為
    	//由于每一個對象在執行購物這個動作的時候最終結果不同,所以購物這個動作必須有"對象"的參與
    	//重點:沒有static關鍵字的方法被稱為"實例方法",實例方法怎么訪問?通過"引用"。
    	//重點:沒有static關鍵字的變量被稱為"實例變量"
    	//注意:當一個行為/動作執行的過程中是需要對象參與的,那么這個方法一定要定義為"實例方法",不要帶static關鍵字
    	//以下方法定義為實例方法,因為每一個顧客在真正購物的時候,最終返回的結果是不同的。所以這個動作在完成的時候必須有對象的參與
    	
    	public void shopping(){
    		//當張三在購物的時候,輸出:張三在購物
    		//當李四在購物的時候,輸出:李四在購物
    		
    		//這樣是最簡單無腦的輸出
    		//System.out.println("xxx在購物");
    		
    		//由于name是一個實例變量,所以這個name訪問的時候一定訪問的是當前對象的name
    		//所以多數情況下"this."是可以省略的
    		//System.out.println(name+"在購物");
    		
    		//冗余寫法
    		//System.out.println(c1.name+"在購物");
    		//System.out.println(c2.name+"在購物");
    		
    		//完整寫法
    		System.out.println(this.name+"在購物");
    		
    	}
    	public static void doSome(){
    		//這個執行過程中沒有"當前對象",因為帶有static的方法是通過類名的方式訪問的
    		//或者收這個"上下文"中沒有"當前對象",自然也不存在this(this代表的是當前正在執行這個動作的對象)
    		
    		//以下程序為什么編譯報錯呢?
    		//doSome方法調用不是對象去調用,是一個類名去調用,執行過程中沒有"當前對象"
    		//name是一個"實例變量",以下代碼的含義是:訪問當前對象的name,因為沒有當前對象的name
    		
    		//System.out.println(name);
    		
    		//static的方法調用不需要對象,直接使用類名,所以執行過程中沒有當前對象,所以不能使用this
    		//System.out.println(this);
    			
    	}
    	public static void doOther(){
    		//假設就是通過static想訪問name這個實例變量的話應該怎么做?
    		
    		//System.out.println(name);//編譯報錯
    		
    		//可以采用以下方案,但是以下方案,絕對不是訪問當前對象this的name
    		//創建對象
    		Customer c=new Customer();
    		System.out.println(c.name);//這里訪問的name是c引用指向對象的name
    	}
    	
    	
    	
    }
    
    
    

    新建一個顧客測試類: 

    package com.lbj.javase06;
    
    public class CustomerTest01 {
    
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		//創建Customer
    		Customer c1=new Customer();
    		
    		c1.name="zhangsan";
    		
    		//c1購物
    		c1.shopping();
    		
    		//再創建Customer對象
    		Customer c2=new Customer();
    		
    		c2.name="lisi";
    		
    		//c2購物
    		c2.shopping();
    		//---------------------------
    		
    		//調用doSome方法(修飾符列表上有static)
    		//采用"類名."的方式訪問,顯然這個方法在執行的時候不需要對象的參加
    		Customer.doSome();
    		
    		//調用doOther方法
    		Customer.doOther();//輸出為null
    		
    		
    	}
    
    }
    

     

     內存示意圖:

    版權聲明:本文為LBJ8888888原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
    本文鏈接:https://blog.csdn.net/LBJ8888888/article/details/104487392

    智能推薦

    Java之this關鍵字堆棧分析

    this表示的是當前對象,即this所在的方法被那個對象所調用_這個this指的就是這個對象,可看成this持有當前對象的地址值 ex:Student s = new Student(); this有點類似 s對象, 持有對象地址 this的作用: ①this表示當前對象:就是說,誰調用了當前方法(this所在的方法),誰就是this    ②在構造方法中調用本類的構造方法 &...

    java學習初探5之this關鍵字

    1.this是什么 this是一個引用類型,保存了內存地址,在堆中每個java對象都有this,this保存內存地址指向自身。 2.this用在哪些地方 (1)成員方法中 this用在成員方法中,誰去調用成員方法,this就代表誰。this指的是當前對象。注:this.可以省略。 (2)構造方法中 同上 this(實參);必須出現在構造方法的第一行。 通過一個構造方法去調用另一個構造方法。 目的:...

    HTML中常用操作關于:頁面跳轉,空格

    1.頁面跳轉 2.空格的代替符...

    freemarker + ItextRender 根據模板生成PDF文件

    1. 制作模板 2. 獲取模板,并將所獲取的數據加載生成html文件 2. 生成PDF文件 其中由兩個地方需要注意,都是關于獲取文件路徑的問題,由于項目部署的時候是打包成jar包形式,所以在開發過程中時直接安照傳統的獲取方法沒有一點文件,但是當打包后部署,總是出錯。于是參考網上文章,先將文件讀出來到項目的臨時目錄下,然后再按正常方式加載該臨時文件; 還有一個問題至今沒有解決,就是關于生成PDF文件...

    猜你喜歡

    電腦空間不夠了?教你一個小秒招快速清理 Docker 占用的磁盤空間!

    Docker 很占用空間,每當我們運行容器、拉取鏡像、部署應用、構建自己的鏡像時,我們的磁盤空間會被大量占用。 如果你也被這個問題所困擾,咱們就一起看一下 Docker 是如何使用磁盤空間的,以及如何回收。 docker 占用的空間可以通過下面的命令查看: TYPE 列出了docker 使用磁盤的 4 種類型: Images:所有鏡像占用的空間,包括拉取下來的鏡像,和本地構建的。 Con...

    requests實現全自動PPT模板

    http://www.1ppt.com/moban/ 可以免費的下載PPT模板,當然如果要人工一個個下,還是挺麻煩的,我們可以利用requests輕松下載 訪問這個主頁,我們可以看到下面的樣式 點每一個PPT模板的圖片,我們可以進入到詳細的信息頁面,翻到下面,我們可以看到對應的下載地址 點擊這個下載的按鈕,我們便可以下載對應的PPT壓縮包 那我們就開始做吧 首先,查看網頁的源代碼,我們可以看到每一...

    Linux C系統編程-線程互斥鎖(四)

    互斥鎖 互斥鎖也是屬于線程之間處理同步互斥方式,有上鎖/解鎖兩種狀態。 互斥鎖函數接口 1)初始化互斥鎖 pthread_mutex_init() man 3 pthread_mutex_init (找不到的情況下首先 sudo apt-get install glibc-doc sudo apt-get install manpages-posix-dev) 動態初始化 int pthread_...

    統計學習方法 - 樸素貝葉斯

    引入問題:一機器在良好狀態生產合格產品幾率是 90%,在故障狀態生產合格產品幾率是 30%,機器良好的概率是 75%。若一日第一件產品是合格品,那么此日機器良好的概率是多少。 貝葉斯模型 生成模型與判別模型 判別模型,即要判斷這個東西到底是哪一類,也就是要求y,那就用給定的x去預測。 生成模型,是要生成一個模型,那就是誰根據什么生成了模型,誰就是類別y,根據的內容就是x 以上述例子,判斷一個生產出...

    精品国产乱码久久久久久蜜桃不卡