Java基礎 五 方法

?

?

方法

1.1????? 方法概述

? ? ?在我們的日常生活中,方法可以理解為要做某件事情,而采取的解決辦法。

如:小明同學在路邊準備坐車來學校學習。這就面臨著一件事情(坐車到學校這件事情)需要解決,解決辦法呢?可采用坐公交車或坐出租車的方式來學校,那么,這種解決某件事情的辦法,我們就稱為方法。

在java中,方法就是用來完成解決某件事情或實現某個功能的辦法。

方法實現的過程中,會包含很多條語句用于完成某些有意義的功能——通常是處理文本,控制輸入或計算數值。

我們可以通過在程序代碼中引用方法名稱和所需的參數,實現在該程序中執行(或稱調用)該方法。方法,一般都有一個返回值,用來作為事情的處理結果。

1.2? ? ?方法的語法格式

在Java中,聲明一個方法的具體語法格式如下:

修飾符 返回值類型 方法名(參數類型 參數名1,參數類型 參數名2,......){

??? 執行語句

??? ………

??? return 返回值;

}

對于上面的語法格式中具體說明如下:

?修飾符:方法的修飾符比較多,有對訪問權限進行限定的,有靜態修飾符static,還有最終修飾符final等,這些修飾符在后面的學習過程中會逐步介紹

? 返回值類型:用于限定方法返回值的數據類型

? 參數類型:用于限定調用方法時傳入參數的數據類型

? 參數名:是一個變量,用于接收調用方法時傳入的數據

? return關鍵字:用于結束方法以及返回方法指定類型的值

? 返回值:被return語句返回的值,該值會返回給調用者

需要特別注意的是,方法中的“參數類型 參數名1,參數類型 參數名2”被稱作參數列表,它用于描述方法在被調用時需要接收的參數,如果方法不需要接收任何參數,則參數列表為空,即()內不寫任何內容。方法的返回值必須為方法聲明的返回值類型,如果方法中沒有返回值,返回值類型要聲明為void,此時,方法中return語句可以省略。

?????? 接下來通過一個案例來演示方法的定義與使用,如下圖所示。MethodDemo01.java

public class MethodDemo01 {public static void main(String[] args) {int area = getArea(3, 5); // 調用 getArea方法System.out.println(" The area is " + area);}// 下面定義了一個求矩形面積的方法,接收兩個參數,其中x為高,y為寬public static int getArea(int x, int y) {int temp = x * y; // 使用變量temp記住運算結果return temp; // 將變量temp的值返回
    }
}

運行結果如下圖所示。

在上述代碼中,定義了一個getArea()方法用于求矩形的面積,參數x和y分別用于接收調用方法時傳入的高和寬,return語句用于返回計算所得的面積。在main()方法中通過調用getArea()方法,獲得矩形的面積,并將結果打印。

1.3? ? ? 方法調用圖解

接下來通過一個圖例演示getArea()方法的整個調用過程,如下圖所示。

從上圖中可以看出,在程序運行期間,參數x和y相當于在內存中定義的兩個變量。當調用getArea()方法時,傳入的參數3和5分別賦值給變量x和y,并將x*y的結果通過return語句返回,整個方法的調用過程結束,變量x和y被釋放。

1.4? ? ? 方法定義練習

分別定義如下方法:

???????? 定義無返回值無參數方法,如打印3行,每行3個*號的矩形

???????? 定義有返回值無參數方法,如鍵盤錄入得到一個整數

???????? 定義無返回值有參數方法,如打印指定M行,每行N個*號的矩形

???????? 定義有返回值有參數方法,如求三個數的平均值

?

? 無返回值無參數方法,如打印3行,每行3個*號的矩形

?

public static void printRect(){//打印3行星for (int i=0; i<3; i++) {//System.out.println("***"); 相當于是打印3顆星,換行//每行打印3顆星for (int j=0; j<3; j++) {System.out.print("*");  // ***
            }System.out.println();}}

