java 基础 流程控制
2014-04-07 10:09
316 查看
鄙人不才,基础不好,趁着闲时简单学习一下,仅作学习分享,如有不正确地方还请各位看客不吝指出。
Java流程主要可以分为:
顺序(可以按照正常顺序一步步往下运行的)
选择(三元操作符[?:];if else;switch)
循环(for;while;do while;)
控制(break;continue;)
顺序流程没啥好说的,代码没问题的话一般都可以按顺序运行
选择流程中
1.之前在论坛中有看的别人说三元操作符不会进行短路操作,这个说法其实是错误的
例如
2.为什么有了三元操作符还要有ifelse呢?有人说三元操作符不能嵌套,这个显然是不正确。
上面的例子第二行改成.
也是可以正常运行的。可是这样做程序的可读性就很差了。个人认为ifelse主要是为了提高程序可读性存在的。
3.效率方面,直接写程序观察运行时间是不靠谱的,这与你电脑运行时环境关系很大。但是我们可以用javap进行反编译进行查看的
首先运行 javac Test.java进行编译,然后运行javap -c Test 进行反编译。 得到如下结果
同样的方法测试ifelse
反编译后
可以发现ifelse比三元操作符多一行,这个只是对j赋值时多出的一步操作,如果不计算jvm加载class文件的时间,ifelse 和三元操作是没有任何效率差别的。
4.关于switch要点
a.匹配类型包括 byte、short、char、int、enum[jdk1.5]、String[jdk1.7]
b.根据需求,不要丢掉必要的break
循环流程
1.如何选用循环?
a.for循环用来处理已知循环次数的需求
b.while循环用来处理已知循环终止条件的需求
c.do while循环用来处理在判断是否终止前必须运行一次的需求
2.注意事项
a.小心死循环
b.小心起始和结束条件是否包含
c.注意平衡时间复杂度和物理复杂度(尤其是面试时的那些排序算法)
3.关于jdk5 加入的新特性foreach
要想使用foreach的对象必须实现Comparable接口
控制流程
流程控制break;(终止当前所在循环,只能中的一层循环),continue;(从此处中断,开始下一次循环)
break和contine配合标签使用
break 标签; continue 标签;
使用方法和前面说的类似,但是不仅限于当前循环,而是从标签处进行处理
简单用法示例
流程控制差不多就这些,没有提到的地方可以回复补充。
Java流程主要可以分为:
顺序(可以按照正常顺序一步步往下运行的)
选择(三元操作符[?:];if else;switch)
循环(for;while;do while;)
控制(break;continue;)
顺序流程没啥好说的,代码没问题的话一般都可以按顺序运行
选择流程中
1.之前在论坛中有看的别人说三元操作符不会进行短路操作,这个说法其实是错误的
例如
int i = 1; int j = i==2 && ++i == 2?1:2; System.out.println(i); System.out.println(j);
2.为什么有了三元操作符还要有ifelse呢?有人说三元操作符不能嵌套,这个显然是不正确。
上面的例子第二行改成.
int j = i==2 && ++i == 2?1:(i>3?3:2);
也是可以正常运行的。可是这样做程序的可读性就很差了。个人认为ifelse主要是为了提高程序可读性存在的。
3.效率方面,直接写程序观察运行时间是不靠谱的,这与你电脑运行时环境关系很大。但是我们可以用javap进行反编译进行查看的
public class Test{ public void test() { int i = 1; int j; j = i==1?1:2; } }
首先运行 javac Test.java进行编译,然后运行javap -c Test 进行反编译。 得到如下结果
Compiled from "Test.java" public class Test { public Test(); Code: 0: aload_0 1: invokespecial #1 // Method java/lang/Object."<init>": ()V 4: return public void test(); Code: 0: iconst_1 1: istore_1 2: iload_1 3: iconst_1 4: if_icmpne 11 7: iconst_1 8: goto 12 11: iconst_2 12: istore_2 13: return }
同样的方法测试ifelse
public class Test{ public void test() { int i = 1; int j; if (i==1) { j = 1; } else { j = 2; } } }
反编译后
Compiled from "Test.java" public class Test { public Test(); Code: 0: aload_0 1: invokespecial #1 // Method java/lang/Object."<init>": ()V 4: return public void test(); Code: 0: iconst_1 1: istore_1 2: iload_1 3: iconst_1 4: if_icmpne 12 7: iconst_1 8: istore_2 9: goto 14 12: iconst_2 13: istore_2 14: return }
可以发现ifelse比三元操作符多一行,这个只是对j赋值时多出的一步操作,如果不计算jvm加载class文件的时间,ifelse 和三元操作是没有任何效率差别的。
4.关于switch要点
a.匹配类型包括 byte、short、char、int、enum[jdk1.5]、String[jdk1.7]
b.根据需求,不要丢掉必要的break
循环流程
1.如何选用循环?
a.for循环用来处理已知循环次数的需求
b.while循环用来处理已知循环终止条件的需求
c.do while循环用来处理在判断是否终止前必须运行一次的需求
2.注意事项
a.小心死循环
b.小心起始和结束条件是否包含
c.注意平衡时间复杂度和物理复杂度(尤其是面试时的那些排序算法)
3.关于jdk5 加入的新特性foreach
要想使用foreach的对象必须实现Comparable接口
控制流程
流程控制break;(终止当前所在循环,只能中的一层循环),continue;(从此处中断,开始下一次循环)
break和contine配合标签使用
break 标签; continue 标签;
使用方法和前面说的类似,但是不仅限于当前循环,而是从标签处进行处理
简单用法示例
public class BaseType { public static void main(String[] args) { int count = 0; for(int i = 0; i<100;i++) { breaker: for(int j = 0;j<100;j++) { for(int k = 0;k<100;k++) { count++; if (k>50) { break breaker; } } } } System.out.println(count ); } }
流程控制差不多就这些,没有提到的地方可以回复补充。
相关文章推荐
- java导出excel
- 《Java Concurrency in Practice》之发布(Publication)和逸出(escape)
- java操作Excel示例
- 在eclipse导入Java 的jar包的方法
- java中OOA,OOT, OOP, OOD, OOSM,OOM英文表示的含义是什么?
- Struts2 -- 标签库的使用
- Struts2用token防止表单数据重复提交
- javaWeb之在例子中学习(过滤器Filter)
- 二叉堆(三)之 Java的实现
- java获取ip地址示例
- JavaFx系列(二) Thread顯示進度窗的對話框
- JavaFx系列(一) Dialog中的Diolog置頂
- java API 文档的学习
- java web 监听器详解
- 区别:JDK,JRE,JVM,JIT
- Java初探
- spring MVC配置详解
- 【JAVA学习】Java中迭代器Iterator遍历的两种用法
- Spring源码学习一_下载Spring项目源码并编译为Eclipse
- 【JAVA学习】Iterator迭代器导致的java.util.NoSuchElementException原因与解决方法