复习
数组
作用:存储一组数据类型相同的数据
特点:
1.长度不可变
2.存储的数据类型一致
名词:
长度:数组中存储的数据个数
下标(索引):数据在数组中的位置,从0开始到长度减一结束
元素:数组中存储的数据
使用步骤
1.声明 语法: 数据类型[] 数组名; 如: int[] strs; String[] jj; Student[] aa; 2.创建 静态创建 声明与创建同时进行,不能分开 语法: 数据类型[] 数组名 = {值1,值2,...}; 动态创建 带值: 数组名 = new 数据类型[]{值1,值2,...}; 不带值: 数组名 = new 数据类型[长度]; 有默认值,基本数据类型默认为0,引用数据类型默认为null 3.使用 修改 修改指定位置的数据 数组名[下标] = 值; 查询 查询数组长度 数组名.length 查询指定位置的数据 数组名[下标];
特殊情况
1.遍历 使用普通for循环 使用foreach(增强for循环) 语法: for(数据类型 变量名:要遍历的数组名或集合){ } 2.复制 步骤: 1.创建一个新数组 2.遍历老数组 3.将老数组中的数据逐个赋值给新数组对应的位置 3.扩容 步骤: 1.创建一个新数组 2.遍历老数组 3.将老数组中的数据逐个赋值给新数组对应的位置 4.将新数组赋值给老数组二维数组
概念:将一维数组作为元素存储的数组 长度:二维数组中存储的一维数组的个数 使用步骤: 1.声明 数据类型[][] 数组名; 2.创建 静态 数组名 = { {...}, {...}, ... }; 动态 带值 数组名 = new 数据类型[][]{ {..}, {..}, .. }; 不带值 数组名 = new 数据类型[x][y]; x:存储的一维数组的个数,必填 y:一维数组中存储元素的个数,可选 3.使用数组与方法的结合
1.将数组作为形参 优点:解决了方法形参长度固定的问题 2.将数组作为返回值 优点:可以是方法返回多个数据
可变参数
作用:可以给方法中传入不定长个的数据 语法:数据类型... 变量名 位置:形参列表的末尾 注意:一个方法只能使用一个 语法中的...就是三个点
算法
作用:提高执行效率
评判标准
时间复杂度 空间复杂度常用算法
两数交换位置 寻找最值 寻找最值下标 排序 冒泡排序 选择排序 JDK提供的排序 查找 顺序查找 二分查找 杨辉三角
编程思想
面相过程
思想:只考虑事物的发展顺序
面相对象
思想:先考虑事物中存在哪些对象,在建立对象与对象之间的关系
类与对象
对象
概念: 生活中:真实存在的事物 代码中:在代码中真实存在的事物
类
概念:多个对象抽取其共同点形成的概念
类与对象的关系
先有类,后有对象 一个类可以创建多个对象 多个对象可以属于同一个类
类的定义
访问权限修饰符 class 类名{ }
类的组成
属性
作用:描述事物的静态特征 定义位置:类中,方法外 别名:全局变量,成员变量 语法: 访问权限修饰符 数据类型 属性名; 注意: 1.一个类中可以定义多个属性 2.多个属性名不能相同方法
作用:描述事物的动态特征(行为) 定义位置:类中,方法外 别名:函数,成员函数,成员方法 语法: 访问权限修饰符 修饰符 返回值类型 方法名(形参列表){ 方法体 } 注意: 修饰符可有可无 一个类中不能出现两个或两个以上方法名相同,形参列表也相同的方法构造函数
作用:创建该类对象 定义位置:类中,方法外 别名:构造方法 语法: 访问权限修饰符 构造函数名(形参列表){ 方法体 } 注意: 1.构造函数名必须与类名一致 2.使用new关键字调用 this,super也可调用,只能在构造函数中,new会开辟空间,this,super不会 3.如果一个类中没有构造函数,系统会默认提供一个无参构造函数 4.如果类中有构造函数,系统不会提供构造函数
对象的创建
语法: 数据类型 对象名 = new 构造函数(实参列表); 执行步骤: 1.使用new关键字在堆内存开辟一片空间 2.给属性赋初值 3.执行构造函数中的代码 4.将堆地址赋值给栈中的引用
对象的使用
使用属性 获取属性值 对象名.属性名 修改属性值 对象名.属性名 = 值; 调用方法 对象名.方法名(实参列表);
this
含义:谁调用this所在的方法,this就代表谁
场景1:当局部变量名与属性名重名时,用this区分 this.变量名 属性 变量名 局部变量
场景2:在本类中使用本类的其他属性或方法,此时可省略this不写
场景3:在构造函数中调用本类其他构造函数 语法: this(实参列表); 注意: 1.必须在构造函数第一行 2.不能形成递归
三大特征
封装
思想:包装一段代码
优点:
1.提高复用率 2.降低耦合度 3.方便使用,保护内部java中的封装
变量:封装这个值 方法:封装这一段代码 类:封装这个属性与方法 对象:封装着多个属性 项目:封装着整个项目的所有文件 包:封装着多个java文件 ...包
本质:文件夹 作用:对java文件进行分类存储 创建: 选择src 点击鼠标右键 选择new 选择package 填写包名 关键字:package导包
何时导包:在当前java文件中,使用其他包下的java文件,需要导包 关键字:import 位置:类上包下访问权限修饰符
作用:限制其修饰的内容的使用范围 public 公共的 当前项目中 protected 受保护的 当前包中或继承关系中 不写 默认的 当前包中 private 私有的 当前类中经验
1.私有化所有属性 2.使用public修饰所有的方法 3.提供公共的get与set方法编写类步骤
1.私有化所有属性 2.编写无参构造和全参构造 3.提供公共的get与set方法 4.编写特有方法
继承
作用:子类将拥有父类的所有属性与方法,构造函数除外
语法:
访问权限修饰符 class 子类名 extends 父类名{ 属性 构造函数 方法 } 注意: 1.一个类只能有一个直接父类 2.一个类如果没有明确的继承关系,默认继承object 3.object是所有类的父类super
概念:谁调用super所在的方法,super就表示谁的父类对象 使用场景: 1.当子类重写父类方法,在子类中区分 super.方法名(实参列表) 父类提供的 方法名(实参列表) 子类重写后的方法 2.当子类属性名与父类属性名相同时,用于区分 super.属性名 父类提供的 属性名 子类定义的 3.子类构造函数中必须调用父类的构造函数,如果子类构造函数中没有写,默认调用父类无参构造 super(实参列表); 写在子类构造函数第一行
多态
概念:一个事物的多种形态
物的多种形态
子类对象转换为父类对象 语法: 父类名 对象名 = 子类对象; 自动转换 父类对象转换为子类对象 语法: 子类名 对象名 = (子类名)父类对象; 有风险 instanceof关键字 作用:判断该对象是否属于该类 语法: 对象名 instanceof 类名事的多种形态
重载 要求:同一类中,方法名相同,形参列表不同 重写 要求: 继承关系中,子类方法与父类方法 方法名相同 形参列表相同 返回值类型相同 子类访问权限修饰符不能小于父类 注意: 子类重写父类方法后,子类对象转换为父类对象,使用该父类对象调用重写的方法依据执行的是子类重写后的方法
今日
三大修饰符
abstract
含义:抽象的,不可描述的
可以修饰:类和方法
修饰类
特点:不能直接创建对象 语法: 访问权限修饰符 abstract class 类名{ } 也被叫做抽象类 抽象类中不一定有抽象方法 子类继承抽象类,要么重写父类所有抽象方法,要么自己也是抽象类修饰方法
特点:没有方法体 语法: 访问权限修饰符 abstract 返回值类型 方法名(形参列表); 注意: 抽象方法一定写在抽象类中 抽象类中可以有多个抽象方法
final
含义:最终的,不可修改的
可以修饰:变量,方法,类
修饰变量
修饰局部变量 语法: final 数据类型 变量名 = 值; 注意: 只能赋值一次 final修饰的变量就是常亮 修饰成员变量 语法: 访问权限修饰符 final 数据类型 属性名 = 值; 注意: 1.final修饰的属性必须在声明时赋值 2.final修饰的属性值不能修改修饰方法
作用:final修饰的方法不能被重写 语法: 访问权限修饰符 final 返回值类型 方法名(形参列表){ }修饰类
作用:不能被继承,这种类被称为最终类 语法: 访问权限修饰符 final class 类名{ }
static
含义:静态的,公共的(有点迷)
可以修饰:属性,方法,内部类,代码块
修饰属性
特点: 该属性属于该类的所有对象,该类的一个对象对其进行修改,该类的所有对象的该属性都将被修改 可以使用类名直接调用 语法: 访问权限修饰符 static 数据类型 属性名;修饰方法
特点:可以用类名调用方法,也可以用对象调用方法 语法: 访问权限修饰符 static 返回值类型 方法名(形参列表){ 方法体 } 注意: 1.不能使用this或super关键字 2.不能直接使用本类中其他非静态属性或非静态方法 3.可以直接使用本类的静态属性或静态方法 4.非静态方法中可以使用静态属性或方法修饰代码块
特点:在类加载时被执行 注意:一个类在程序运行时,只会被加载一次 语法: static{ 代码块 } 注意: 1.静态代码块中可以使用静态属性与静态方法,不能直接使用非静态属性或方法 2.静态代码块与静态属性,谁在前,谁先执行,为了可以在静态代码块中使用静态属性,必须将静态属性声明在静态代码块之前 类加载时机:该类第一次使用 1.第一次创建该类对象时 2.第一次使用该类调用属性时 3.第一次使用该类调用方法时 4.第一次使用反射机制加载该类时
代码块
语法: {}
作用:封装一段代码
使用位置
类中方法外 每次创建该类对象时被调用 注意: 在构造函数之前执行 普通属性与代码块按顺序执行 类中方法中 相当于没写
继承关系中的执行流程☆☆
先父静,再子静
父代码块,父构造函数
子代码块,子构造函数
作业
1,整理笔记 2,以下哪些论述是正确的 A. 静态方法中不能调用非静态方法 B. 非静态方法中不能调用静态方法 C. 静态方法不能被覆盖 D. 静态方法能够用类名直接调用 E. 可以在不产生任何一个对象的情况下调用静态方法 F. 静态方法里可以使用this 3,静态属性与非静态属性的区别? 4,final可以修饰什么?有什么作用 5,abstract可以修饰什么?有什么作用 6,创建动物类,类中有性别,年龄属性,动物会叫,会吃,会睡觉 创建宠物类,类中有姓名属性 创建猫类 创建狗类 创建狮子类 分别创建猫类,狗类,狮子类对象,分别使用对象调用叫的方法, 猫:喵喵喵 狗:汪汪汪 狮子:吼吼吼 提示:狮子算宠物吗? 7,定义一个类,该类用于计算各种图形的面积,周长. 如圆的周长,面积.矩形的周长,面积.梯形的周长,面积 分别调用这些方法计算 提示:圆的面积在计算时需要使用到π,而π的值是不可改变的 8,有如下代码 class MyClass { static int count = 0; public MyClass(){ count++; System.out.println(count); } } public class TestMain{ public static void main(String args[]){ MyClass mc1 = new MyClass(); MyClass mc2 = new MyClass(); MyClass mc3 = new MyClass(); } } 请写出该程序运行时输出的结果。 9,ATM机(附加题)