选择结构
if
if(){ }else if(){ }else{ } if(){ if(){ } }
switch
switch(expression){ case value: break; case value: break; default : }
从JavaSE7开始表达式结果可以是字符串
循环结构
while
while(){ }
大多数情况是会让循环停止下来的,我们需要一个让表达式失效的方法来结束循环
少部分情况需要循环一直执行,比如服务器的请求响应监听等
do-while
do{ }while();
do-while循环和while循环相似,不同的是,do-while循环至少执行一次
for
for循环语句是支持迭代的一种通用结构,是最有效、最灵活的循环结构
for( ; ; ){ }
增强for循环
for(声明语句:表达式){ }
int[] numbers = {10,20,30,40,50}; for(int x:numbers){ System.out.println(x); }
break continue
break用于强行退出循环,不执行循环中剩余的语句(break也在switch语句中使用)
continue 用于终止某次循环过程,即跳过循环体中尚未执行的语句,接着进行下一次是否执行循环的判定
Java方法
-
方法是语句的集合,他们在一起执行一个功能
-
方法是解决一类问题的步骤的有序组合
-
方法包含于类或对象中
-
方法在程序中被创建,在其他地方被引用
-
设计方法的原则:一个方法只完成1个功能,这样利于我们后期的扩展
方法的定义
-
方法包含一个方法头和一个方法体
-
修饰符:可选
-
返回值类型:方法可能会返回值,没有返回值时returnValueType是关键字void
-
方法名:是方法的实际名称。方法名和参数表共同构成方法签名
-
参数列表:参数像是一个占位符。当方法被调用时,传递值给参数。这个值被称为实参或变量。参数列表是指方法的参数类型、顺序和参数的个数。参数是可选的,方法可以不包含任何参数
-
形式参数:在方法被调用时用于接收外界输入的参数
-
实参:调用方法时实际传给方法的数据
-
-
方法体:方法体包含具体的语句,定义该方法的功能
-
方法的调用
调用方法:对象名.方法名(实参列表)
当方法返回一个值的时候,方法调用通常被当做一个值
当方法返回值时void,方法调用一定是一条语句
方法的重载
-
方法名称必须相同
-
参数列表必须不同
-
方法的返回类型可以相同也可以不相同
-
仅仅返回类型不同不足以成为方法的重载
可变参数
在方法的声明中,在指定参数类型后加一个省略号
一个方法中只能指定一个可变参数,它必须是方法的最后一个参数。任何普通的参数必须在它之前声明
递归
递归结构包括两个部分
-
递归头:什么时候不调用自身方法,如果没有头,将陷入死循环
-
递归体:什么时候需要调用自身方法
数组
-
数组是相同类型数据的有序集合
-
数组描述的是相同类型的若干个数据,按照一定的先后次序排列组合而成
-
其中,每一个数据称作一个数组元素,每个数组元素可以通过一个下标来访问它们
声明数组
必须先声明数组变量
dataType[] arrayRefVar;//首选 dataType arrayRefVar[]; dataType[] arryaRefVar = new dataType[arraySize];
数组的元素是通过索引访问的,数组索引从0开始
获取数组长度:arrays.length
静态初始化
int[] a = {1,2,3}; Man[] mans = {new Man(1,1),new Man2(2,2)};
动态初始化
int[] a = new int[2]; a[0] = 1; a[1] = 2;
数组的默认初始化
数组是引用类型,它的元素相当于类的实例变量,因此数组一经分配空间,其中的每个元素也被按照实例变量同样的方法被因事初始化
内存分析
堆:存放new的对象和数组;可以被所有的线程共享,不会存放别的对象引用
栈:存放基本变量类型(会包含这个基本类型的具体数值);引用对象的变量(会存放这个引用在堆里面的具体地址)
方法区:可以被所有的线程共享;包含了所有class和static变量