本帖最后由 小石姐姐 于 2017-12-22 15:08 编辑
学习总结
Day01:静态 Static : 静态修饰, 它是一个关键字,用来修饰成员变量和成员方法. Static 特点: 被所有对象所共享;(存在方法去中,静态区) 可以直接使用类名调用; 静态所修饰的成员加载优先于对象; 随着类的加载而加载. Static 注意事项: 静态方法中,只能调用静态成员和静态方法; 非静态方法中,既可以调用非静态成员变量和方法,也可以调用静态成员变量和方法 代码块: {} 局部代码块:方法中, 执行到方法中局部代码块时 执行 构造代码块:类中 方法外,每次创建对象都会执行,并且在构造方法之前执行 静态代码块:类中 方法外,被 static 修饰的代码块,随着类的加载而加载,只加载一次,加载类时需要做一些初始化. 同步代码块:*** Day02:继承 关键字: extends 继承的特点:只能单一继承,可以多层继承. 方法重写:在子父类中,子类的方法和父类的完全一样,子类重写了父类的方法之后,使用子类对象调用的就是子类的方法, 方法重写应用场景:当父类的方法不能完全满足子类使用,这时候子类重写父类的方法. 继承中构造方法执行顺序: 在有父类的继承关系的类中,创建子类的对象,调用子类的构造方法; 如果子类构造方法的第一行代码没有调用父类的构造方法,则会默认调用父类的无参构造; 肯定会先执行父类的构造,因为要先给父类的成员变量进行初始化 继承优缺点: 优点: 提高代码复用性 提高代码可维护性 缺点: 类的耦合性增加了 开发中原则:高内聚/低耦合 内聚:自身完成某件事的能力 耦合:类与类的依赖关系,耦合高了类与类之间相互依赖太多 Day03:接口 多态 接口: interface 接口中全部方法都是抽象方法 接口和类的关系是 实现关系 接口的成员特点: 只能有抽象方法; 默认使用 public & abstract 修饰方法 只能使用 public & abstract 修饰方法 public abstract void eat(); 默认使用 public static final 来修饰成员变量 (自定义常量) 全部大写 注意: 不能创建对象(不能实例化);不能定义构造方法 类与接口是实现关系,一个类实现一个接口必须实现它所有的方法 多态: 多态的前提: 子父类的继承关系 方法的重写 父类引用指向子类对象 Animal a = new Cat(); (向上转型) 多态的优缺点: 优点: 可以提高可维护性(多态前提所保证),提高代码的可扩展性,提高代码复用性 缺点: 无法直接访问子类的特有成员 (向下转型), Day04: 包 权限修饰符 内部类 包(文件夹)的特点: 可以有多层,两包之间用 点 隔开 不同包下的文件名可以重复 包的声明必须是第一行代码. 不同包之间的互相访问: 1.使用类的全名(包名.类名) java.util.ArrayList list = new java.util. ArrayList() 2.使用关键字 import 将类导入 3.import java.util.* *代表的是通配符,代表导入了这个包下所有类 ,并没有导入子包下的类 权限修饰符: public : 整个项目 default(什么都不写) 默认的: 同一个包中 private:当前类中访问 protected :同一个包中,它的子类也可以访问 内部类: 在类的成员位置, 和成员变量和成员方法所在的位置是一样的 (在成员位置上的普通类) 在内部类中,可以直接访问外部类的成员,包括私有成员 成员内部类的修饰符: 如果使用私有private 修饰符 就无法在其他类中访问. 匿名内部类: ( 只是用一次可以作为参数传递) 格式: new 类/接口 () { 如果是创建了继承这个类的子类对象,我们可以重写父类方法 如果是实现这个接口的子类对象,必须要实现接口的所有方法 }; 原理:而是创建了继承这个类的子类对象,或者是创建了实现这个接口的子类对象 Day05: API Objict 获取字节码对象(class)的方式: 一个类只有一个字节码对象 getClass():返回一个字节码对象 class.forName(String类的全名) Student s = new Student(); Class clazz1 = s.getClass(); //方式1.通过Object类的getClass()方法获取 Class clazz2 = Student.class; //方式2 通过类名调用属性class来获取 Class clazz3 = Class.forName("com.itheima02.Student"); //方式3.通过Class类的静态方法forName()来获取 System: 包含一些有用类字段(err(错误输出流) in out ) 和 方法 不能被实例化. static long currentTimeMillis() System.currentTimeMillis():以毫秒值返回当前时间(1970-1-1-0.0.0 到现在的毫秒值) static void exit 结束 终止 Date : 表示特定的瞬间,精确到毫秒,可以设定自己所表示的时间,可以表示任意时间 Date() : 创建的是一个表示当前系统时间的Date对象 Date d = new Date(1000*60) Date(long date) : 根据"指定时间"创建Date对象 Date的常用方法: java.util 包下 毫秒值---(转换)---Date 设置 返回值 void 参数 long void setTime(long time) Date---(转换)---毫秒值 获取 返回值 long 无参数 long getTime() SimpleDateFormat: 格式化: Date ---- String 2049-8-26 ---- 2049年8月26日 String format(Date date) 解析: String ---- Date 2049年8月26日 ---- 2049-8-26 Date parse(String source(字符串)) 正则表达式: 就是一套规则,,可以用于匹配字符串. boolean matches(String regex); 判断当前字符串是否匹配指定的正则表达式,匹配返回 true, 否则 返回 false. Day06 :集合 集合体系结构: 由于不同的数据结构(数据的组织,存储方式),所以java为我们提供了不同的集合 不同集合功能是相似的,不断向上提取,共性抽取出来,这就是集合体系形成过程. Collection 接口 顶层单列集合体系 Collection c = new ArrayList() :多态 父类引用指向子类对象 遍历集合: 迭代器. 1.toArray 转成object 数组 2.iterator();可以返回一个迭代对象 hasNext()方法:判断集合中是否有元素可以迭代 next()方法:用来返回迭代的下一个元素,并把指针向后移动一位。 并发修改异常:ConcurrentModificationException (只有使用迭代器 时才会出现的异常) 解决方案 : 在使用迭代器进行遍历的时候使用迭代器来进行修改 泛型 <> :是一种广泛的类型,把明确数据类型的工作提前到编译时期,借鉴了数组的特点 泛型的好处: 1.避免了类型的转换 2.可以减少黄色警告线 3.简化代码书写 foreach: 增强for 循环,一般用于遍历集合或者数组 格式: for(元素类型变量:集合或者对象数组){ 可以直接使用变量 } 常见的数据结构: 链表,由链子连接起来的一堆结点 结点: 地址值, 值, 下一个结点地址值 数组特点: 查询快, 增删慢. 链表特点 : 查询慢,增删快 List : 特有功能 有序的,(存储和读取方法一致) 有整数索引 允许重复 特有方法: add get(int index) remove(int index) set(int index,"") 替换指定索引 元素
|