第02章(基本语法)
1 /***************** 2 ***第二章基本语法 3 *******知识点: 4 **************1.注释 5 ******************1.1 单行注释 6 ******************1.2 多行注释 7 **************2.标识符、关键字 8 **************3.基本数据类型 9 ******************3.1 整型 10 ******************3.2 浮点型 11 ******************3.3 字符型 12 ******************3.4 布尔型 13 **************4.基本运算符 14 ******************4.1 赋值运算符 15 ******************4.2 算术运算符 16 ******************4.3 自增自减运算符 17 ******************4.4 逻辑运算符 18 ******************4.5 比较运算符 19 ******************4.6 三目运算符 20 ******************4.7 位运算符 21 **************5.语句结构 22 ******************5.1 顺序结构 23 ******************5.2 分支结构 24 **************************5.2.1 if结构 25 **************************5.2.2 if-else结构 26 **************************5.2.3 if-else if-else结构 27 **************************5.2.4 switch结构 28 ******************5.3 循环结构 29 **************************5.3.1 while结构 30 **************************5.3.2 do - while结构 31 **************************5.3.3 for结构 32 **************************5.3.4 foreach结构 33 ******************5.4 跳出结构 34 **************************5.4.1 break 35 **************************5.4.2 continue 36 **************************5.4.3 return 37 **************6.数组 38 ******************6.1 一维数组 39 ******************6.2 二维数组 40 ******************6.3 多维数组 41 *****************/ 42 import java.util.Arrays; //因为使用到API数组排序 需要导入包 import语句必须在最前面不能在class代码内 43 44 public class test2{ 45 public static void main(String[] args){ 46 showDemo("1.注释"); 47 demoNote();//演示1.注释 48 49 showDemo("2.标识符、关键字"); 50 demoKeyWord();//演示2.标识符、关键字 51 52 showDemo("3.基本数据类型"); 53 demoDataSort();//演示3.基本数据类型 54 55 showDemo("4.基本运算符"); 56 demoCalcSymbol();//演示4.基本运算符 57 58 showDemo("5.语句结构"); 59 demoStatementStruct();//演示5.语句结构 60 61 showDemo("6.数组"); 62 demoArray();//演示6.数组 63 64 65 } 66 67 /* 68 * 抽取打印演示函数 用于打印演示功能提示 69 */ 70 public static void showDemo(String demoStr){ 71 System.out.println("演示:" + demoStr); 72 } 73 74 /* 75 * 1.注释演示 76 */ 77 public static void demoNote(){ 78 //1.1单行注释 这是单行注释 79 80 /* 1.2多行注释 81 * 我 82 * 是 83 * 华 84 * 丽 85 * 的 86 * 注 87 * 释 88 * 行 89 */ 90 } 91 92 /* 93 *2.标识符、关键字 94 */ 95 public static void demoKeyWord(){ 96 int $a,a_a,a2; //其中int为java关键字 $a,a_a,a2;为标识符 97 } 98 99 /* 100 *3.基本数据类型(四类八种) 101 * 其中注意数据类型的强转换问题、字符类型可以存中文字符 102 */ 103 public static void demoDataSort(){ 104 /* 105 *3.1整型 106 *需注意:低范围赋值给高范围时无问题.高范围赋值给低范围时会截取,当超过范围时溢出。 107 *其中byte 1个字节 short 2个字节 int 4个字节 long 8个字节 108 */ 109 byte b_; short s_; int i_; long l_; 110 b_ = -128 ; 111 l_ = b_; 112 System.out.println("l_:" + l_); //l_可以存储-128 所以此时打印-128 113 i_ = 32768; 114 s_ = (short) i_; 115 System.out.println("s_:" + s_); //s_不可以存储32768,所以出现溢出 打印-32768 116 117 /* 118 *3.2 浮点型 119 *其中float 4个字节 double 8个字节 120 */ 121 float f_; double d_; 122 123 /* 124 *3.3 字符型 125 *其中char 2个字节 126 */ 127 char c_; 128 129 c_ = '黄' ;//汉字为两个字节 需跟string区别 char类型为单引号 string为双引号 130 System.out.println("c_:" + c_); 131 132 /* 133 *3.4 布尔型 134 *其中boolean 1个字节 135 */ 136 boolean b_l; 137 b_l = true ; //布尔型 取值为 true / false 138 System.out.println("b_l:" + b_l); 139 140 } 141 142 /* 143 *4.基本运算符 144 ************4.1 赋值运算符 145 ************4.2 算术运算符 146 ************4.3 自增自减运算符 147 ************4.4 逻辑运算符 148 ************4.5 比较运算符 149 ************4.6 三目运算符 150 ************4.7 位运算符 151 ************4.8 移位运算符 152 */ 153 public static void demoCalcSymbol(){ 154 /* 155 *4.1 赋值运算符 156 */ 157 byte b_a=1,b_b; //java可以在声明变量时直接对变量初始化(即赋值) 158 b_b = b_a; //将b_a的值赋值给b_b 此时b_b也为1; 159 System.out.println("i_b:" + b_b); 160 161 /* 162 *4.2 算术运算符 163 *需注意:算数运算符的优先级 164 */ 165 short s_a=1,s_b; //java可以在声明变量时直接对变量初始化(即赋值) 166 s_b = (byte)(s_a + s_a * 5); //因为s_a * 5得到的是一个int型的数据。故需要将其强转为byte 167 System.out.println("s_b:" + s_b); 168 169 170 /* 171 *4.3 自增自减运算符 172 *需注意:a++ ++a 和 a-- --a的区别 173 *(真实工作中不推荐这样的写法,可读性相对比较差) 174 */ 175 int i_a=1,i_b,i_c; //java可以在声明变量时直接对变量初始化(即赋值) 176 i_b = i_a++ ; //先赋值i_b ,i_a本身+1 此时i_b为1 i_a为2 177 System.out.println("i_a:" + i_a); 178 System.out.println("i_b:" + i_b); 179 180 i_c = ++i_a; //i_a本身+1 再赋值 此时i_a、i_c均为 3 181 System.out.println("i_a:" + i_a); 182 System.out.println("i_c:" + i_c); 183 /****a-- 和 --a 也一样 这里就不演示了****/ 184 185 /* 186 *4.4 逻辑运算符 187 * 与 && 或 || 非 ! 188 */ 189 boolean b_t = true , b_f = false ; 190 System.out.println("b_t 与 b_f:" + (b_t && b_f));//与 191 System.out.println("b_t 或 b_f:" + (b_t || b_f));//或 192 System.out.println("非b_t:" + (!b_t));//非 193 194 195 /* 196 *4.5 比较运算符 197 * >大于、>=不小于、<小于、 <=不大于 、== 等于 、!= 不等于 198 *较简单不演示 199 */ 200 201 202 /* 203 *4.6 三目运算符 204 * 需注意: a?b:c a为真执行b。否则执行c 其中b、c可再多重嵌套如a?(a?b:c):(a?b:c) 205 */ 206 int i_d = (b_t && b_f) ? 1 : 0; //(b_t && b_f)为真时 赋值1 否则 0 207 int i_e = (b_t || b_f) ? 1 : 0; //(b_t || b_f)为真时 赋值1 否则 0 208 System.out.println("i_d:" + i_d + " " + "i_e:" + i_e); 209 210 /* 211 *4.7 位运算符 212 *位与运算符用符号&、位或运算符用符号|、位非运算符用符号~、位异或运算符^(相同等于0 不同等于1) 213 *需注意:这里的与或非不同于逻辑运算符的与或非。这里的与或非运算的是位而不是表达式或变量 214 */ 215 int i_f = 1, i_g = 0 ; 216 System.out.println("i_f位与i_g:" + (i_f & i_g));//001 & 000 -> 000 -> 0 217 System.out.println("i_f位或i_g:" + (i_f | i_g));//001 | 000 -> 001 -> 1 218 System.out.println("位非i_f:" + (~i_f)); //!001 -> 110 -> 负(010) -> -2 219 System.out.println("i_f位异或i_g:" + (i_f ^ i_g));//^(001 | 000) -> 001 ->1 220 221 /* 222 *4.8 移位运算符 223 *>>有符号右移、<<有符号左移和>>>无符号右移 224 */ 225 int i_h = -2 , i_i = 2, i_j = 8; 226 System.out.println("i_h >>> 1:" + (i_h >>> 1));//无符号最高位补0 227 System.out.println("i_i << 2:" + (i_i << 2)); //相当于 * 2的2次方 228 System.out.println("i_h >> 1:" + (i_j >> 3)); //相当于 / 2的3次方 229 230 } 231 232 /*5.语句结构 233 **************5.1 顺序结构 234 **************5.2 分支结构 235 **********************5.2.1 if结构 236 **********************5.2.2 if-else结构 237 **********************5.2.3 if-else if-else结构 238 **********************5.2.4 switch结构 239 **************5.3 循环结构 240 **********************5.3.1 while结构 241 **********************5.3.2 do - while结构 242 **********************5.3.3 for结构 243 **********************5.3.4 foreach结构 244 **************5.4 跳出结构 245 **********************5.4.1 break 246 **********************5.4.2 continue 247 **********************5.4.3 return 248 */ 249 public static void demoStatementStruct(){ 250 /* 251 *5.1 顺序结构(一个接着一个 too easy 妈妈再也不用担心我的编程了) 252 */ 253 System.out.println("按顺序来,这是第一条,接下来是第二条"); 254 System.out.println("按顺序来,这是第二条,接下来是第三条......"); 255 256 /* 257 *5.2 分支结构 258 */ 259 /****5.2.1 if结构*****/ 260 boolean b_a = true ; 261 if(b_a){ 262 System.out.println("这是if结构!"); 263 } 264 265 /****5.2.2 if-else结构*****/ 266 boolean b_b = false ; 267 if(b_b){ 268 System.out.println("这是if - else结构中的if!"); 269 }else{ 270 System.out.println("这是if - else结构中的else!"); 271 } 272 273 /****5.2.3 if-else if-else结构*****/ 274 int i_a = 3; 275 if(i_a == 1){ 276 System.out.println("这是if-else if-else结构中的if!"); 277 }else if(i_a == 2){ 278 System.out.println("这是if-else if-else结构中的第一个else if!"); 279 280 }else if(i_a == 3){ 281 System.out.println("这是if-else if-else结构中的第二个else if!"); 282 }else{ 283 System.out.println("这是if-else if-else结构中的else!"); 284 } 285 286 /****5.2.4 switch结构*****/ 287 /* 288 *需注意有break和没有break的区别 289 */ 290 int i_b = 5; 291 switch(i_b){ 292 case 0: 293 System.out.println("这是switch结构中的0!"); 294 break; 295 case 1: 296 System.out.println("这是switch结构中的1!"); 297 case 2: 298 System.out.println("这是switch结构中的2!"); 299 case 3: 300 System.out.println("这是switch结构中的3!"); 301 case 4: 302 System.out.println("这是switch结构中的4!"); 303 case 5: 304 System.out.println("这是switch结构中的5!"); 305 case 6: 306 System.out.println("这是switch结构中的6!"); 307 break; 308 default: 309 System.out.println("这是switch结构中的defalut!"); 310 break; 311 } 312 313 /* 314 *5.3 循环结构 315 */ 316 317 /****5.3.1 do - while结构(至少执行1次,先执行再判断条件)*****/ 318 int i_c = 1,i=0; 319 do{ 320 i++; 321 System.out.println("这是do-while执行的第" + i + "次"); 322 }while(i_c > 1); 323 324 /****5.3.2 while结构(有可能不执行 先判断再执行)*****/ 325 i = 0; 326 while(i_c > 1){ 327 i++; 328 System.out.println("这是while执行的第" + i + "次"); 329 } 330 331 /****5.3.3 for结构*****/ 332 for(i = 0;i < 2 ;i++){ 333 System.out.println("这是for执行的第" + (i+1) + "次"); 334 } 335 336 int[]a = {0,1,2,3}; 337 /****5.3.4 foreach结构(语法格式比较坑爹 居然用的是for)*****/ 338 for(int b :a){ 339 System.out.println("这是foreach执行的第" + (b+1) + "次"); 340 } 341 342 //结论: 343 /*for跟foreach 344 *1.均可遍历数组或集合 345 *2.使用for时可以读写数据,而使用foreach只能读取 346 *3.foreach可防止访问数组越界问题 347 *4.foreach是for的简化版本,若数据仅仅是读取时推荐使用foreach。它会比for速度快一点 348 */ 349 350 /* 351 *5.4 跳出结构 352 */ 353 354 /****5.4.1 break结构*****/ 355 /* 356 *break关键字 跳出循环往下执行相关语句 357 *如 while(i > 5){ 358 i++; 359 if(i ==3){ 360 break; 361 } 362 b = b + i; 363 } 364 i = i + 5; 365 当 i = 3时 调出循环,执行 i = i + 5; 366 */ 367 368 /****5.4.2 continue结构*****/ 369 /* 370 *continue关键字 执行下次循环相关语句 371 *如 while(i > 5){ 372 i++; 373 if(i ==3){ 374 continue; 375 } 376 b = b + i; 377 } 378 i = i + 5; 379 当 i = 3时 执行下次循环,此时不会执行b = b + i; 380 */ 381 382 /****5.4.3 return结构*****/ 383 /* 384 *return关键字 执行下次循环相关语句 385 *如 while(i > 5){ 386 i++; 387 if(i ==3){ 388 return; 389 } 390 b = b + i; 391 } 392 i = i + 5; 393 当 i = 3时 跳出函数,此时不会执行i = i + 5; 394 */ 395 } 396 397 /*6.数组 398 **************6.1 一维数组 399 **************6.2 二维数组 400 **************6.3 多维数组 401 */ 402 public static void demoArray(){ 403 /* 404 *6.1 一维数组 405 */ 406 407 /*三种不同定义数组方式*/ 408 byte[] b = new byte[10]; //推荐这种 因为更能直接看懂数据类型 409 int a[] = new int[10]; //C语言写法 410 double d[] = {0.1,0.3,0.2,0.4,0.21};//定义时直接初始化 411 412 /*根据数组长度遍历数组*/ 413 demoShowArray(d); 414 415 /*调用API类对数组进行升序排序*/ 416 showDemo("数组升序排序"); 417 Arrays.sort(d);//注意需要导入相关工具包 且只能对数据进行升序排序 418 demoShowArray(d); 419 420 /*调用API类对数组进行降序排序*/ 421 showDemo("数组降序排序"); 422 Arrays.sort(d); 423 double[] d1 = demoRevArray(d);//反转 424 demoShowArray(d1); 425 426 /* 427 *6.2 二维数组 428 */ 429 430 /*多种定义方式 每个维度元素数量不一定一致*/ 431 double[][] dd = new double[2][3]; 432 double dd1[][] = {{1,2,3},{4,5,6}}; 433 double dd2[][] = {{1},{3,2},{4,3,6},{7,8,9,10}}; //定义并初始化 434 435 double[][] dd3 = demoRevArray(dd1);//数组行列转换 436 437 demoShowArray("dd",dd); 438 demoShowArray("dd1",dd1); 439 demoShowArray("dd2",dd2); 440 demoShowArray("dd3",dd3); 441 442 /* 443 *6.3 多维数组 (二维数组扩展 可自行体会) 444 */ 445 446 int[][][] i_ar = {{{1,2,3},{4,5,6},{7,8,9}}, 447 {{10,11,12},{13,14,15}, 448 {16,17,18}},{{19,20,21},{22,23,24},{25,26,27}} 449 }; 450 demoShowArray("i_ar",i_ar); 451 452 } 453 454 /* 455 *抽取遍历一维数组方法 456 */ 457 public static void demoShowArray(double d[]){ 458 for(int i = 0 ; i < d.length ; i++){ 459 System.out.println("数组d第" + (i+1) + "个元素为:" + d[i]); 460 } 461 462 } 463 464 /* 465 *抽取遍历二维数组方法 466 */ 467 public static void demoShowArray(String strArray,double d[][]){ 468 for(int i = 0 ; i < d.length ; i++){ 469 for(int j = 0; j < d[i].length ; j++){ 470 System.out.println("数组"+strArray+"第" + (i+1)+"行第"+ (j+1)+ "个元素为:" + d[i][j]); 471 } 472 } 473 } 474 475 /* 476 *抽取遍历三维数组方法 477 */ 478 public static void demoShowArray(String strArray,int i_ar[][][]){ 479 for(int i = 0 ; i < i_ar.length ; i++){ 480 for(int j = 0; j < i_ar[i].length ; j++){ 481 for(int k = 0; k < i_ar[i][j].length ; k++){ 482 System.out.println("数组"+strArray+"第" + (i+1)+"行第"+ (j+1)+ "列第"+(k+1)+"个元素为:" + i_ar[i][j][k]); 483 } 484 } 485 } 486 } 487 488 /* 489 *实现一维数组反转 490 */ 491 public static double[] demoRevArray(double d[]){ 492 int temp; 493 double[] tmp = new double[d.length]; 494 for(int i = 0; i < d.length/2 + 1; i++){ 495 tmp[d.length - i - 1] = d[i]; 496 tmp[i] = d[d.length - i - 1]; 497 } 498 return tmp; 499 500 } 501 502 /* 503 *实现二维数组反转 504 */ 505 public static double[][] demoRevArray(double d[][]){ 506 int temp; 507 double[][] tmp = new double[d[0].length][d.length]; 508 for(int i = 0; i < d.length ; i++){ 509 for(int j = 0 ; j < d[i].length; j++){ 510 tmp[j][i] = d[i][j]; 511 } 512 } 513 return tmp; 514 515 } 516 517 }