1. ch03
  2. 目标:表达式和流程控制
  3. ----------------------------------------------
  4. 1.实例变量和局部变量
  5. 程序的基本功能是处理数据,程序中需要使用变量来接收并表示数据。
  6. 程序中的变量必须先定义之后才能使用。
  7. 定义变量包括定义变量的"类型"以及变量的"名字"
  8. 例如: int a; Student s;
  9. 程序中的变量分为实例变量和局部变量。
  10.  
  11. 1)实例变量(又称属性、全局变量、成员变量)
  12. 位置:
  13. 直接定义在中类,属于类中的一种成员(成员变量/成员方法)。
  14. 例如:
  15. public class Student{
  16. public String name;
  17. }
  18.  
  19. 作用范围:
  20. 是指变量定义之后,都在哪些地方可以被访问到。
  21. 由于实例变量是直接定义在类中的,所以在定义的时候可以使用修饰符进行修饰。
  22. 例如:这四种修饰符的作用之后会介绍到
  23. public class Student{
  24. public String name1;
  25. protected String name2;
  26. String name3;
  27. private String name4;
  28. }
  29. 以上是使用了四种访问权限控制修饰符来修饰了这四个变量。
  30. 但是不管是哪种修饰符情况,实例变量再当前类中的每一个方法都是可以被访问到的(static修饰的静态方法除外)。
  31.  
  32. public class Student{
  33. public String name1;
  34. protected String name2;
  35. String name3;
  36. private String name4;
  37.  
  38. //类中的方法里面可以直接访问实例变量
  39. public void run(){
  40. System.out.println(name1);
  41. System.out.println(name2);
  42. System.out.println(name3);
  43. System.out.println(name4);
  44. }
  45. }
  46.  
  47. 默认值:
  48. 类的中实例变量声明后,如果我们没有显式赋值的话,每种实例变量其实都是有自己的默认值的。
  49. 实例变量的赋值分为隐式赋值和显式赋值
  50. 隐式赋值就是JVM给它赋的值(就是说的默认值)
  51. 显式赋值就是我们主动给它赋的值
  52. 例如:
  53. public class Student{
  54. public int a;
  55. public float f;
  56. public char c;
  57. public boolean b;
  58. public String str;
  59.  
  60. public void println(){
  61. System.out.println(a);
  62. System.out.println(f);
  63. System.out.println(c);
  64. System.out.println(b);
  65. System.out.println(str);
  66. }
  67. }
  68.  
  69. 基本类型的实例变量:
  70. 整型 :默认值为 0
  71. 浮点型 :默认值为 0.0
  72. 布尔型 :默认值为 false
  73. 字符型 :默认值为 0 或者 '\u0000'
  74. 引用类型的实例变量:
  75. 默认值都是 null
  76.  
  77. 生命周期:
  78. 实例变量是属于对象的,一个对象被创建出来的时候,这个对象中的实例变量就有了,直到这个对象被GC当做垃圾回收之后,这个实例变量也就没有了。
  79.  
  80. 1)局部变量
  81. 位置:
  82. 定义在方法的代码块中或者方法的参数列表中
  83. 例如:a b c d四个都是局部变量
  84. public void test(int a){
  85. int b;
  86. {
  87. int c;
  88. }
  89.  
  90. if(true){
  91. int d;
  92. }
  93. }
  94.  
  95. 作用范围:
  96. 1)如果是定义在方法的参数列表中,那么在当前方法的任何位置都可以访问该局部变量
  97. 例如:
  98. public void test(int a){
  99. System.out.println(a);
  100. {
  101. System.out.println(a);
  102. }
  103.  
  104. if(true){
  105. System.out.println(a);
  106. }
  107. }
  108.  
  109. 2)如果是定义在方法中,那么就要看这个局部变量是"直接"位于哪一对大口号内
  110. 例如:
  111. public void test(){
  112. int a;
  113. {
  114. int b;
  115. }
  116.  
  117. if(true){
  118. int c;
  119. }
  120. }
  121. 观察局部变量a/b/c三个分别是"直接"位于哪一对大括号内,那么这个局部变量的作用范围就在那一对大括号内.
  122. 如果访问的地方出了这个范围,那么是访问不到这个局部变量的。
  123.  
  124. 默认值:
  125. 局部变量是"没有"默认值的,我们只能显式的赋值之后才能使用该变量,否则会编译报错.
  126. 例如:
  127. //编译通过
  128. //只定义了变量但是没有使用
  129. public void test(){
  130. int a;
  131. }
  132.  
  133. //编译报错
  134. //因为在使用局部变量之前没有赋值
  135. public void test(){
  136. int a;
  137. System.out.println("a = "+a);
  138. }
  139.  
  140. //编译通过
  141. //只有在使用之前赋值就可以了
  142. //int a = 1;
  143. //当然声明的同时就赋值也是可以的
  144. public void test(){
  145. int a;
  146.  
  147. a = 1;
  148. System.out.println("a = "+a);
  149. }
  150.  
  151. 声明周期:
  152. 当方法被调用,代码执行到局部变量的声明这一刻开始,这个局部变量就出现了,直到局部变量"直接"位于的大括号内中的代码执行结束的时候,该变量在内存中也就释放消失了。
  153. 例如:
  154. //test方法执行完,变量a就没有了
  155. public void test(){
  156. int a;
  157. }
  158.  
  159. //if代码块执行完,变量b就没有了
  160. public void test(){
  161. if(true){
  162. int b;
  163. }
  164.  
  165. //这里是访问不到变量b的,编译报错
  166. System.out.println("b = "+b);
  167. }
  168.  
  169. 2.java中的操作符(operator)
  170. 1)赋值操作符:
  171. = 例如: int x=0,i=1,j=1;
  172. *= 例如: a*=b 等价于 a=a*b
  173. /= 例如: a/=b 等价于 a=a/b;
  174. %= 例如: a%=b 等价于 a=a%b;
  175. += 例如: a+=b 等价于 a=a+b;
  176. -= 例如: a-=b 等价于 a=a-b;
  177. 其他的都是类似情况
  178.  
  179. a+=1; a++
  180. 特殊情况:i++ ++i
  181. i++表示先使用i的值,然后再让i自增1
  182. ++i表示先让i的值自增1,然后再使用i的值。
  183. 例如:
  184. int a = 1;
  185. System.out.println(a++);//
  186. System.out.println(a);//
  187. ---------------------------------
  188. int b = 1;
  189. System.out.println(++b);//
  190. System.out.println(b);//
  191.  
  192. 类似的i-- --i也是一样的区别
  193.  
  194. 2)比较操作符
  195. > : 大于
  196. >= : 大于等于
  197. < : 小于
  198. <= : 小于等于
  199.  
  200. 注意:以上操作符只适用于整数类型和浮点数类型;
  201.  
  202. int a=1,b=1;
  203. double d=1.0;
  204. System.out.println(a>b);//false
  205. System.out.println(a<b);//false
  206. System.out.println(a>=d);//true
  207. System.out.println(a<=b);//true
  208.  
  209. instanceof: 判断一个引用类型变量所指向的对象是不是属于某个类型。
  210. Student s = new Student();
  211. System.out.println(s instanceof Object);//true
  212. System.out.println(s instanceof Student);//true
  213. //编译报错,因为Student类型和String没有任何子父类关系
  214. System.out.println(s instanceof String);
  215.  
  216. 注意:最终判断的是s所指向对象的类型是不是属于某类型,而不是判断变量s的类型是不是属于某个类型.
  217. 例如:
  218. Object o = new Student();
  219. 变量o的类型是Object,但是o指向的对象类是Studnet.可以这样写的原因是因为ObjectStudnet的父类.这是java的高级特性"多态"的一种表现方式。
  220.  
  221. 3)相等操作符
  222. == : 判断俩个数据 是否 等于
  223. != : 判断俩个数据 是否 不等于
  224.  
  225. 既可以应用在基本类型的比较,也可以应用在引用类型的比较
  226.  
  227. a.基本类型:
  228. int a=1,b=1;
  229. float c=1.0f;
  230. double d=1.0;
  231.  
  232. //比较的是俩个基本类型数据的值是否相等
  233. System.out.println(a==b); //输出true;
  234. System.out.println(a==c); //输出true;
  235. System.out.println(a==d); //输出true;
  236. System.out.println(c==d); //输出true;
  237.  
  238. b.引用类型:
  239. 这两个引用变量必须都引用同一个对象,结果才为true.
  240. Student s1 = new Student("zs",25,100);
  241. Student s2 = new Student("zs",25,100);
  242. //s1中存储的对象内存地址赋给变量s3
  243. Student s3 = s1;
  244.  
  245. //比较俩个引用所指向对象的堆区内存地址是否一样
  246. //俩个对象的内存地址一样相比较才会是true
  247. System.out.println(s1 == s2); //输出false;
  248. System.out.println(s1 == s3); //输出true;
  249.  
  250. 4)相加操作符
  251. + : 数据类型值相加或字符串连接
  252.  
  253. a.数据类型值相加
  254. int a=1+2; //a值为3;
  255. double b=1+2; //b值为3.0;
  256. double b=1+2.0; //c值为3.0;
  257.  
  258. b.字符串连接
  259. System.out.println(1+2+"a"); //输出3a
  260. System.out.println(1+2.0+"a");//输出3.0a
  261. System.out.println(1+2.0+"a"+true);//输出3.0atrue
  262. System.out.println("a"+1+2); //输出a12
  263. System.out.println(1+"a"+2); //输出1a2
  264.  
  265. / : 整除, 如操作数均为整数,运算结果为商的整数部分
  266. int a1=12/5; //
  267. int a2=13/5; //
  268. int a3=-12/5; //-2
  269. int a4=-13/5; //-2
  270. int a5=1/5; //
  271. double a6=12/5; //2.0
  272. double a7=12/5.0; //2.4
  273.  
  274. % : 取模操作符, 如操作数均为整数,运算结果为商的整数部分
  275. int a1=1%5; //
  276. int a2=13%5; //
  277. double a3=1%5; //1.0
  278. double a4=12%5.1; //1.8000000000000007
  279.  
  280. 5)移位操作符
  281. >> : 算术右移位运算,也称做带符号右移位运算。
  282.  
  283. 注意:正数取反加1得到其对应的负数,负数取反加1得到其对应的正数
  284.  
  285. int a1 = 12 >> 1; //6;
  286. 0000 1100 12
  287. -----------
  288. 0000 110 >>1
  289. -----------
  290. 0000 0110 补位 因为是正数所以补0 结果为6
  291.  
  292. int a2 = 128 >> 2;//32;
  293. int a3 = 129 >> 2;//32;
  294. int a5 = -12 >> 1;//-6;
  295. 0000 1100 12
  296. ---------
  297. 1111 0011 取反
  298. ---------
  299. 1111 0100 +1 这个就是-12的二进制形式
  300. ----------
  301. 1111 010 >>1
  302.  
  303. 1111 1010 补位 因为是负数所以补1 这个负数就是最终结果
  304. ---------
  305.  
  306. 0000 0101 取反
  307. ---------
  308. 0000 0110 +1 结果为6 所以上面的最终结果是 -6
  309.  
  310. int a6 = -12 >> 2;//-3;
  311.  
  312. 0000 1100 12
  313. ---------
  314. 1111 0011 取反
  315. ---------
  316. 1111 0100 +1 这个就是-12的二进制形式
  317. ----------
  318. 1111 01 >>2
  319.  
  320. 1111 1101 补位 因为是负数所以补1 这个负数就是最终结果
  321. ---------
  322. 0000 0010 取反
  323. ---------
  324. 0000 0011 +1 结果为3 所以上面的最终结果是 -3
  325.  
  326. >>> : 逻辑右移位运算,也称为不带符号右移位运算。
  327.  
  328. int a1 = 12 >>> 1;//6;
  329. int a2 = -12 >>> 2;//1073741821;
  330.  
  331. 注:
  332. a. 12逻辑右移一位的过程为:舍弃二进制数的最后一位,在二进制数的开头增加一个0;
  333. b. 对-12逻辑右移二位的过程为:舍弃二进制数的最后二位,在二进制数的开头增加二个0;
  334.  
  335. << : 左移位运算,也称为不带符号左移位运算。
  336.  
  337. int a1 = 12 << 1;//24;
  338. int a2 = -12 << 2;//-48;
  339. int a3 = 128 << 2;//512;
  340. int a4 = 129 << 2;//516;
  341.  
  342. 注:
  343. a. 12左移一位的过程为:舍弃二进制数的开头一位,在二进制数的尾部增加一个0;
  344. b. 对-12左移二位的过程为:舍弃二进制数的开头二位,在二进制数的尾部增加二个0;
  345.  
  346. 6)位运算操作符
  347. & 与运算
  348. 1&1->1, 1&0->0, 0&1->0, 0&0->0;
  349. | 或运算
  350. 1|1->1, 1|0->1, 0|1->1, 0|0->0;
  351. ^ 异或运算
  352. 1^1->0, 0^0->01^0->1, 0^1->1;
  353. 相同为0 不同为1
  354. 运算特点: a^0=a; a^a=0;
  355. ~ 取反运算
  356. ~1->0, ~0->1;
  357.  
  358. 7)逻辑操作符
  359. 短路操作符,如果能根据操作左边的布尔表达式就能推算出整个表达式的布尔值,将不执行操作符右边的布尔表达式;
  360.  
  361. 短路与
  362. && 左边的布尔表达式的值为false, 整个表达式值肯定为false, 此时会忽略执行右边的布尔表达式。
  363. false&&true
  364. int a = 1;
  365. int b = 2;
  366. int c = 3;
  367. a>b&&c>b
  368.  
  369. //没有短路功能
  370. a>b&c>b
  371.  
  372. 短路或
  373. || 左边的布尔表达式的值为true, 整个表达式值肯定为true, 此时会忽略执行右边的布尔表达式。
  374.  
  375. 注意:&和&&的区别是什么? |和||的区别是什么?
  376.  
  377. 8)三目运算
  378. 形式:
  379. 布尔表达式 ? 表达式1 : 表达式2;
  380.  
  381. 如果上面布尔表达式的值为true, 就返回表达式1的值, 否则返回表达式2的值。
  382.  
  383. 例如:
  384. int score = 61;
  385. String result = (score>=60?"及格":"不及格");
  386.  
  387. 3.类型转换
  388. 1)基本类型之间的转换
  389. 隐式转换(自动转换)
  390. byte a = 1;
  391. //a是byte类型(8位),b是int类型的(32)
  392. //编译通过,类型自动转换(隐式转换)
  393. int b = a;
  394.  
  395. 特点:小的可以自动转换(隐式转换)为大的,因为无非就是在前面多补几个0而已,不会影响数据值
  396.  
  397. 显式转换
  398. //编译报错,32位的值给8位的变量
  399. int a = 100;
  400. byte b = a;
  401.  
  402. //编译通过
  403. //这时候需要类型强制转换(俗称强转,也就是显式转换)
  404. int a = 100;
  405. byte b = (byte)a;
  406.  
  407. 特点:大的值给小的变量,需要强制转换,但是转换后的结果JVM不会保证还是正确的,因为这是程序员自己的个人行为.
  408.  
  409. 2)引用类型之间的转换
  410. 隐式转换
  411. //编译通过,类型自动转换(隐式转换)
  412. Student s = new Student();
  413. Object o = s;
  414.  
  415. 特点:子类类型的变量可以自动转换(隐式转换)为父类类型
  416.  
  417. 显式转换
  418. //编译通过,运行后也不报错
  419. //因为引用o本来指向的就是Student对象
  420. Object o = new Student();
  421. Student s = (Student)o;
  422.  
  423. //编译通过,运行后报错
  424. //因为o本来指向的时候Teacher对象
  425. //而Teacher类型对象和Student类型没有任何关系
  426. Object o = new Teacher();
  427. Student s = (Student)o;
  428.  
  429. 4.流程控制-if
  430. 程序中if语句的代码块只有满足特定条件的情况下才会被执行.
  431. 1)if语句
  432. if(true|false) {
  433. //执行代码
  434. }
  435.  
  436. 2)if-else语句
  437. if(true|false){
  438. //执行代码1
  439. }else{
  440. //执行代码2
  441. }
  442. 注意:ifelse是一组的,二者有且只有一个会执行
  443.  
  444. 3)if-elseif-else
  445. if(true|false){
  446. //执行代码1
  447. }
  448. else if(true|false){
  449. //执行代码2
  450. }
  451. ....
  452. else{
  453. //执行代码3
  454. }
  455. 注意:以上三个代码块也是一组的,有且只有一个会执行
  456.  
  457. 4)简写形式
  458. 不管是if还是elseif还是else,只要其后面执行的代码"只有一句",那么就可以把大括号去掉,执行效果也是一样的。
  459. 例如:
  460. public void test(int x) {
  461. if(x>10)
  462. System.out.println("参数大于10");
  463. else if(x>5)
  464. System.out.println("参数大于5");
  465. else if(x>0)
  466. System.out.println("参数大于0");
  467. else
  468. System.out.println("参数小于等于0");
  469. }
  470.  
  471. 5)相关例子
  472. 写一个方法实现分时问侯, 如是8点至12点,返回"上午好", 12点至14点,返回"中午好",14点至18点,返回"下午好", 其它时间返回"晚上好"
  473. 注:方法中使用return可以把数据返回给方法的调用者
  474. public String sayHello(int hour) {
  475. String msg;
  476. if(hour >=8 && hour < 12)
  477. msg = "上午好";
  478. else if(hour>=12 && hour <14)
  479. msg = "中午好";
  480. else if(hour>=14 && hour <18)
  481. msg = "下午好";
  482. else
  483. msg = "晚上好";
  484.  
  485. return msg;
  486. }
  487.  
  488. 写一个方法判断某一年是否为闰年
  489. 标准:能被4整除,但不能被100整除;或者能被400整除
  490.  
  491. //返回true表示是闰年,false表示不是闰年
  492. public boolean isLeapYear(int year) {
  493. if((year%4==0 && year%100!=0) || (year%400==0))
  494. return true;
  495. else
  496. return false;
  497. }
  498.  
  499. 5.流程控制-switch
  500. 使用switch语句完成的功能,使用if语句同样也能完成。但是使用if语句完成的功能,使用switch语句却不一定能完成。不过在某些特定的情况下,switch还是有着自己的独特之处。
  501.  
  502. 1)语法
  503. 注意:break关键字表示直接退出整个switch代码块
  504.  
  505. switch(变量) {
  506. case value1:
  507. //执行代码1;
  508. break;
  509. ...
  510. case valueN
  511. //执行代码n;
  512. break;
  513.  
  514. default:
  515. //执行代码;
  516. break;
  517. }
  518.  
  519. 注:switch只能接收byte, short, char或者int类型的变量,如果是JKD1.7那么也可以接收String类型的变量
  520.  
  521. 例如:
  522. int day = 4;
  523. String result;
  524. switch(day) {
  525. case 0:
  526. result = "星期天";
  527. break;
  528. case 1:
  529. result = "星期一";
  530. break;
  531. case 2:
  532. result = "星期二";
  533. break;
  534. case 3:
  535. result = "星期三";
  536. break;
  537. case 4:
  538. result = "星期四";
  539. break;
  540. case 5:
  541. result = "星期五";
  542. break;
  543. case 6:
  544. result = "星期六";
  545. break;
  546. default:
  547. result = "参数有误";
  548. break;
  549. }
  550. System.out.println(day+" : "+result);
  551.  
  552. 2)特殊情况
  553. 如果switch的变量与某个case的值匹配,那么就从这个case中的代码开始执行。假如遇到break,就退出整个switch语句,否则依次执行switch语句中后续的case子句,而且不再检查case的值。
  554.  
  555. 例如:写一个方法,返回指定月份有多少天
  556. public int getLastDay(int year, int month) {
  557. int day = 30;
  558. switch(month) {
  559. case 1:
  560. case 3:
  561. case 5:
  562. case 7:
  563. case 8:
  564. case 10:
  565. case 12:
  566. day=31;
  567. break;
  568. case 2:
  569. day = getLeapYear(year)? 29:28;
  570. }
  571.  
  572. return day;
  573. }
  574. 注意:此处调用的getLeapYear方法就是上面if语句的例子所写的判断一个年份是否是闰年的方法.(在同一个类中,方法之间可以直接调用)
  575.  
  576. 6.循环-for
  577. 语法:
  578. for(<初始化>; <条件表达式>; <增量>) {
  579. //要循环执行的代码
  580. }
  581. 直到某一次增量执行后,条件表达式的值为false则循环结束
  582.  
  583. 执行步骤:
  584. 1.初始化
  585. 2.条件表达式
  586. 2.1 false则退出循环
  587. 2.2 true则执行循环代码
  588. 2.3 执行增量变化
  589. 2.4 判断条件表达式
  590. false则退出循环
  591. true则执行循环代码
  592. ....
  593.  
  594. 例如:
  595. 使用循环打印10hello world
  596. for(int i=0;i<10;i++){
  597. System.out.println("hello world");
  598. }
  599.  
  600. 例如:
  601. 写一个方法,完成计算从1加到100的和
  602. public int sum() {
  603. int result = 0;
  604. for(int i=1;i<=100;i++) {
  605. //result = result + i;
  606. result+=i;
  607. }
  608. return result;
  609. }
  610.  
  611. 例如:
  612. 写一个方法,完成计算从1加到n的和
  613. public int sum(int n) {
  614. int result = 0;
  615. for(int i=1;i<=n;i++) {
  616. result = result + i;
  617. }
  618. return result;
  619. }
  620.  
  621. 注意:for语句一般用在循环次数事先可确定的情况下
  622.  
  623. 7.循环-while
  624. while
  625. 语法:
  626. while(循环条件) {
  627. 循环体
  628. }
  629.  
  630. 当循环条件为true时,就执行循环代码,否则终止循环;
  631.  
  632. 例如:
  633. while循环完成计算从1加到n的和
  634. public int sum(int n) {
  635. int result = 0;
  636. int i=1;
  637. while(i<=n) {
  638. result = result + i;
  639. i++;
  640. }
  641. return result;
  642. }
  643.  
  644. do-while
  645. while非常类似,只不过先执行循环体,然后再判断循环条件.
  646.  
  647. 语法:
  648. do{
  649. 循环体
  650. } while(循环条件);
  651.  
  652. 例如:
  653. do-while循环完成计算从1加到n的和
  654. public int sum(int n) {
  655. int result = 0;
  656. int i = 1;
  657. do {
  658. result = result + i;
  659. i++;
  660. } while(i<=n)
  661. return result;
  662. }
  663.  
  664. 注意:whiledo-while循环用在循环次数事先不可确定的情况下
  665.  
  666. 8.循环的嵌套
  667. 例如:打印出五行每行十个☆
  668. //这个循环可以打出五个换行
  669. for(int i=0;i<5;i++){
  670. System.out.println();
  671. }
  672.  
  673. //这个循环可以连着打印出10个☆
  674. //但是不会换行
  675. //注意print方法和println方法的区别
  676. for(int j=0;j<10;j++){
  677. System.out.print("☆");
  678. }
  679.  
  680. 那么把俩个循环嵌套在一起即可完成功能
  681. for(int i=0;i<5;i++){
  682.  
  683. for(int j=0;j<10;j++){
  684. System.out.print("☆");
  685. }
  686.  
  687. System.out.println();
  688. }
  689.  
  690. 例如:
  691. 往控制台上输出以下内容:
  692. *
  693. **
  694. ***
  695. ****
  696. *****
  697. ******
  698. *******
  699.  
  700. public void print(int n){
  701. for(int i=0;i<n;i++){
  702. for(int j=0;j<i+1;j++){
  703. System.out.print("*");
  704. }
  705. System.out.println();
  706. }
  707. }
  708.  
  709. 9.breakcontinue
  710. 注:breakcontinue一般都是要结合循环使用的(for/while/do-while)
  711. break
  712. 终止当前或指定循环
  713. for(int i=0;i<10;i++){
  714. if(i==3){
  715. break;
  716. }
  717. System.out.println("i = "+i);
  718. }
  719. 输出结果:
  720. i = 0
  721. i = 1
  722. i = 2
  723.  
  724. continue
  725. 跳过本次循环,执行下一次循环
  726. for(int i=0;i<10;i++){
  727. if(i==3){
  728. continue;
  729. }
  730. System.out.println("i = "+i);
  731. }
  732. 输出结果:
  733. i = 0
  734. i = 1
  735. i = 2
  736. i = 4
  737. i = 5
  738. i = 6
  739. i = 7
  740. i = 8
  741. i = 9
  742.  
  743. 10.label标签
  744. 在循环嵌套的时候,使用label可以让break或者continue作用到指定的循环上,否则break或者continue只会默认作用到当前所处的循环上。
  745.  
  746. 例如: 这个break跳出的是当前循环(也就是这里的内循环)
  747. for(int i=0;i<3;i++){
  748.  
  749. for(int j=0;j<5;j++){
  750. if(j==3){
  751. break;
  752. }
  753. System.out.println("j = "+j);
  754. }
  755.  
  756. }
  757. 输出结果:
  758. j = 0
  759. j = 1
  760. j = 2
  761. j = 0
  762. j = 1
  763. j = 2
  764. j = 0
  765. j = 1
  766. j = 2
  767.  
  768. 例如:这个break跳出的是外循环(因为使用了label)
  769. f1:for(int i=0;i<3;i++){
  770.  
  771. for(int j=0;j<5;j++){
  772. if(j==3){
  773. break f1;
  774. }
  775. System.out.println("j = "+j);
  776. }
  777.  
  778. }
  779. 输出结果:
  780. j = 0
  781. j = 1
  782. j = 2

java_day03_流程控制的更多相关文章

  1. 第10章 Shell编程(4)_流程控制

    5. 流程控制 5.1 if语句 (1)格式: 格式1 格式2 多分支if if [ 条件判断式 ];then #程序 else #程序 fi if [ 条件判断式 ] then #程序 else # ...

  2. Shell命令和流程控制

    Shell命令和流程控制 在shell脚本中可以使用三类命令: 1)Unix 命令: 虽然在shell脚本中可以使用任意的unix命令,但是还是由一些相对更常用的命令.这些命令通常是用来进行文件和文字 ...

  3. PHP基础知识之流程控制的替代语法

    PHP 提供了一些流程控制的替代语法,包括 if,while,for,foreach 和 switch. 替代语法的基本形式是把左花括号({)换成冒号(:),把右花括号(})分别换成 endif;,e ...

  4. Python黑帽编程2.4 流程控制

    Python黑帽编程2.4  流程控制 本节要介绍的是Python编程中和流程控制有关的关键字和相关内容. 2.4.1 if …..else 先上一段代码: #!/usr/bin/python # - ...

  5. 使用yield进行异步流程控制

    现状 目前我们对异步回调的解决方案有这么几种:回调,deferred/promise和事件触发.回调的方式自不必说,需要硬编码调用,而且有可能会出现复杂的嵌套关系,造成"回调黑洞" ...

  6. [Java入门笔记] Java语言基础(四):流程控制

    流程控制指的是在程序运行的过程中控制程序运行走向的方式.主要分为以下几种: 顺序结构 顺序结构,顾名思义,是指程序从上往下逐步顺序执行.中间没有任何的判断和跳转. 分支结构 Java提供两种分支结构: ...

  7. node基础13:异步流程控制

    1.流程控制 因为在node中大部分的api都是异步的,比如说读取文件,如果采用回调函数的形式,很容易造成地狱回调,代码非常不容易进行维护. 因此,为了解决这个问题,有大神写了async这个中间件.极 ...

  8. Shell入门教程:流程控制(1)命令的结束状态

    在Bash Shell中,流程控制命令有2大类:“条件”.“循环”.属于“条件”的有:if.case:属于“循环”的有:for.while.until:命令 select 既属于“条件”,也属于“循环 ...

  9. Oracle中PL/SQL的执行部分和各种流程控制

    Oracle中PL/SQL的执行部分和异常部分 一.PL/SQL的执行部分. 赋值语句. 赋值语句分两种,一种是定义一个变量,然后接收用户的IO赋值:另一种是通过SQL查询结果赋值. 用户赋值举例: ...

随机推荐

  1. WebServer_简单例子

    #-*-coding:utf-8-*- importwebimportjson urls=("/.*","index")app=web.application( ...

  2. php上传文件夹 ​

    用过浏览器的开发人员都对大文件上传与下载比较困扰,之前遇到了一个php文件夹上传下载的问题,无奈之下自己开发了一套文件上传控件,在这里分享一下.希望能对你有所帮助. 以下是实例的部分脚本文件与代码: ...

  3. three.js后期之自定义shader通道实现扫光效果

    如果你还不知道如何在three.js中添加后期渲染通道,请先看一下官方的一个最简单的demo : github. 正如demo中所示的那样,我们的扫光效果,也是一个自定义的ShaderPass. 所以 ...

  4. URLSearch​Params的注意事项(个人总结)

    官网解释:URLSearchParams 接口定义了一些实用的方法来处理 URL 的查询字符串,一些方法的使用. 前天测试说 有些功能在ie实现不了,顺便把报错发我了:URLSearchParams  ...

  5. lua学习笔记1--基础语法

    print("打印日志");--单行注释 --[[ 多行注释 --]] a = --变量的类型,是由变量储存的数据决定 数据类型: number:数值类型,可以存储整数和小数 bo ...

  6. LeetCode.1175-质数排列(Prime Arrangements)

    这是小川的第413次更新,第446篇原创 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第264题(顺位题号是1175).返回1到n的排列数,以使质数处于质数索引(索引从1开始).(请 ...

  7. [Comet OJ - Contest #4 D][39D 1584]求和_"数位dp"

    求和 题目大意: 数据范围: 题解: 脑筋急转弯可还行..... 我们发现只需要最后枚举个位/xk/xk 因为前面的贡献都是确定的了. 故此我们最后暴力统计一下就好咯. 不知道为啥我组合数一直过不去, ...

  8. 【转帖】Windows与Linux系统下的库介绍

    Windows与Linux系统下的库介绍 http://embeddedlinux.org.cn/emb-linux/entry-level/200903/12-553.html 库的定义 库文件是一 ...

  9. [转帖]图说Docker架构的各种信息

    图说Docker架构的各种信息 2018-07-18 15:16:04作者:linux人稿源:运维之美   https://ywnz.com/linuxyffq/2344.html 介绍Docker架 ...

  10. firewall-cmd 的简单使用 进行端口转发的使用

    今天本来想用 ssh 做端口转发 但是命令死活想不起来了.. 没办法改用firewall-cmd 来进行处理 方法: 1. 首先不能关防火墙 systemctl enable firewalld sy ...