Java--作用域,構造器,this

作用域基本使用

? ? ? ? ? ? ? ? 在Java編程中,主要的變量就是屬性(成員變量)和局部變量。

? ? ? ? ? ? ? ? 我們說的局部變量一般是指在成員方法中定義的變量

? ? ? ? ? ? ? ? Java中作用域的分類

? ? ? ? ? ? ? ? ? ? ? ? 全局變量:也就是屬性,作用域為整個類體

? ? ? ? ? ? ? ? ? ? ? ? 局部變量:也就是除了屬性之外的其他變量,作用域為定義他的代碼塊中!

? ? ? ? ? ? ? ? 全局變量可以不賦值,直接使用,因為有默認值,局部變量必須賦值后,才能使用,因為沒有默認值。

注意事項和使用細節:

? ? ? ? ? ? ? ? 屬性和局部變量可以重名,訪問時遵循就近原則。

? ? ? ? ? ? ? ? 在同一個作用域中,比如在同一個成員方法中,兩個局部變量,不能重名。

? ? ? ? ? ? ? ? 作用域不同:

? ? ? ? ? ? ? ? ? ? ? ? 全局變量:可以被本類使用,或其他類使用(通過對象調用)。

? ? ? ? ? ? ? ? ? ? ? ? 局部變量:只能在本類中對應的方法中使用。

? ? ? ? ? ? ? ? 修飾符不同:

? ? ? ? ? ? ? ? ? ? ? ? 全局變量/屬性可以加修飾符。

? ? ? ? ? ? ? ? ? ? ? ? 局部變量不可以加修飾符。

構造器(也是構造方法)

????????????????構造器需求:

? ? ? ? ? ? ? ? ? ? ? ? 在創建一個人類對象時,是先把一個對象創建好之后,再給他的年齡和姓名屬性賦值,使用構造器就是在創建人類對象時,就直接指定這個對象的年齡和姓名。

? ? ? ? ? ? ? ? ?他是類的一種特殊方法,主要作用是完成對新對象的初始化,

? ? ? ? ? ? ? ? 基本語法:

? ? ? ? [修飾符] 方法名(形參列表){

? ? ? ? ? ? ? ? ? ? ? ? 方法體;

}

說明:構造器的修飾符可以默認,也可以是public,protected,private。

? ? ? ? ? ?構造器沒有返回值。

? ? ? ? ? ?方法名必須和類名一樣。

? ? ? ? ? ?形參列表和方法一樣的規則。

? ? ? ? ? ?構造器的調用,由系統完成。

public class Main {public static void main(String[] args) {Person p1 = new Person("LiHua", 18);System.out.println("姓名:" + p1.name);System.out.println("年齡:" + p1.age);}
}class Person {//這里的name和age就是全局變量String name;int age;//構造器沒有返回值,所以也不能寫void//構造器的名稱和類名一樣public Person(String pname, int page) {name = pname;age = page;}
}

構造器的注意事項和使用細節

? ? ? ? ? ? ? ? 一個類可以定義多個不同的構造器,即構造器重載。

    //下面的兩個構造器就構成了構造器重載public Person(String pname, int page) {name = pname;age = page;}public Person(String pname) {name = pname;}

? ? ? ? ? ? ? ? 構造器是完成對象的初始化,并不是創建對象。? ? ??

? ? ? ? ? ? ? ? 如果程序員沒有定義構造器,系統會自動給類生成一個默認無參構造器(也叫默認構造器)

public class Main {public static void main(String[] args) {Dog d1 = new Dog();}
}class Dog {/** 默認構造器 Dog() {* * }*/}

????????????????一旦定義了自己的構造器,默認的構造器就覆蓋了,就不能使用默認的無參構造器。

對象創建的流程分析

this的引出和入門

????????

public class Main {public static void main(String[] args) {Dog d = new Dog("小狗", 18);d.out();}
}class Dog {String name;int age;//如果構造器的形參,能夠直接寫成屬性名就好了。但會出現一個問題,根據變量的作用域原則://構造器的name,age是局部變量,而不是屬性。/*public Dog(String dname, int dage) {name = dname;age = dage;}*///this關鍵字就很好的解決了上述問題public Dog(String name,int age){this.name = name;       //this.name 就是當前對象的屬性namethis.age = age;         //this.age 就是當前對象的屬性age}public void out() {System.out.println(name + "\t" + age);}
}

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 總結:簡單的說,那個對象調用,this就代表那個對象。

this注意事項和使用細節:

? ? ? ? ? ? ? ? ? ? ? ? 1.this關鍵字可以用來訪問本類的屬性,方法,構造器。

? ? ? ? ? ? ? ? ? ? ? ? 2.this關鍵字用于區分當前類的屬性和局部變量。

? ? ? ? ? ? ? ? ? ? ? ? 3.訪問成員方法的語法:this.方法名(參數列表)。

public class Main {public static void main(String[] args) {Cat in = new Cat();in.test2();}
}class Cat {String name;int age;public void test1() {System.out.println("一狗");}public void test2() {System.out.println("二狗");this.test1();}
}

? ? ? ? ? ? ? ? ? ? ? ? 4.訪問構造器語法:this(參數列表);注意只能在構造器中使用(即只能在構造器中訪問另一個構造器,必須放在第一條)

public class Main {public static void main(String[] args) {Cat in = new Cat();in.test2();}
}class Cat {public void test1(String name, int age) {System.out.println("一狗");}public void test2() {this.test1("小狗", 18);           //這個語句必須放在第一條System.out.println("二狗");}
}

? ? ? ? ? ? ? ? ? ? ? ? 5.this不能在類定義的外部使用,只能在類定義的方法中使用。

?

public class Main {public static void main(String[] args) {B b = new B();b.test1();}
}class B {String name = "小狗";int age = 18;public void test1() {System.out.println("name=" + this.name + "\n" + "age=" + this.age);}
}

Ending:?

????????OK,本篇文章就到此結束了,非常感謝你能看到這里,所以如果你覺得這篇文章對你有幫助的話,請點一個大大的贊,支持一下博主,若你覺得有什么問題或疑問,歡迎私信博主或在評論區指出~? ? ??

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/207535.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/207535.shtml
英文地址,請注明出處:http://en.pswp.cn/news/207535.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

RHEL8_Linux訪問NFS存儲及自動掛載

本章主要介紹NFS客戶端的使用 創建FNS服務器并通過NFS共享一個目錄在客戶端上訪問NFS共享的目錄自動掛載的配置和使用 1.訪問NFS存儲 前面介紹了本地存儲,本章就來介紹如何使用網絡上的存儲設備。NFS即網絡文件系統,所實現的是 Linux 和 Linux 之間的共…

新手搭建知識付費平臺必備攻略:如何以低成本實現高轉化?

我有才知識付費平臺 一、引言 隨著知識經濟的崛起,越來越多的知識提供者希望搭建自己的知識付費平臺。然而,對于新手來說,如何以低成本、高效率地實現這一目標,同時滿足自身需求并提高客戶轉化率,是一大挑戰。本文將…

SPA, SEO, SSR總結

SPA單頁面Web應用 SPA(Single page web application) 單頁面Web應用 Web不再是一張張頁面,而是一個整體的應用,一個由路由系統,數據系統,頁面(組件)系統等等,組成的應用程序, 讓用戶不需要每次與服務器進行頁面刷新來獲得新的內容, 從而提供了更快,跟流暢的用戶體驗, 在SPA中…

參與創作①周年啦~

寫在前面 今天看了消息才知道,原來開始創作已經一年了。此篇無干貨,純白話,純記錄。 機緣 參與CSDN創作已經一年有余,猶記得第一篇博文是為了整理好所學內容,方便自己復習。沒想到后面也陸陸續續發了些其他內容&…

關于read函數阻塞的問題

關于read函數阻塞的問題 上一篇文章IO多路轉接之select 末尾提到了一點,服務端讀取每次是讀取10個字節的,如果超過10個字節,需要讀取多次,但是客戶端只會read一次,第二次read的時候,直接阻塞了。 那么如何…

Windows server flask

1、Windows server 通過python的flask執行命令 from flask import Flask, request, abort import subprocess from flask_basicauth import BasicAuth app Flask(__name__) # 獲取url是進行賬號密碼認證,設置url的賬號密碼 app.config[BASIC_AUTH_USERNAME] 賬號…

12.8作業

1.頭文件 #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QDebug> #include <QMovie>QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACEclass Widget : public QWidget {Q_OBJECTpublic:Widget(QWidget *parent nul…

spring-boot-starter-validation是什么Validation參數校驗使用概要

spring-boot-starter-validation是什么&Validation參數校驗使用概要 來源Valid和Validated的用法(區別)引入依賴Valid和Validated的用法 在日常的項目開發中&#xff0c;為了防止非法參數對業務造成的影響&#xff0c;需要對接口的參數做合法性校驗&#xff0c;例如在創建用…

基于Docker安裝Mysql:5.5

一、拉取鏡像 sudo docker pull mysql:5.5二、啟動mysql鏡像 1. 創建MySQL的conf目錄和data目錄 mkdir -p /home/docker/mysql/conf /home/docker/mysql/data2. 利用鏡像創建容器 sudo docker run --restartalways -d --name mysql -v /home/docker/mysql/conf/my.cnf:/etc…

系統設計-微服務架構

典型的微服務架構圖 下圖展示了一個典型的微服務架構。 負載均衡器&#xff1a;它將傳入流量分配到多個后端服務。CDN&#xff08;內容交付網絡&#xff09;&#xff1a;CDN 是一組地理上分布的服務器&#xff0c;用于保存靜態內容以實現更快的交付。客戶端首先在 CDN 中查找內…

methods

類型&#xff1a;{ [key: string]: Function } 詳細&#xff1a; methods 將被混入到 Vue 實例中。可以直接通過 VM 實例訪問這些方法&#xff0c;或者在指令表達式中使用。方法中的 this 自動綁定為 Vue 實例。 注意&#xff0c;不應該使用箭頭函數來定義 method 函數 (例如…

臨床骨科常用的肩關節疾病量表,醫生必備!

根據骨科醫生的量表使用情況&#xff0c;常笑醫學整理了臨床骨科常用的肩關節疾病量表&#xff0c;為大家分享臨床常見的肩關節疾病量表評估內容&#xff0c;均支持量表下載和在線使用&#xff0c;建議收藏&#xff01; 1.臂、肩、手功能障礙&#xff08;disabilites of the ar…

useradd 在Linux原生應用開發過程中的簡單應用

useradd命令是用于在Linux系統中創建新用戶的命令。它可以創建一個新用戶&#xff0c;并設置該用戶的屬性、家目錄、默認shell等。useradd命令實際上是一個包裝了一系列系統調用的高級命令。 在Linux系統中&#xff0c;用戶信息存儲在/etc/passwd文件中。當執行useradd命令時&…

flstudio21破解漢化版2024最新水果編曲使用教程

? 如果你一直夢想制作自己的音樂(無論是作為一名制作人還是藝術家)&#xff0c;你可能會想你出生在這個時代是你的幸運星。這個水果圈工作室和上一版之間的改進水平確實令人欽佩。這僅僅是FL Studio 21所提供的皮毛。你的音樂項目的選擇真的會讓你大吃一驚。你以前從未有過這…

ChatGPT的常識

什么是ChatGPT&#xff1f; ChatGPT是一個基于GPT模型的聊天機器人&#xff0c;GPT即“Generative Pre-training Transformer”&#xff0c;是一種預訓練的語言模型。ChatGPT使用GPT-2和GPT-3兩種模型來生成自然語言響應&#xff0c;從而與人類進行真實的對話。 ChatGPT的設計…

2023年全球軟件開發大會(QCon廣州站2023)-核心PPT資料下載

一、峰會簡介 本次峰會包含&#xff1a;泛娛樂時代的邊緣計算與通訊、穩定性即生命線、下一代軟件架構、出海的思考、現代數據架構、AGI 與 AIGC 落地、大前端技術探索、編程語言實戰、DevOps vs 平臺工程、新型數據庫、AIGC 浪潮下的企業出海、AIGC 浪潮下的效能智能化、數據…

【池式組件】線程池的原理與實現

線程池的原理與實現 線程池簡介1.線程池1.線程池2.數量固定的原因3.線程數量如何確定4.為什么需要線程池5.線程池結構 線程池的實現數據結構設計1.任務結構2.任務隊列結構3.線程池結構 接口設計 線程池的應用reactorredis 中線程池skynet 中線程池 線程池簡介 1.線程池 1.線程…

第7課 SQL入門之創建計算字段

文章目錄 7.1 計算字段7.2 拼接字段使用別名 7.3 執行算術計算 這一課介紹什么是計算字段&#xff0c;如何創建計算字段&#xff0c;以及如何從應用程序中使用別名引用它們。 7.1 計算字段 存儲在數據庫表中的數據一般不是應用程序所需要的格式&#xff0c;下面舉幾個例子。 …

前端Excel導出實用方案(完整源碼,可直接應用)

目錄 前言&#xff1a; 技術選型&#xff1a; 主要功能點&#xff1a; 核心代碼&#xff1a; 完整代碼&#xff1a; 開發文檔 前言&#xff1a; 在前后端分離開發為主流的時代&#xff0c;很多時候&#xff0c;excel導出已不再由后端主導&#xff0c;而是把導出的操作移…

關于鎖的粒度問題——面試

鎖的粒度劃分主要有三種&#xff1a;表級鎖、頁級鎖和行鎖 1.表級鎖&#xff1a; 對整張表加鎖&#xff0c;粒度最大&#xff0c;加鎖的并發度最低&#xff0c;會導致其他事務無法訪問該表&#xff0c;只有當前事務提交或者回滾后才能釋放鎖。表級鎖適用于對表進行全表操作的場…