1 package com.Lucky.base; 2 3 public class method { 4 //方法 java是值傳遞 5 6 //main主方法 7 8 //值傳遞:是指在呼叫函式時將實際引數復制一份傳遞到函式中,這樣在函式中如果對引數進行修改,將不會影響到實際引數, 9 // 與 10 // 參考傳遞:是指在呼叫函式時將實際引數的地址直接傳遞到函式中,那么在函式中對引數所進行的修改,將影響到實際引數 11 //按共享傳遞,是指在呼叫函式時,傳遞給函式的是實參的地址的拷貝(如果實參在堆疊中,則直接拷貝該值) 12 public static void main(String[] args) { 13 14 int m= max(12,12); 15 System.out.println(m); 16 17 18 //呼叫printMax方法: 19 double dou=printMax(1,5,6,7,8); 20 System.out.println(dou); 21 22 23 24 ///傳遞【1.可以發現,資料并沒有發生改變】 25 System.out.println("----傳遞【1.可以發現,資料并沒有發生改變】----"); 26 String tes="正常資料"; 27 System.out.println(tes); 28 test(tes); //試著改變tes的內容 29 System.out.println(tes); 30 /* 31 決議: 是tes變數的拷貝,不是真正的tes,test()方法中改變的是拷貝,對真正的tes是沒有影響的 32 */ 33 34 //【2.發生糾結:參考型別的時參考傳遞??????】 35 System.out.println("----傳遞【【2.發生糾結】】----"); 36 Users users=new Users(); 37 users.setName("測驗代碼"); 38 users.setAge(999); 39 Users us=test1(users); //試著改變users的內容【結果發生改變】 40 System.out.println(us.getAge()); 41 System.out.println(us.getName()); 42 /* 43 決議: 指向的地址是同一個,因此對變數中的資料修改時,還是會影響到原來真實的變數 44 */ 45 46 47 //3.決定一探究竟 48 System.out.println("----決定一探究竟String參考型別----"); 49 String strOld="我要試試String這個參考型別怎么樣"; 50 System.out.println(strOld); 51 strOld="什么鬼,發生改變了"; 52 System.out.println(strOld); 53 /* 54 決議:String變數比較特殊,我們看String的原始碼可以知道, 55 String的值是通過內部的char[]陣列來維護的, 56 但是這個資料定義的是final型別的, 57 因此,String的值是不可變的,我們平時修改String的值, 58 其實是重新new了一個String物件,這個物件的值是: 什么鬼,發生改變了, 59 并把這個物件的參考地址賦給了a,原來的hello還是在堆中,只是這個值沒有被參考, 60 過段時間會被gc垃圾回收, 61 */ 62 63 //4.峰回路轉【感覺好像又行了】 64 System.out.println("---峰回路轉【感覺好像又行了】----"); 65 users.setName("測驗不同堆地址的物件代碼"); 66 users.setAge(666); 67 Users se=test2(users); 68 System.out.println(us.getAge()); 69 System.out.println(us.getName()); 70 /* 71 決議: 修改的是變數在堆疊中的地址,則不會影響原變數 72 */ 73 74 75 } 76 77 //比大小 78 public static int max(int a,int b){ 79 int result=0; 80 81 if(a>b){ 82 result=a; 83 }else if(a<b){ 84 result=b; 85 }else{ 86 System.out.println("兩個值相等"); 87 result=0; //兩個數值相同 回傳0 88 } 89 90 91 return result; 92 } 93 94 //方法多載: 方法名相同,引數數量、引數順序、引數型別不同 95 public static int max(int a,int b,int c){ 96 int result=0; 97 98 if(a>b){ 99 result=a; 100 }else if(a<b){ 101 result=b; 102 }else{ 103 System.out.println("兩個值相等"); 104 result=0; //兩個數值相同 回傳0 105 } 106 return result; 107 } 108 109 110 /* 111 可變引數:用...來表示 例如:int... A; 112 注意點:1.每個方法中只能存在一個可變引數,而且位置必須在最后一位 113 */ 114 //遍歷排序案例:最大值 115 public static double printMax(double... A){ 116 double result=A[0]; //將第一個資料拿出來 117 if(A.length==0){ 118 System.out.println("沒有資料"); 119 }else { 120 //遍歷資料,逐個比對 121 for (int i = 1; i < A.length; i++) { 122 if(A[i]>result){ 123 result=A[i]; 124 } 125 } 126 } 127 return result; 128 } 129 130 131 132 133 134 135 ////////////////////////值傳遞與參考傳遞的案例////////////////////////// 136 137 138 public static String test(String str){ 139 str="測驗值傳遞:java"; 140 return str; 141 } 142 143 144 public static Users test1(Users users){ 145 //不創建新的物件,現在改變內容,指向同一個堆的地址,使其發生改變 146 users.setAge(20); 147 users.setName("唯易"); 148 return users; 149 } 150 151 152 public static Users test2(Users users){ 153 users=new Users(); //創建新物件,改變存盤在堆疊中的地址;令該物件指向不同的堆的記憶體中 154 users.setName("唯易"); 155 users.setAge(20); 156 return users; 157 } 158 159 160 } 161 162 //外部類【為了演示使用】 163 class Users{ 164 private String name; 165 private Integer age; 166 167 public String getName() { 168 return name; 169 } 170 171 public void setName(String name) { 172 this.name = name; 173 } 174 175 public Integer getAge() { 176 return age; 177 } 178 179 public void setAge(Integer age) { 180 this.age = age; 181 } 182 183 }
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/534114.html
標籤:其他
上一篇:【建議收藏】15755字,講透MySQL性能優化(包含MySQL架構、存盤引擎、調優工具、SQL、索引、建議等等)
