经常使用的格式
初始化语句;
while(条件表达式){
循环体语句 ;
控制体语句或者步长语句;
} 执行流程:
首先,先初始化语句,对变量赋值;
执行条件表达式,是否成立;成立,则执行循环体语句,依次控制体语句进行变量控制
--->再次判断条件表达式是否成立,成立,执行循环体语句--->控制体语句进行变量控制
...
...
当条件表达式不成立,while循环结束;
注意事项:控制体语句不要忘了,否则死循环; 3.do...while语句 do-while 引入两个死循环 :一定要出口条件 for(;;){ 循环体; } 4.for循环的综合运用(for循环嵌套) for(初始化语句1;条件中表达式1;控制体语句1){ //外层循环 // 循环体语句又是一个for循环for(初始化语句2;条件表达式2;控制体语句2){//内层循环 循环体语句... } } 5.死循环 死循环的两种格式 第一个格式 for(;;){ 循环体语句; } 第二个格式:while(true){ //死循环格式中使用比较多 循环体语句; } 二,跳转控制语句 break ; looper循环或者switch中用 (中断,结束...) continue:继续 (循环中用,结束当期循环之后,立即进入下一次循环了) return ; // 结束方法用的 (很少单独使用, 引入 --Java中的方法(函数)) 三,switch语句 格式: switch(表达式或者某个变量值) { case 值 1: 语句1; break ; case 值2: 语句2: break ; ... default: 语句n; break ; } 执行流程 switch接收结果, 1)接收的结果和case后面的值1进行对比,成立,执行语句 1,break 结束语句; 2)值1和switch接收的结果不匹配,和值2进行比较,成立,执 行语句2, break,结束语句;* 3)... 如果上面case都不匹配,执行default语句,语句n,break ,结 束 注意事项: switch语句中的注意事项也是 (考点) 1)关于switch中的case语句后面只能常量,不能是变量 (体现Java是一种强类型语言) ----前端的javascript:它里面的swtich的case是可以是变量,可是个常量 2)在书写switch语句的标准结构,不忘了break,如果语句中忘了书写break,会出现一个现象:case穿透! 在有的需求里面利用 case穿透 来完成一些需求; 3)关于switch语句的结束条件 a)要么遇见break结束 b)程序默认执行到末尾 4)关于default语句可以在switch语句中的任何位置,不影响语句的执行流程; 不管在任何位置,只要case语句都不匹配,执行default; 如果default语句的末尾,break可以省略; 补充: Math的随机数使用 jdk提供了类:java.lang.Math java.lang包下的类不需要导包 针对数学运算的工具类,提供了很多的方法; 获取伪随机数,取值范围:[0.0,1.0) public static double random(): 快速使用: Math.random()---获取一个随机数 四,方法的定义格式
1)有具体返回值类型的方法定义和调用
有具体返回值方法的定义格式 固定写法: public static 返回值类型 方法名(形式参数类型1 参数名1,形式参数类型2 参 数名2,....){ //完成功能业务逻辑 ... return 具体结果; 有具体返回值类型的方法的调用格式 在main方中 赋值调用 接收的结果类型 变量名 = 方法名(实际参数1,实际参数2,...) ; 实际参数:直接赋值或者main中键盘录入 2) 没有具体返回值类型的方法定义和调用 定义格式: public static void 方法名(形式参数类型1 参数名称1,形式参数类型2 参数 名2,....){ 调用格式 单独调用 举例 public static void getMax(int a,int b){ //完成逻辑判断 //举例 if(a>b){ System.out.println(a+"是最大值"); }else{ System.out.println(b+"是最大值"); } } 需求: 完成如下一个操作 键盘录入一个数据n,n为int类型 控制台输出 nn乘法表 public class FunctionDemo { public static void main(String[] args) { //创建键盘录入对象 Scanner sc = new Scanner(System.in) ; //提示并录入数据System.out.println("请输入一个数据(1-9):"); int num = sc.nextInt() ; //没有使用方法之前 //为了保证有数据从1开始 for(int x = 1 ;x<=num;x++) { //外层控制行数 for(int y =1 ; y <=x ;y++){ //内层循环控制列数, 列数随着行数的变化 第一行,1列,第二行,2列.... System.out.print(x+"*"+y+"="+(y*x) +"t"); //不换行 } System.out.println(); //换行 } System.out.println("------------------------------------------------- -"); //1)单独调用 // printNN(num); //8 //2)输出调用 //System.out.println(printNN(num)); //本身这个方法中就是输出给控制台, 输出语句套输出 :语法错误 // 3)赋值调用 //Void v = printNN(num) ; 错误的 这是void只是定义的方法格式,没有这个 类型 } //定义一个方法来完成上面的操作 定义 方法两个明确 1)明确返回值类型: java提供关键字 void 2)明确参数类型以及参数个数 int类型 1个参数 public static void printNN(int n){//8 for(int x = 1 ;x<=n;x++) { //外层控制行数 for(int y =1 ; y <=x ;y++){ //内层循环控制列数,列数随着行数的变化 第一行,1列,第二行,2列.... System.out.print(x+"*"+y+"="+(y*x) +"t"); //不换行 } System.out.println(); //换行 } }} 3)方法重载 方法重载:为了某个功能扩展性,多个方法方法名可以相同(完全相同),参数列表不同,与 返回值无关 参数列表不同 1)参数个数不同 2)参数类型不同 3)考虑参数类型的顺序 五,数组 Java中数组就是容器,这个容器 "只能存储同一种类型的元素" 在数组中定义格式 动态初始化和静态初始化 动态初始化:自己定义数组的长度,数组的元素有系统(jvm)默认分配 格式: 数据类型[] 数组名称 = new 数据类型[数组长度] ; 推荐第一种 数据类型 数组名称[] = new 数据类型[数组长度] ; 举例 int[] arr = new int[3] ; int arr[] = new int[3] ; 所有的数组有一个特点:数组名称[角标或者索引值]:访问数组的元素 ,角标值/索引值从 0开始计算 静态初始化:直接我们自己给定的了元素内容,数组的长度由系统默认分配* 原生的格式写法: 数据类型[] 数组对象名 = new 数据类型[]{元素1,元素2,元素3.....} ; 数据类型 数组对象名[] = new 数据类型[]{元素1,元素2,元素3.....} ; 举例 int[] arr = new int[]{1,2,3} ; int arr[] = new int[]{1,2,3} ; 静态初始化的简写格式 数据类型[] 数组对象名 = {元素1,元素2,元素3.....} ; 推荐的写法 数据类型 数组对象名[] = {元素1,元素2,元素3.....} ; int[] arr = {1,2,3} ; int arr[] = {1,2,3} ; 注: 在数组中有一个特有的属性:length 数组名称.length:获取数组长度 数组中的最大索引值: 数组名称.length-1 java.lang.ArrayIndexOutOfBoundsException:数组角标越界异常 :访问了数组中的不 存在的索引就会出现这种问题; 异常:Exception 编译时期异常:idea写代码的,编译通过不了,无法运行; 语法有问题; 运行时期异常: 开发者在编写代码的时候,大部分逻辑性不严谨,比如: 数组的5个元素,角标最大4,你访问角标51)最值问题:最大值
数组元素查表法 :通过数组名称[索引值]确定元素 基本元素查询:查询数组中某个元素的角标值 int[] arr = {87,56,13,24,17}; 弊端: 每次查询元素的时候,都是从头查到尾 高级数组中的元素:二分搜索法(折半查询) :高级查询算法2)冒泡排序
冒泡排序:
两两比较,将较大的值往后放,第一次比较完毕,最大值出现在最大索引处;
依次这样比较,可以得到排好序的数组;
规律
1)两两比较,将较大的值往后放,
2)第一次有0个不比
第二次有1个不比
....
每次比较,就会减少一次比较
比较的次数:数组长度-1次
属性:姓名,年龄,性别...
行为:学习,玩游戏,抽烟...
具体的学生: ---- 描述具体的学生事物----代码中体现创建这个类对象:创建具体的对象的格式
类名 对象名 = new 类名();
张三,20,男 对象名.成员变量名 = 赋值;//成员变量赋值
学习JavaEE 对象名.成员方法名(); //调用成员
使用面向对象方式描述这个学生事物 --定义一个类, 类Java中最基本单元 测试类: 里面就主方法main
具体的学生: ---- 描述具体的学生事物----代码中体现创建这个类对象:创建具体的对象的格式
类名 对象名 = new 类名();
张三,20,男 对象名.成员变量名 = 赋值;//成员变量赋值
学习JavaEE 对象名.成员方法名(); //调用成员方法 七,封装 以后:描述事务的时候,需要定义类,类中的所有的成员变量(现实世界事物的属性) ,必须都是私有化private; 封装: 就是将显示世界事物的属性隐藏了(加入一个关键字private),私有的,无法直接访问的,对外数据的安 全性!(外界不能访问的)对外提供一个方法,公共的(public)访问方法(setXXX()/getXXX()) 注意事项: 以后在书写的代码的时候,写一个类,描述真是存在事物的属性的时候,需要属性(英文单词字母全部 小写)全部加入private 面试题:
private关键字的特点?
1)被private修饰的成员变量以及成员方法只能在本类中访问
2)可以修饰成员变量也可以成员方法,就是为了外界不能直接访问
3)被private修饰的成员变量/成员方法可以间接的通过通过的方法访问;