? 有返回值無參數方法,如鍵盤錄入得到一個整數

    public static int getNumber(){Scanner sc = new Scanner(System.in);int number = sc.nextInt();return number;}

? 無返回值有參數方法,如打印指定M行,每行N個*號的矩形

public static void printRect2(int m, int n){//打印M行星for (int i=0; i<m; i++) {//每行中打印N顆星for (int j=0; j<n; j++) {System.out.print("*");  }System.out.println();}}

?有返回值有參數方法,如求三個數的平均值

public static double getAvg(double a, double b, double c) {double result = (a+b+c)/3;return result;}

1.5? ? ? 方法的重載

我們假設要在程序中實現一個對數字求和的方法,由于參與求和數字的個數和類型都不確定,因此要針對不同的情況去設計不同的方法。接下來通過一個案例來實現對兩個整數相加、對三個整數相加以及對兩個小數相加的功能,具體實現如下所示。MethodDemo02.java

public class MethodDemo02 {public static void main(String[] args) {// 下面是針對求和方法的調用int sum1 = add01(1, 2);int sum2 = add02(1, 2, 3);double sum3 = add03(1.2, 2.3);// 下面的代碼是打印求和的結果System.out.println("sum1=" + sum1);System.out.println("sum2=" + sum2);System.out.println("sum3=" + sum3);}// 下面的方法實現了兩個整數相加public static int add01(int x, int y) {return x + y;}// 下面的方法實現了三個整數相加public static int add02(int x, int y, int z) {return x + y + z;}// 下面的方法實現了兩個小數相加public static double add03(double x, double y) {return x + y;}
}

運行結果如下圖所示。

從上述代碼不難看出,程序需要針對每一種求和的情況都定義一個方法,如果每個方法的名稱都不相同,在調用時就很難分清哪種情況該調用哪個方法。

為了解決這個問題,Java允許在一個類中定義多個名稱相同的方法,但是參數的類型或個數必須不同,這就是方法的重載。

下面的三個方法互為重載關系

 public static int add(int x,int y) {邏輯} //兩個整數加法public static int add(int x,int y,int z) {邏輯} //三個整數加法public static int add(double x,double y) {邏輯} //兩個小數加法

接下來通過方法重載的方式進行修改,如下所示。MethodDemo03.java

public class MethodDemo03 {public static void main(String[] args) {// 下面是針對求和方法的調用int sum1 = add(1, 2);int sum2 = add(1, 2, 3);double sum3 = add(1.2, 2.3);// 下面的代碼是打印求和的結果System.out.println("sum1=" + sum1);System.out.println("sum2=" + sum2);System.out.println("sum3=" + sum3);}// 下面的方法實現了兩個整數相加public static int add(int x, int y) {return x + y;}// 下面的方法實現了三個整數相加public static int add(int x, int y, int z) {return x + y + z;}// 下面的方法實現了兩個小數相加public static double add(double x, double y) {return x + y;}
}

MethodDemo02.java的運行結果和MethodDemo03.java一樣,如下圖所示。

上述代碼中定義了三個同名的add()方法,它們的參數個數或類型不同,從而形成了方法的重載。

在main()方法中調用add()方法時,通過傳入不同的參數便可以確定調用哪個重載的方法,如add(1,2)調用的是兩個整數求和的方法。值得注意的是,方法的重載與返回值類型無關,它只有兩個條件,一是方法名相同,二是參數個數或參數類型不相同。

1.5.1? ? 重載的注意事項

    重載方法參數必須不同:
參數個數不同,如method(int x)與method(int x,int y)不同
參數類型不同,如method(int x)與method(double x)不同g
參數順序不同,如method(int x,double y)與method(double x,int y)不同重載只與方法名與參數類型相關與返回值無關
如void method(int x)與int method(int y)不是方法重載,不能同時存在重載與具體的變量標識符無關
如method(int x)與method(int y)不是方法重載,不能同時存在

1.5.2? ? 參數傳遞

?

參數傳遞,可以理解當我們要調用一個方法時,我們會把指定的數值,傳遞給方法中的參數,這樣方法中的參數就擁有了這個指定的值,可以使用該值,在方法中運算了。這種傳遞方式,我們稱為參數傳遞。

?在這里,定義方法時,參數列表中的變量,我們稱為形式參數

? 調用方法時,傳入給方法的數值,我們稱為實際參數

我們看下面的兩段代碼,來明確下參數傳遞的過程:

?

public class ArgumentsDemo01 {public static void main(String[] args) {int a=5;int b=10;change(a, b);//調用方法時,傳入的數值稱為實際參數System.out.println("a=" + a);System.out.println("b=" + b);}public static void change(int a, int b){//方法中指定的多個參數稱為形式參數a=200;b=500;}
}

?

? ? ? ? ?程序的運行結果如下:

再看另一段代碼

public class ArgumentsDemo02 {public static void main(String[] args) {int[] arr = { 1, 2, 3 };change(arr);// 調用方法時,傳入的數值稱為實際參數for (int i = 0; i < arr.length; i++) {System.out.println(arr[i]);}}public static void change(int[] arr) {// 方法中指定的多個參數稱為形式參數for (int i = 0; i < arr.length; i++) {arr[i] *= 2;}}
}    

?

程序的運行結果如下:

1.5.3? ?參數傳遞圖解與結論

通過上面的兩段程序可以得出如下結論:

? 當調用方法時,如果傳入的數值為基本數據類型(包含String類型),形式參數的改變對實際參數不影響

?當調用方法時,如果傳入的數值為引用數據類型(String類型除外),形式參數的改變對實際參數有影響

? ?隨機點名器案例

2.1????? 案例介紹

隨機點名器,即在全班同學中隨機的打印出一名同學名字。

要做的隨機點名器,它具備以下3個內容:

? 存儲所有同學姓名

? 總覽全班同學姓名

? 隨機點名其中一人,打印到控制臺

2.2????? 案例需求分析

在全班同學中隨機的打印出一名同學名字。

我們對本案例進行分析,得出如下分析結果:

1.存儲全班同學名字

2.打印全班同學每一個人的名字

3.在班級總人數范圍內,隨機產生一個隨機數,查找該隨機數所對應的同學名字

該案例須有以下3個內容:

? 存儲所有同學姓名

? 總覽全班同學姓名

隨機點名其中一人,打印到控`制臺

隨機點名器明確地分為了三個功能。如果將多個獨立功能的代碼寫到一起,則代碼相對冗長,我們可以針對不同的功能可以將其封裝到一個方法中,將完整獨立的功能分離出來。

而在存儲同學姓名時,如果對每一個同學都定義一個變量進行姓名存儲,則會出現過多孤立的變量,很難一次性將全部數據持有。此時,我們可以使用數組解決多個數據的存儲問題。

2.3????? 實現代碼步驟

編寫CallName.java文件,完成程序的編寫。

?main方法中調用三個獨立方法

public static void main(String[] args) {System.out.println("--------隨機點名器--------");// 創建一個存儲多個同學名字的容器(數組)String[] students = new String[3];/** 1.存儲全班同學名字*/addStudentName(students);/** 2.打印全班同學每一個人的名字*/printStudentName(students);/** 3.獲取隨機點名到的學生姓名,并打印*/String randomName = randomStudentName(students);System.out.println("被點到名的同學是 :" + randomName);}

?1.存儲所有同學姓名

    /*** 1.存儲全班同學名字*     創建一個存儲多個同學名字的容器(數組) *  鍵盤輸入每個同學的名字,存儲到容器中(數組)*/public static void addStudentName(String[] students) {//鍵盤輸入多個同學名字存儲到容器中Scanner sc = new Scanner(System.in);for (int i = 0; i < students.length; i++) {System.out.println("存儲第"+i+"個名稱:");students[i] = sc.next();}}

上述方法中,通過鍵盤錄入,完成為指定數組元素賦值。方法定義時,將參數定義為字符串數組,用于接收存放的同學姓名。

?打印全班同學每一個人的名字

/*** 2打印全班同學每一個人的名字*/public static void printStudentName(String[] students) {//遍歷數組,得到每個同學名字for (int i = 0; i < students.length; i++) {String name = students[i];//打印同學名字System.out.println("第"+i+"個學生名稱:" + name);}}

上述方法中,方法參數students數組中存儲了所有學生的姓名。

通過遍歷將數組中的每一個元素訪問一遍,得到每一個同學名稱。

? 3.獲取隨機點到的學生姓名

/*** 3.在班級總人數范圍內,隨機產生一個隨機數,返回隨機數位置上的學生姓名*/        public static String randomStudentName(String[] students) {//根據數組長度,獲取隨機索引int index = new Random().nextInt(students.length);//通過隨機索引從數組中獲取名稱String name = students[index];//返回隨機點到的名稱return name;}

上述方法中,通過隨機數類Random產生一個從0到數組長度的隨機索引。使用該索引獲取students數組中對應的值,便得到了全班同學的隨機姓名。

? 庫存管理案例

3.1? ? ?案例介紹

現在,我們將原有的庫存管理案例,進行業務邏輯的封裝。

將對下列功能進行方法封裝:

? 打印庫存清單功能

? 庫存商品數量修改功能

? 退出程序功能

3.2? ? ? 案例需求分析

管理員能夠進行的操作有3項(查看、修改、退出),我們可以采用(switch)菜單的方式來完成。

-------------庫存管理------------

1.查看庫存清單

2.修改商品庫存數量

3.退出

請輸入要執行的操作序號:

??????? 每一項功能操作,我們采用方法進行封裝,這樣,可使程序的可讀性增強。

選擇“1.查看庫存清單”功能,則控制臺打印庫存清單

選擇“2.修改商品庫存數量”功能,則對每種商品庫存數進行更新

選擇“3.退出”功能,則退出庫存管理,程序結束

3.3? ? ? 實現代碼步驟

編寫代碼Demo庫存管理.java,完成如下功能:

? 功能菜單

/*** 庫存管理功能菜單* @return 管理員鍵盤輸入的功能操作序號 */public static int chooseFunction() {System.out.println("-------------庫存管理------------");System.out.println("1.查看庫存清單");System.out.println("2.修改商品庫存數量");System.out.println("3.退出");System.out.println("請輸入要執行的操作序號:");//接收鍵盤輸入的功能選項序號Scanner sc = new Scanner(System.in); int choose = sc.nextInt();return choose;}

上述方法用來完成庫存管理功能菜單的顯示、接收管理員選擇的功能操作序號。這是完成了案例的第一步。接下來完成“查看、修改、退出”這三項功能。

? 編寫main主方法,調用庫存管理功能菜單方法,與“查看、修改、退出”這三個方法。

    public static void main(String[] args) {//記錄庫存商品信息//品牌型號String[] brands = new String[]{"MacBookAir", "ThinkpadT450"};//尺寸大小double[] sizes = new double[]{13.3, 14.0};//價格double[] prices = new double[]{6988.88, 5999.99};//庫存個數int[] counts = new int[]{0, 0};//通過while循環模擬管理員進行功能重復選擇操作while (true) {//打印功能菜單操作,接收鍵盤輸入的功能選項序號int choose = chooseFunction();//執行序號對應的功能switch (choose) {case 1://查看庫存清單
                printStore(brands, sizes, prices, counts);break;case 2://修改商品庫存數量
                update(brands, counts);break;case 3://退出
                exit();return;default:System.out.println("----------------------------------");System.out.println("功能選擇有誤,請輸入正確的功能序號!");break;}}}

?

?

在主方法中,創建了5個數組,分別用來存儲商品的品牌型號、尺寸大小、價格、配置、庫存個數,通過接收到的功能選項序號,進行switch語句判斷后,調用對應的功能方法。

? 查看庫存清單功能

/*** 查看庫存清單* @param brands 商品品牌型號* @param sizes 商品尺寸大小    * @param prices 商品價格* @param counts 商品庫存個數*/public static void printStore(String[] brands, double[] sizes, double[] prices, int[] counts) {//統計總庫存個數、統計庫存總金額int totalCount = 0;double totalMoney = 0.0;for (int i = 0; i < brands.length; i++) {totalCount += counts[i];totalMoney += counts[i] * prices[i];}//列表頂部System.out.println("---------------------------查看庫存清單--------------------------");System.out.println("品牌型號        尺寸    價格    庫存數");//列表中部for (int i = 0; i < brands.length; i++) {System.out.println(brands[i]+"    "+sizes[i]+"    "+prices[i]+"    "++counts[i]);}//列表底部System.out.println("-------------------------------------------------------------");System.out.println("總庫存數:"+totalCount); System.out.println("庫存商品總金額:"+totalMoney);}

上述方法用來完成打印庫存清單功能,5個方法參數用來打印的庫存商品相關信息

? 修改商品庫存數量功能

/*** 修改商品庫存數量* @param brands 商品品牌型號* @param counts 商品庫存個數*/public static void update(String[] brands, int[] counts){System.out.println("------------修改商品庫存數量-----------");for (int i = 0; i < brands.length; i++) {System.out.println("請輸入"+ brands[i] +"商品庫存數");counts[i] = new Scanner(System.in).nextInt();}}

?

?

上述方法用來完成修改商品庫存數量功能,2個方法參數用來指定所要修改的商品與庫存數

退出功能

/*** 退出*/public static void exit(){System.out.println("----------------退出---------------");System.out.println("您已退出系統");}

?

? ? ? ? ?上述方法用來完成退出程序的功能

? ? ?總結

4.1? ? ? 知識點總結

?方法

? 格式:

??????????????????????????? 修飾符 返回值類型 方法名(參數類型 參數名1, 參數類型 參數名2, ...) {

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

???????????????????????????????????? return 返回值;

???????? ???????? ???????? }

? 方法使用的注意事項:

??????????????????????????? 1,方法不調用,自己不執行

??????????????????????????? 2,方法中不能定義方法, 但是,方法中可以調用方法

??????????????????????????? 3, 方法定義的位置在類中,其他方法的外面

??????????????????????????? 4, 如果方法沒有明確的返回值類型,使用'空'類型, void表示

??????????????????????????? 5,void只能在方法返回值類型位置使用,不能作為 普通的數據類型使用

??????????????????????????? 6, 如果方法返回值類型為void類型,可以省略 return ;

? 方法調用方式:

???????? 有明確返回值類型的方法調用方式:

?????????????????? 1,單獨調用

?????????????????? 2,輸出調用

?????????????????? 3,賦值調用

???????? 沒有明確返回值類型的方法調用方式:

1,? 單獨調用

? 方法重載:

方法重載,在同一個類中,出現了多個同名的方法,他們的參數列表不同 (參數列表的個數不同,參數列表的數據類型不同,參數列表的順序不同)。

方法重載特點:

與方法的返回值類型無關,與方法的參數名無關,只看方法名與參數列表;

???????? 方法重載,是通過JVM來完成同名方法的調用的,通過參數列表來決定調用的是哪一個方法。

?

轉載于:https://www.cnblogs.com/759hongcheng/p/8350070.html

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

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

相關文章

django rest framework 過濾 lim分頁

一.過濾 1.首先引用diango 自帶的過濾配置 2.導入模塊 from django_filters.rest_framework import DjangoFilterBackend from django_filters import rest_framework as filters 3.一種簡單的過濾: class BookView(ModelViewSet):queryset Book.objects.all()serializer_clas…

MySQL用戶及權限管理

MySQL用戶及權限管理查看用戶及權限查看用戶及作用域&#xff08;使用范圍&#xff09;查看用戶權限創建用戶及授權字段參數用戶管理使用命令提示符登錄MySQL mysql -h localhost -u root -p查看用戶及權限 mysql中的用戶信息和權限等都存儲在一個名為mysql的數據庫中。其中主…

附近有什么?8款可以查周邊的App

如今科技發達的時代&#xff0c;手機的功能不僅僅只是能通訊聊天&#xff0c;而是逐漸的走進了人們的生活中。因為有了APP&#xff0c;我們的生活才更豐富&#xff0c;并且有很多是我們生活中不可缺少的軟件&#xff0c;而這些軟件便是根據手機中的GPS定位系統而來的。簡單來說…

MyEclipse小問題與漢字處理

今天在使用MyEclipse時&#xff0c;遇到工作目錄報錯(如上圖)&#xff0c;解決方法如下&#xff1a;找到對應工作區(查看工作區的方法為&#xff1a;單擊File → Switch Workspace 即可)依次打開 .metadata文件夾 → .plugins文件夾 → org.eclipse.core.runtime文件夾 → .set…

關系數據庫設計及優化原則

一直以來就想總結一下自己這么多年來在關系數據庫上積累的經驗。奈何自己是一個比較懶的人一直不想動手去寫。扎克伯格曾說過&#xff1a;“想做一件事的話&#xff0c;最好的辦法就是先開始”。索性就先寫一點東西&#xff0c;這些東西不會太長&#xff0c;自然也不會包括太多…

java B2B2C springmvc mybatis電子商務平臺源碼-消息隊列之RocketMQ

RocketMQ出自阿里公司的開源產品&#xff0c;用 Java 語言實現&#xff0c;在設計時參考了 Kafka&#xff0c;并做出了自己的一些改進&#xff0c;消息可靠性上比 Kafka 更好。RocketMQ在阿里集團被廣泛應用在訂單&#xff0c;交易&#xff0c;充值&#xff0c;流計算&#xff…

VSCode同步設置

2022/4/1 更新 剛剛發現還有人在看這篇文章&#xff0c;這里更新一下&#xff0c;VSCode 從1.48版本開始已經內置了同步功能&#xff0c;可以不用再使用Settings Sync插件了。 點擊左下角的用戶或者設置的 Sign in to Sync Setting&#xff0c;使用GitHub或者Microsoft賬戶登…

配置三臺服務器組成的ELK集群(二)

上一篇里主要是介紹了ES和ES-Head的安裝過程&#xff0c;這一篇繼續介紹ELK集群的其他核心組件安裝過程。 五、安裝Logstash&#xff1a; 本案的Logstash安裝在10.113.130.117上&#xff1b;燃鵝&#xff0c;Logstash也可以利用多臺組成集群&#xff0c;如果未來單臺處理不過來…

Discuz X3.2源碼解析 discuz_application類(轉自百度)

discuz_application在/source/class/discuz/discuz_application.php中。 discuz_application繼承自抽象類discuz_base discuz_application主要實現對運行環境、配置、輸入、輸出、數據庫、設置、用戶、session、移動模塊、計劃任務、手機預覽等方面的初始化。 instance()函數來…

.NET性能優化-是時候換個序列化協議了

計算機單機性能一直受到摩爾定律的約束&#xff0c;隨著移動互聯網的興趣&#xff0c;單機性能不足的瓶頸越來越明顯&#xff0c;制約著整個行業的發展。不過我們雖然不能無止境的縱向擴容系統&#xff0c;但是我們可以分布式、橫向的擴容系統&#xff0c;這聽起來非常的美好&a…

Kubernetes-基于Helm安裝部署高可用的Redis

1、Redis簡介 Redis是一個開放源代碼&#xff08;BSD許可證&#xff09;的代理&#xff0c;其在內存中存儲數據&#xff0c;可以代理數據庫、緩存和消息。它支持字符串、散列、列表、集合和位圖等數據結構。Redis 是一個高性能的key-value數據庫&#xff0c; 它在很大程度改進了…

Vue 深度監聽和初始綁定

vue的監聽屬性普通方式無法監聽對象內部屬性的改變&#xff0c;并且初始化時不會監聽數據對象。 vue為監聽屬性提供了一種對象方法 watch: {option.size: {// handler為默認執行的方法handler (newValue, oldValue) {this.size newValue}&#xff0c;// 立即執行handler方法…

markdown流程圖畫法小結

markdown流程圖畫法小結markdown畫圖流程圖 最簡單的流程圖為例mermaid! graph TD A --> B //在沒有(),[].{}等括號的情況之下&#xff0c;圖標默認名字就是字母 A --> C C --> D B --> D 給圖標添加名字&#xff0c;改變只有矩陣圖形&#xff0c;在箭頭上添加文字…

hihocoder 1689 - 推斷大小關系(圖論+二分)

題目鏈接 https://vjudge.net/problem/HihoCoder-1689有N個整數A1, A2, ... AN&#xff0c;現在我們知道M條關于這N個整數的信息。每條信息是&#xff1a;Ai < Aj 或者 Ai Aj 小Hi希望你能從第一條信息開始依次逐條處理這些信息。一旦能推斷出A1和AN的大小關系就立即停止。…

32歲京東畢業程序員,走投無路當了外企外包,閑得心里發慌,到點下班渾身不自在!...

??當一位京東程序員進入外企當外包會怎么樣&#xff1f;順利躺平&#xff0c;實現wlb&#xff08;工作生活平衡&#xff09;嗎&#xff1f;未必&#xff0c;因為人是一種很奇怪的動物。這位網友說&#xff1a;32歲京東畢業程序員&#xff0c;找了幾個月工作一直沒有合適的&am…

SpringBoot+Shiro學習(四):Realm授權

上一節我們講了自定義Realm中的認證&#xff08;doGetAuthenticationInfo&#xff09;&#xff0c;這節我們繼續講另一個方法doGetAuthorizationInfo授權 授權流程 流程如下&#xff1a; 首先調用Subject.isPermitted/hasRole接口&#xff0c;其會委托給SecurityManager&#x…

Git放棄文件修改

已提交 # 撤銷提交&#xff0c;保留修改內容 git reset <commit_id># 撤銷提交&#xff0c;不保留修改內容 git reset --hard <commit_id>已暫存文件 # 撤銷單個文件暫存 git reset HEAD <filename># 撤銷所有文件/文件夾暫存 git reset HEAD .已跟蹤未暫存…

[LeetCode][Java] Unique Paths II

題目&#xff1a; Follow up for "Unique Paths": Now consider if some obstacles are added to the grids. How many unique paths would there be? An obstacle and empty space is marked as 1 and 0 respectively in the grid. For example, There is one obst…

lua windows下編譯

從Lua5.1開始官方給出的文件只有源代碼和makefile文件了&#xff0c;官網給出的bulid方式也是在linux平臺&#xff0c;如果只是想找個庫使用下可以到這里來下載&#xff1a;http://joedf.ahkscript.org/LuaBuilds/ &#xff0c;如果需要自定修改庫配置的話&#xff0c;就需要自…

XAML 創建瀏覽器應用程序

XAML 創建瀏覽器應用程序XAML 創建瀏覽器應用程序作者&#xff1a;WPFDevelopersOrg - 驚鏵原文鏈接&#xff1a;https://learn.microsoft.com/zh-cn/dotnet/desktop/wpf/app-development/wpf-xaml-browser-applications-overview?viewnetframeworkdesktop-4.8框架使用.NET40&…