Day 1 总结 Day1继承 1. 继承是是面向对象的三大特性之一,可以使子类和父类产生关系,子类可以得到父类的属性和方法并可重写。 2. 继承的格式 关键字extends Class子extends 父{} Cat extends Animal{} 3. 继承的用处 继承可以使类与类产生关系,子类可以使用父类中非私有的成员。 4. 继承的优势与弊端 好处:复用性与维护性 弊端:当父类发生变化时子类也在变化削弱了子类的独立性 Is 。。。a的关系 5. 继承中的访问特点 就近原则 子类中局部 子类成员 父类成员 This本类对象引用 Super 父类对象 6. 子类所有的构造方法默认都会访问父类中无参的构造方法 (){ 默认super } 7. 方法重写 子类中出现了和父类一样的方法生名 当子类需要父类的功能而功能主体子类有自己特有的功能,可以重写父类方法 Override效验 8. 私有方法不能被重写 子类方法访问权限不能更低(public--默认--私有) 9. Java中继承的注意事项 Class A extends B ,C{}错误事项 只支持单继承,可以多层继承 10.修饰符 Package 包的概念 包就是文件夹用来管理类文件的、 包的格式 Package 包名 Package 包名;(多级包。分开) Package com。Heima。Demo; 带包编译 编译javac-d 。 类名。Java java-d。Com。Heima。Hello。Java 运行java 包名+类名 . 11.Import 导包的意义 使用户不同包下的类 导包的格式 Import 包名 Import java.util.Scanner 12. Final 13. final表示最终的意思 修饰类该类不能有子类 修饰方法不能被重写 修饰变量表明是个常量不能再次赋值 14.final修饰局部变量 基本类型的数据值不能发生改变 引用数据类型变量地址值不能发生改变,但是地址里面的内容是可以发生改变的 14. Static Static表示静态修饰成员方法,成员变量 被类的所有对象共享 可以通过类名调用,也可以通过对象名调用。 静态成员方法只能访问静态成员 Day2 1. 多态 同一个对象,在不同时刻表现出来的不同形态 多态的前提 要有继承或实现关系 要有方法的重写 要有父类引用指向子类对象 2. 多态中的成员访问特点 成员访问特点 成员变量 编译看父类,运行看父类 成员方法 3. 多态的好处与弊端 好处 提高程序的扩展性。定义方法时候,使用父类型作为参数,在使用的时候,使用具体的子类型与操作。 弊端 不能使用子类的特有成员 多态的转型 向上转型 父类引用指向子类 向下转型 格式:子类型 对象名=(子类型)父类引用; 4.抽象类一个没有方法体的方法应该定义为抽象方法,而类中如果有抽象方法,该类必须定义为抽象类! 抽象类和抽象方法必须使用 abstract 关键字修饰 4.1抽象类中不一定有抽象方法,有抽象方法的类一定是抽象类 抽象类不能实例化 4.2 抽象类如何实例化呢?参照多态的方式,通过子类对象实例化,这叫抽象类多态 4.3抽象类的子类 要么重写抽象类中的所有抽象方法 要么是抽象类 4.4抽象类的特点 成员的特点 成员变量 既可以是变量也可以是常量 构造方法 空参构造 有参构造 成员方法 抽像方法 普通方法 5接口 5.1接口的概述(理解) 接口就是一种公共的规范标准,只要符合规范标准,大家都可以通用。 Java中的接口更多的体现在对行为的抽象 接口用关键字interface修饰 类实现接口用implements表示 public interface 接口名 {} 类实现接口用implements表示 public class 类名 implements 接口名 {} - 接口不能实例化 接口如何实例化呢?参照多态的方式,通过实现类对象实例化,这叫接口多态。 多态的形式:具体类多态,抽象类多态,接口多态。 - 接口的子类 要么重写接口中的所有抽象方法 要么子类也是抽象类 5.2接口的成员特点 - 成员特点 - 成员变量 只能是常量 默认修饰符:public static final - 构造方法 没有,因为接口主要是扩展功能的,而没有具体存在 - 成员方法 只能是抽象方法 默认修饰符:public abstract 6.1类和接口的关系(记忆) - 类与类的关系 继承关系,只能单继承,但是可以多层继承 - 类与接口的关系 实现关系,可以单实现,也可以多实现,还可以在继承一个类的同时实现多个接口 - 接口与接口的关系 继承关系,可以单继承,也可以多继承 6..2抽象类和接口的区别 - 成员区别 - 抽象类 变量,常量;有构造方法;有抽象方法,也有非抽象方法 - 接口 常量;抽象方法 - 关系区别 - 类与类 继承,单继承 - 类与接口 实现,可以单实现,也可以多实现 - 接口与接口 继承,单继承,多继承 - 设计理念区别 - 抽象类 对类抽象,包括属性、行为 - 接口 对行为抽象,主要是行为 Day 3 参数传递 1.1 类名作为形参和返回值 - 1.类名作为方法的形参 方法的形参是类名,其实需要的是该类的对象 实际传递的是该对象的【地址值】 - 2.类名作为方法的返回值 方法的返回值是类名,其实返回的是该类的对象 实际传递的,也是该对象的【地址值】 1.2 抽象类作为形参和返回值 - 抽象类作为形参和返回值 - 方法的形参是抽象类名,其实需要的是该抽象类的子类对象 - 方法的返回值是抽象类名,其实返回的是该抽象类的子类对象 1.3 接口名作为形参和返回值 - 接口作为形参和返回值 - 方法的形参是接口名,其实需要的是该接口的实现类对象 - 方法的返回值是接口名,其实返回的是该接口的实现类对象 2. 内部类 2.1 内部类的基本使用 - 内部类概念 - 在一个类中定义一个类。举例:在一个类A的内部定义一个类B,类B就被称为内部类 - 内部类定义格式 - 格式&举例: 格式: class 外部类名{ 修饰符 class 内部类名{ } } class Outer { public class Inner { } } 内部类访问特点: 内部类可以直接访问外部类的成员,包括私有 外部类要访问内部类的成员,必须创建对象 2.2 成员内部类(理解) - 成员内部类的定义位置 - 在类中方法,跟成员变量是一个位置 - 外界创建成员内部类格式 - 格式:外部类名.内部类名 对象名 = 外部类对象.内部类对象; - 举例:Outer.Inner oi = new Outer().new Inner(); - 成员内部类的推荐使用方案 - 将一个类,设计为内部类的目的,大多数都是不想让外界去访问,所以内部类的定义应该私有化,私有化之后,再提供一个可以让外界调用的方法,方法内部创建内部类对象并调用。 2.3 局部内部类(理解) - 局部内部类定义位置 - 局部内部类是在方法中定义的类 - 局部内部类方式方式 - 局部内部类,外界是无法直接使用,需要在方法内部创建对象并使用 - 该类可以直接访问外部类的成员,也可以访问方法内的局部变量 2.4 匿名内部类(应用) - 匿名内部类的前提 - 存在一个类或者接口,这里的类可以是具体类也可以是抽象类 - 匿名内部类的格式 - 格式:new 类名 ( ) { 重写方法 } new 接口名 ( ) { 重写方法 } - 举例: new Inter(){ @Override public void method(){} } - 匿名内部类的本质 - 本质:是一个继承了该类或者实现了该接口的子类匿名对象 - 匿名内部类的细节 - 匿名内部类可以通过多态的形式接受 2.4 匿名内部类在开发中的使用 - 匿名内部类在开发中的使用 - 当发现某个方法需要,接口或抽象类的子类对象,我们就可以传递一个匿名内部类过去,来简化传统的代码 - 、Math类概述 - Math 包含执行基本数字运算的方法 - 2、Math中方法的调用方式 - Math类中无构造方法,但内部的方法都是静态的,则可以通过 类名.进行调用 - 3.1Math类的常用方法 方法名 方法名 public static int abs(int a) 返回参数的绝对值 public static double ceil(double a) 返回大于或等于参数的最小double值,等于一个整数 public static double floor(double a) 返回小于或等于参数的最大double值,等于一个整数 public static int round(float a) 按照四舍五入返回最接近参数的int public static int max(int a,int b) 返回两个int值中的较大值 public static int min(int a,int b) 返回两个int值中的较小值 public static double pow (double a,double b) 返回a的b次幂的值 public static double random() 返回值为double的正值,[0.0,1.0) 3.2- System类的常用方法 方法名 说明 public static void exit(int status) 终止当前运行的 Java 虚拟机,非零表示异常终止 public static long currentTimeMillis() 返回当前时间(以毫秒为单位) 3.3 Object类的toString方法(应用) - Object类概述 - Object 是类层次结构的根,每个类都可以将 Object 作为超类。所有类都直接或者间接的继承自该类,换句话说,该类所具备的方法,所有类都会有一份 - 查看方法源码的方式 - 选中方法,按下Ctrl + B - 重写toString方法的方式 - 1. Alt + Insert 选择toString - 1. 在类的空白区域,右键 -> Generate -> 选择toString - toString方法的作用: - 以良好的格式,更方便的展示对象中的属性值 3.4 Object类的equals方法 - equals方法的作用 - 用于对象之间的比较,返回true和false的结果 - 举例:s1.equals(s2); s1和s2是两个对象 - 重写equals方法的场景 - 不希望比较对象的地址值,想要结合对象属性进行比较的时候。 - 重写equals方法的方式 - 1. alt + insert 选择equals() and hashCode(),IntelliJ Default,一路next,finish即可 - 1. 在类的空白区域,右键 -> Generate -> 选择equals() and hashCode(),后面的同上。 3.5 冒泡排序原理 - 冒泡排序概述 - 一种排序的方式,对要进行排序的数据中相邻的数据进行两两比较,将较大的数据放在后面,依次对所有的数据进行操作,直至所有数据按要求完成排序 - 如果有n个数据进行排序,总共需要比较n-1次 - 每一次比较完毕,下一次的比较就会少一个数据参与 3.6 Arrays - Arrays的常用方法 方法名 说明 public static String toString(int[] a) 返回指定数组的内容的字符串表示形式 public static void sort(int[] a) 按照数字顺序排列指定的数组 - 工具类设计思想 1、构造方法用 private 修饰 2、成员用 public static 修饰 Day 4 1.1基本类型包装类 - 基本类型包装类的作用 将基本数据类型封装成对象的好处在于可以在对象中定义更多的功能方法操作该数据 常用的操作之一:用于基本数据类型与字符串之间的转换 - 基本类型对应的包装类 基本数据类型 包装类 Byte Byte Short Short Int Integer Long Long Float Float Double Double Char Character Boolean Boolean 1.2Integer类 - Integer类概述 包装一个对象中的原始类型 int 的值 - Integer类构造方法 public Integer(int value) | 根据 int 值创建 Integer 对象(过时) | | 根据 String 值创建 Integer 对象(过时) | public static Integer valueOf(int i) | 返回表示指定的 int 值的 Integer 实例 | public static Integer valueOf(String s) | 返回一个保存指定值的 Integer 对象 String |
Integer i3 = Integer.valueOf(100); Integer i4 = Integer.valueOf("100"); int转换为String 转换方式 - 方式一:直接在数字后加一个空字符串 - 方式二:通过String类静态方法valueOf() 1.5自动拆箱和自动装箱(理解) - 自动装箱 把基本数据类型转换为对应的包装类类型 - 自动拆箱 把包装类类型转换为对应的基本数据类型 2.时间日期类 2.1Date类 - Date类概述 Date 代表了一个特定的时间,精确到毫秒 - Date类构造方法 方法名 说明 public Date() 分配一个 Date对象,并初始化,以便它代表它被分配的时间,精确到毫秒 public Date(long date) 分配一个 Date对象,并将其初始化为表示从标准基准时间起指定的毫秒数 2.2Date类常用方法 - 常用方法 方法名 说明 public long getTime() 获取的是日期对象从1970年1月1日 00:00:00到现在的毫秒值 public void setTime(long time) 设置时间,给的是毫秒值 2.3SimpleDateFormat类(应用) - SimpleDateFormat类概述 SimpleDateFormat是一个具体的类,用于以区域设置敏感的方式格式化和解析日期。 - SimpleDateFormat类构造方法 方法名 说明 public SimpleDateFormat() 构造一个SimpleDateFormat,使用默认模式和日期格式 public SimpleDateFormat(String pattern) 构造一个SimpleDateFormat使用给定的模式和默认的日期格式 - SimpleDateFormat类的常用方法 - 格式化(从Date到String) - public final String format(Date date):将日期格式化成日期/时间字符串 - 解析(从String到Date) - public Date parse(String source):从给定字符串的开始解析文本以生成日期 2.5Calendar类(应用) - Calendar类概述 Calendar 为特定瞬间与一组日历字段之间的转换提供了一些方法,并为操作日历字段提供了一些方法 Calendar 提供了一个类方法 getInstance 用于获取这种类型的一般有用的对象。 该方法返回一个Calendar 对象。 其日历字段已使用当前日期和时间初始化:Calendar rightNow = Calendar.getInstance(); - Calendar类常用方法 方法名 说明 public int get(int field) 返回给定日历字段的值 public abstract void add(int field, int amount) 根据日历的规则,将指定的时间量添加或减去给定的日历字段 public final void set(int year,int month,int date) 设置当前日历的年月日 - 异常的概述 异常就是程序出现了不正常的情况 - 异常的体系结构 3.3try-catch方式处理异常(应用) - 定义格式 try { 可能出现异常的代码; } catch(异常类名 变量名) { 异常的处理代码; } - 执行流程 - 程序从 try 里面的代码开始执行 - 出现异常,就会跳转到对应的 catch 里面去执行 - 执行完毕之后,程序还可以继续往下执行 Throwable成员方法(应用) - 常用方法 方法名 说明 public String getMessage() 返回此 throwable 的详细消息字符串 public String toString() 返回此可抛出的简短描述 public void printStackTrace() 把异常的错误信息输出在控制台 .5编译时异常和运行时异常的区别(记忆) - 编译时异常 - 都是Exception类及其子类 - 必须显示处理,否则程序就会发生错误,无法通过编译 - 运行时异常 - 都是RuntimeException类及其子类 - 无需显示处理,也可以和编译时异常一样处理 - 这个throws格式是跟在方法的括号后面的 - 编译时异常必须要进行处理,两种处理方案:try...catch …或者 throws,如果采用 throws 这种方案,将来谁调用谁处理 - 运行时异常可以不处理,出现问题后,需要我们回来修改代码 Day 5 1.Collection集合 1.1集合体系结构【记忆】 - 集合类的特点 提供一种存储空间可变的存储模型,存储的数据容量可以随时发生改变 - 集合类的体系图 集合 单列Collection 双列 Map List 可重复 Set 不可重复 HashMap List HashSet TreeSet 接口 实现类 ArrayList linkedList 1.2Collection集合概述和基本使用Collection集合概述 - 是单例集合的顶层接口,它表示一组对象,这些对象也称为Collection的元素 - JDK 不提供此接口的任何直接实现,它提供更具体的子接口(如Set和List)实现 1.3Collection集合的常用方法 方法名 说明 boolean add(E e) 添加元素 boolean remove(Object o) 从集合中移除指定的元素 void clear() 清空集合中的元素 boolean contains(Object o) 判断集合中是否存在指定的元素 boolean isEmpty() 判断集合是否为空 int size() 集合的长度,也就是集合中元素的个数 1.4Collection集合的遍历 - 迭代器的介绍 - 迭代器,集合的专用遍历方式 - Iterator<E> iterator():返回此集合中元素的迭代器,通过集合的iterator()方法得到 - 迭代器是通过集合的iterator()方法得到的,所以我们说它是依赖于集合而存在的 2.List集合 2.1List集合概述和特点 - List集合概述 - 有序集合(也称为序列),用户可以精确控制列表中每个元素的插入位置。用户可以通过整数索引访问元素,并搜索列表中的元素 - 与Set集合不同,列表通常允许重复的元素 - List集合特点 - 有索引 - 可以存储重复元素 - 元素存取有序 2.2List集合的特有方法【应用】 方法名 描述 void add(int index,E element) 在此集合中的指定位置插入指定的元素 E remove(int index) 删除指定索引处的元素,返回被删除的元素 E set(int index,E element) 修改指定索引处的元素,返回被修改的元素 E get(int index) 返回指定索引处的元素 2.4并发修改异常【应用】 - 出现的原因 迭代器遍历的过程中,通过集合对象修改了集合中的元素,造成了迭代器获取元素中判断预期修改值和实际修改值不一致,则会出现:ConcurrentModificationException 2.5列表迭代器 - ListIterator介绍 - 通过List集合的listIterator()方法得到,所以说它是List集合特有的迭代器 - 用于允许程序员沿任一方向遍历的列表迭代器,在迭代期间修改列表,并获取列表中迭代器的当前位置 2.6增强for循环【应用】 - 定义格式 for(元素数据类型 变量名 : 数组/集合对象名) { 循环体; } 3.数据结构 3.1数据结构之栈和队列【记忆】 - 栈结构 先进后出 - 队列结构 先进先出 3.2数据结构之数组和链表 - 数组结构 查询快、增删慢 - 队列结构 查询慢、增删快 4.List集合的实现类 4.1List集合子类的特点【记忆】 - ArrayList集合 底层是数组结构实现,查询快、增删慢 - LinkedList集合 底层是链表结构实现,查询慢、增删快 LinkedList集合的特有功能【应用】 - 特有方法 方法名 说明 public void addFirst(E e) 在该列表开头插入指定的元素 public void addLast(E e) 将指定的元素追加到此列表的末尾 public E getFirst() 返回此列表中的第一个元素 public E getLast() 返回此列表中的最后一个元素 public E removeFirst() 从此列表中删除并返回第一个元素 public E removeLast() 从此列表中删除并返回最后一个元素 Day 6 set集合 1.1Set集合概述和特点 - Set集合的特点 - 元素存取无序 - 没有索引、只能通过迭代器或增强for循环遍历 - 不能存储重复元素 1.2哈希值【理解】 - 哈希值简介 是JDK根据对象的地址或者字符串或者数字算出来的int类型的数值 - 如何获取哈希值 Object类中的public int hashCode():返回对象的哈希码值 - 哈希值的特点 - 同一个对象多次调用hashCode()方法返回的哈希值是相同的 - 默认情况下,不同对象的哈希值是不同的。而重写hashCode()方法,可以实现让不同对象的哈希值相同 1.3HashSet集合概述和特点 - HashSet集合的特点 - 底层数据结构是哈希表 - 对集合的迭代顺序不作任何保证,也就是说不保证存储和取出的元素顺序一致 - 没有带索引的方法,所以不能使用普通for循环遍历 - 由于是1.4HashSet集合保证元素唯一性源码分析【理解】 - HashSet集合保证元素唯一性的原理 1.根据对象的哈希值计算存储位置 如果当前位置没有元素则直接存入 如果当前位置有元素存在,则进入第二步 2.当前元素的元素和已经存在的元素比较哈希值 如果哈希值不同,则将当前元素进行存储 如果哈希值相同,则进入第三步 3.通过equals()方法比较两个元素的内容 如果内容不相同,则将当前元素进行存储 如果内容相同,则不存储当前元素 - HashSet集合保证元素唯一性的图解 Set集合,所以是不包含重复元素的集合 LinkedHashSet集合概述和特点【应用】 - LinkedHashSet集合特点 - 哈希表和链表实现的Set接口,具有可预测的迭代次序 - 由链表保证元素有序,也就是说元素的存储和取出顺序是一致的 - 由哈希表保证元素唯一,也就是说没有重复的元素 2.1TreeSet集合概述和特点【应用】 - TreeSet集合概述 - 元素有序,可以按照一定的规则进行排序,具体排序方式取决于构造方法 - TreeSet():根据其元素的自然排序进行排序 - TreeSet(Comparator comparator) :根据指定的比较器进行排序 - 没有带索引的方法,所以不能使用普通for循环遍历 - 由于是Set集合,所以不包含重复元素的集合 3.泛型 3.1泛型概述和好处【理解】 - 泛型概述 是JDK5中引入的特性,它提供了编译时类型安全检测机制,该机制允许在编译时检测到非法的类型 它的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。一提到参数,最熟悉的就是定义方法时有形参,然后调用此方法时传递实参。那么参数化类型怎么理解呢?顾名思义,就是将类型由原来的具体的类型参数化,然后在使用/调用时传入具体的类型。这种参数类型可以用在类、方法和接口中,分别被称为泛型类、泛型方法、泛型接口 - 泛型定义格式 - <类型>:指定一种类型的格式。这里的类型可以看成是形参 - <类型1,类型2…>:指定多种类型的格式,多种类型之间用逗号隔开。这里的类型可以看成是形参 - 将来具体调用时候给定的类型可以看成是实参,并且实参的类型只能是引用数据类型 - 泛型的好处 - 把运行时期的问题提前到了编译期间 - 避免了强制类型转换 - 定义格式 修饰符 class 类名<类型> { } 3.2泛型类- 定义格式 修饰符 <类型> 返回值类型 方法名(类型 变量名) { } - 示例代码 - 带有泛型方法的类 public class Generic { public <T> void show(T t) { System.out.println(t); } }
|