while(执行条件){ 循环体; }
do{ 循环体; }while(执行条件);
for(初始条件;判断条件;改变条件){ 执行循环语句 }
for、while、do …while区别
简介:数组Array,标志是[ ] ,用于储存多个相同类型数据的集合
想要获取数组中的元素值,可以通过脚标(下标)来获取
数组下标是从0开始的,下标的最大值是数组的长度减1
动态初始化:
int[]a=new int[5]; a[0]=1; a[1]=2; a[2]=3; a[3]=4; a[4]=5;
静态初始化
int[] b={1,2,3,4,5}; int[] c=new int[]{1,2,3,4,5};
注意:数组名保存的是数组的地址值,不是数组中的每一个元素,数组名是一个引用类型的变量
使用.length来体现,数组一旦创建,长度不可改变
注:
若仅仅需要查看,使用Arrays.toString打印出即可
遍历即把数组中的元素均过一遍
通过循环遍历数组,所以循环中循环变量代表的就是数组的下标
排序算法的一种,每一轮比较均得出一个最大值
其他算法:二分查找、快速排序、全排序、归并排序
排序思路
1.多轮比较,若果有n个数,比较n-1轮
2.相邻位置比大小,进行互换
注意:前面轮中的最大值,不需要参与本轮比较
3.嵌套for循环完成
外层循环变量代表轮数【数组长度-1】
内层循环变量代表数组下标【轮数往后,比较次数减少,j随着i的增大而减小】
4.优化思路
可对其进行优化,优化后的算法,对于后续比较前者小于后者的不需要执行互换代码,提升效率。具体方案参见如下代码
package example; import java.util.Arrays; public class BubbleSort { public static void main(String[] args) { int[] a = {12, 77, 11, 56, 34}; // 数组排序Arrays.sort // Arrays.sort(a); // System.out.println(Arrays.toString(a)); method(a);//冒泡排序方法原理 } private static void method(int[] a) { for (int i = 1; i <= a.length - 1; i++) { boolean flag = false; System.out.println("第" + i + "轮"); for (int j = 0; j < a.length - i; j++) { if (a[j] > a[j + 1]) { int t; t = a[j]; a[j] = a[j + 1]; a[j + 1] = t; flag = true; } } if (flag == false) { break; } System.out.println("第" + i + "轮排序后的效果:" + Arrays.toString(a)); } System.out.println("排序完成后的数组" + Arrays.toString(a)); } }
面向过程是一种编程思想,这种思想强调过程
java是一门面向对象的语言
面向对象oop也是一种编程思想,这种思想强调的是结果,其过程是怎么样的并不重要。
类指的是类型type,用java中的关键字class描述,一类事物抽象的特征与行为
可以把类看做是一类事物的模板/图纸
对象就是根据类创建出来的一个个独立的具体事例
一个类可以创建多个对象,对象之间互不影响,可以通过对象唯一的地址来区分对象。
比如:Phone p=new Phone() ; 这句话在内存中发生了什么?
特点:没有返回值类型,且方法名与本类类名一致
作用:构造方法用来创建对象,每次触发,都可以创建一个对应的对象
执行顺序:构造代码块 >构造方法>对象创建成功>普通方法>局部代码块
1.当创建对象时,会触发构造函数
2.创建对象时,会触发构造代码块,而且构造代码块优先于构造方法执行的
3.通过创建好的对象来调用普通的方法
4.如果调用的普通方法里有局部代码块,对应的局部代码块才会执行
This代表的是本类,主要作用有两个
如果父类的成员变量与子类变量同名,使用super.变量名指定父类的成员变量
重写:子类对父类的方法不满意时,可以重写父类的方法,对其功能做修改
重写的语法规则:两同 两小 一大
1. 一大:子类方法的修饰符权限>=父类方法的修饰权限
2. 两同:方法名相同,参数列表相同
3. 两小:子类方法的返回值类型<=父类方法的返回值类型
子类方法抛出的异常类型<=父类方法抛出的异常类型
注意:如果父类方法的返回值类型为void,那么子类方法的返回值类型也是void
注意:我们这里说的返回值的类型大小,不是值得大小,而是 继承关系
如果在同一个类中,存在多个重名的方法,单参数列表不同的现象
作用:重载使我们的代码更灵活,传入不同的参数,都可以有不同的方法被调用
注意:方法是否勾成重载,与方法参数的类型有关,与方法的名字无关
前提:同一个类中,同名的方法,
1.方法的参数个数不同,一定勾成重载
2.方法的参数个数相同,需要查看相应对应位置的类型
重载:在一个类中的现象:同一个类中,存在方法名相同,参数列表不同的方法。
重载意义:是为了外界调用时的方便,不管传入什么样的参数,都可以匹配到对应同名的方法
重写:指建立了继承关系以后,子类对父类的方法不满意,可以重写,遵循两同两小一大原则
重写的意义:在不修改源代码的情况下,进行功能的修改与拓展(OCP原则:面向修改时关闭,面向拓展时开放)
fina表示最终,用来修饰的类为最终类,不可被继承;用来修饰的方法为最终实现,不可重写;用来修饰的常量,值不可被修改,常量定义时必须赋值。
被static修饰的资源称为静态资源,可以修饰变量,方法,代码块。
格式:static{ }
位置:类里方法外
执行时机:随着类的加载而加载,优先于对象进行加载,并且只加载一次
作用:用于加载那些需要在第一时间就加载,并且只能加载一次的资源,常用来初始化
顺序:静态代码块—构造代码块—构造方法—普通方法—局部代码块
注意:如果有多个静态资源,加载顺序取决于先后位置; 静态资源不可以与this和super共用
注意:多态对象把自己看做是父类类型
成员变量: 使用的是父类的
成员方法: 由于存在重写现象,所以使用的是子类的
静态成员: 随着类的加载而加载,谁调用就返回谁的
异常处理只有两种方式: catch 和 throws,所以必须二选一
try {
…
} catch(Exception e) {
}
底层异常,应该向前抛出处理
throws 异常类型
经验少时,不知道该在什么位置捕获处理,应该选择 throws
例如:void method1 throws Exception1,Exception2,Exception3{ }
注:abstract关键字在抽象类中和以下关键字共同使用时是没有意义的: