A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 韶华白首zy 初级黑马   /  2018-4-14 17:18  /  695 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

静态
A:含义: Static是一个关键字,静态修饰符.
B:作用:
      (1)用来修饰成员变量,被修饰的成员变量被该对象所有对象共享
      (2)修饰类
C:特点
      (1)静态成员被该类所有对象共享
      (2)静态成员可以直接可以使用类名调用
      (3)静态成员的加载时机优先于对象(静态成员与类的生命周期相同,非静态成员与当                                                                 前类的对象生命周期相同
D访问规则
      (1)静态方法中只能调用静态成员
      (2)非静态方法中可以调用静态和非静态成员
      (3)静态方法中不可以使用this
自定义工具类
(1)定义一个类
(2)使用private修饰无参构造方法(使外界无法创建该类的对象)
(3)使用public static修饰工具方法
代码块
静态代码块
构造代码块
同步代码块
位置
类中方法外static修饰
类中方法外
方法中
执行时机
加载类时
创建对象时,构造方法前执行
执行到方法中,局部代码块时
执行次数
只有一次
创建对象的次数
调用方法的次数
作用
加载类时初始化
为构造方法执行同一操作
控制局部变量生命周期
继承
A格式:
      权限修饰符 class 子类名 extends 父类名{}
B特点
      (1)只支持单一继承:只能继承一个直接父类
      (2)不支持多继承
      (3)支持多层继承:子继父,父继爷
C继承中成员变量特点
      (1)子类只能获取父类非私有成员
      (2)就近原则(局部变量--本类成员变量--父类成员变量--报错)
D thissuper
      this 使用本类中成员方法或变量
      Super 使用父类中成员方法或变量
E继承中成员方法特点
      方法重写:在继承关系中,子类的一个方法和父类声明完全相同(权限要大于等于父类)此时若要调用方法,调用的是子类中的方法
Override方法重写
Overload方法重载
位置
存在继承关系的两个类中
同一个类中
方法定义
方法声明完全一样
方法名相同参数列表不同,与返回值,形参名,方法体无关
C应用场景
       (1)父类方法不能完全满足子类需求时
       (2)在重写方法中使用super..方法名()调用父类方法,既可以保留父类方法,也可以实现自身特有功能.
D注意事项
       (1)父类的private方法不能重写
       (2)子类重写方法的权限需要大于等于父类方法的权限
E继承中的构造方法
       (1)如果子类构造方法的第一行代码,没有调用其他构造方法,则会默认调用父类的无参构造
       (2)子类的构造方法中,至少有一个构造方法调用父类的构造方法
this
super
调用子类成员变量 this.name
调用子类成员方法this.show()
子类构造方法第一行调用子类其他构造方法,当子类没有父类某个成员变量或方法时,也可调用父类的
调用父类成员变量
调用父类成员方法
子类构造第一行,调用父类构造方法
匿名对象
A定义
     没有名字没有变量引用的对象
B格式
     (1)调用属性       new 类名().属性;
     (2)调用方法       new 类名().方法();
     (3)作为参数      
C应用场景
     (1)当方法属性只调用一次时
     (2)当对象作为方法参数传递时
Final关键字
A作用
(1)修饰类:被修饰的类不能被继承
(2)修饰方法:不能被子类重写
(3)修饰变量:会变成自定义变量,不能被修改,而且在使用前一定要初始化(命名规则:字母全部大写,不同单词之间用下划线分割  YOUR_NAME )
抽象类
A抽象方法
(1)abstract修饰,没有方法体直接以();结尾
(2)抽象方法修饰符只能是public或者protected
B抽象类
(1)abstract修的类
(2)子类继承抽象类后有两种选择1,把父类抽象方法全部重写2,将自身也改为抽象类
C特点
(1)抽象类和抽象方法必须被abstract修饰
(2)抽象方法只能被定义在抽象类中
(3)抽象类中可以有抽象方法,也可以有非抽象方法,也可以只有非抽象方法
(4)抽象类不能创建对象,但可以定义构造方法
D抽象类成员
(1)成员变量 可以有成员变量 可以有自定义常量
(2)成员方法 可以有抽象方法可以有非抽象方法
(3)构造方法 可以有构造方法,子类通过调用super()使抽象类成员进行初始化
E细节
(1)abstract不能与final   private共存
(2)抽象类不能创建对象,但可以有构造方法来进行初始化
(3)抽象类可以没有抽象方法
接口
A概念
    是功能的集合,比抽象类更加抽象的类.接口只描述所应该具备的方法,并没有具体 的实现,具体的实现由接口的实现类来完成.必须用实现来重写方法,或者用一个抽象类来作为实现类
B格式
    Public interface 接口名{抽象方法1......抽象方法n};
C接口的使用
    接口中的方法全都是抽象方法,不可以new接口
    类与接口之间的关系为实现关系,类实现接口(与继承类似)
    实现格式   class 类名  implement 接口{重写接口中的方法}
D接口的成员特点
    (1)只能有抽象方法
    (2)默认使用public abstract 修饰方法(就是不写也可以,会默认添加)
    (3)只能使用public abstract修饰(建议手动添加)
E成员变量
    (1)只能有常量
    (2)默认使用public abstract final 来修饰成员变量
F类与接口的关系
    (1)实现关系,可以多实现(一个类可以实现多个接口)
    (2)接口与接口的关系:继承关系,可以多层继承,也可以多继承
G接口的优缺点
    (1)打破了继承的局限性
    (2)对外提供规则
    (3)降低了程序的耦合性,实现了模块化开发,定义好了规则每个人实现自己的模块,提高了开发的效率
H类与接口的使用场景
    /抽象类  当父类可以描述子类时
    接口       当父类只是用于扩展某功能,不能完全描述子类时
I接口与抽象类的区别
接口
抽象类
与类的关系
是实现关系,而且是多实现,一个类可以实现多个接口
继承关系,是单一继承,可以多层继承
成员变量
只有常量
可以有成员变量,也可以有常量
成员方法
只能有抽象方法,有默认的修饰符public abstract
可以有抽象方法,也可以有非抽象方法
构造方法
没有构造方法
有构造方法
J应用
   在面对一个现实的需求时
   (1)分析:有下至上  不断地向上抽取共性
   (2)实现:由上至下   先实现共性(先写父类和接口)
   (3)使用:使用具体的子类
多态
A多态的使用前提
   (1)有子父类的继承关系
   (2)方法的重写
   (3)父类引用指向子类对象   father f=new son();
B动态绑定
运行期间调用的方法,是根据子类的具体类型来决定的
C格式
格式
使用
普通类
父类 变量名=new 子类();
Fu f=new zi ();
抽象类
抽象类 变量名=new 抽象子类();
Fu f=new zi();
接口类
接口 变量名=new 接口实现类();                     
Fu f=new zi();
D成员特点
   
编译时期
运行时期
多态成员变量
看等号左面
看等号左边
多态成员方法
看等号左边
看等号右边
静态方法
看左边
看左边
E多态的转型
向上转型
向下转型(当调用子类特有方法时)
定义
当有子类对象赋值给一个父类引用时.多态本身就是向上转型的过程
一个已经向上转型的子类对象可以使用强制转换类型的格式,将父类引用转换为子类引用(如果是直接创建父类对象是无法向下转型的)
格式
父类类型 变量名=new 子类类型();
子类类型 变量名 =(子类类型)父类类型
   
F多态的优缺点
可以提高维护性,提高代码的可扩展性
无法直接访问子类的特有成员
内部类
A概念
将类写在其他类的内部,可以写在其他类成员位置和局部位置,称为内部类,其他的称为外部类
B使用场景
在描述事物时,若一个事物内部还包含有其他事物
C成员内部类
(1)定义在外部类中的成员位置,与类中成员变量相似,可通过外部对象进行访问
(2)class 外部类{修饰符 class 内部类{其他代码}}
(3)访问方法   外部类名.内部类名 变量名=new 外部类名().new内部类名();
(4)可用的修饰符  private  public  protected  final  static  abstract
D局部内部类
定义在外部类方法中的局部位置,与访问方法中的局部变量相似,可通过调用方法访问
Class 外部类 {修饰符 返回值类型 方法名(参数){class 内部类 {代码}}}
访问方法:在外部方法中,创建内部类对象进行访问
E匿名内部类
(1)是创建某个类型子类或接口的实现类对象的快捷方式
(2)格式  new 父类或接口(){方法重载}
   直接调用方法 new父类或接口(){重写方法}.方法名();
   创建对象并赋值  父类或接口 对象名=new 父类或接口(){};
Object
A概念  
      java中的根类,是所有类的父类,描述的方法子类都可以使用.在创建对象时,最终找的父类就是object
获取字节码对象
A  object类的Class getClass()方法
示例: Class clazz = student.getClass();
类名.class属性
示例: Class clazz = Student.class;
扩展: 实际上.class是一种特殊形式, 称为类字面常量, class是关键字不能作为    属性名, 且Object类中并没有定义这个属性
B   Class类的静态方法forName(String className)
示例: Class clazz = Class.forName("com.itheima.Student");
注意: 因为该方法使用字符串来寻找类, 有可能并没有该字符串对应的类, 所以会抛出ClassNotFoundException类无法找到的异常
          Object类的equals方法Object类boolean equals(Object obj): 比较两个对象是否"相等"
其实是比较的地址值
              System类
  System 类包含一些有用的类字段和方法。它不能被实例化。
A  成员方法    数组的复制
static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)  
                  数据源和目的地
                  src:源数组
                  srcPos:指定从哪个索引位置开始复制                1
                  dest:目标数组
                  destPos:指定目标数组接收元素的索引位置
                  length:目标数组接收元素的个数
      (3)static long currentTimeMillis()
      返回以毫秒为单位的当前时间
      (4)static void exit(int status)
      终止当前正在运行的 Java 虚拟机
Date
A 表示特定的瞬间 精确到毫秒 可以通过方法来黑设定自己所表示的时间,可以表示任意时间
B 构造方法
      Date(): 创建一个表示当前系统时间的Date对象
      Date(longdate)根据指定时间创建Date对象(1970-01-01是起点)
C常用方法
   设置时间方法:   毫秒值--Date   void setTime(long time)
   获取时间方法:   Date---毫秒值   long  getTime();
                                           simpleDateFormat
A 构造方法
       simpleDateFormat()  使用默认模式进行对象构建
       simpleDateFormat(String pattern)使用指定模式进行对象构建
B格式化  
      转化为想要的格式   Date--String
          Date format(Date date)
C解析  
       转化为毫秒  String--Date
       Date parse(String source) 格式必须和字符串的格式相同 yyyy-MM--dd
Calendar
A 日历  提供了一些可以操作年月日的方法
        Date---calendar    void setTime(Date date) 静态方法
B获取
        Int get (int field)    返回给定日历字段的值
       Calender c=Calendar.getInstand();创建对象
       Int year=c,get(Calendar.YEAR);获取年
       Int month=c.get(Calendar.MONTH)+1 最小值为0所以要+1
       Int day =c.get(Calendar.DAY_OF_MONTH);获取年中的日
C修改
       Void set (int field,int value)   把指定的字段修改成指定的值
D添加
       Void add(int filed,int value)   在指定的字段添加指定的值
Collection
Collection c=new ArrayList();  利用多态创建对象
A利用迭代遍历集合
     Iterator it =c.iterator(); 调用iterator 方法
     While(it.hasNext())  遍历集合
     {it.next()}可以直接输出或者用一个数据类型接收
B添加元素
     利用list接口中的listiterator方法.直接添加会发生并发修改异常
       ListIterator li=it.listIterator();
        While (Li.hasNext())   遍历
        {String x=(String)li.next();   接收
         If(x.equals(“”)){    判断
          Li.add(“”)}     添加
}
Collection接口(单列集合体系的顶层)
        |        * boolean add(E e): 添加元素, 添加成功返回true, 否则false
        |        * void clear(): 清空集合中的元素
        |        * boolean contains(Object o): 判断集合中是否包含指定的对象
        |        * boolean isEmpty(): 判断集合中是否没有元素. 与null区分
        |        * boolean remove(Object o): 从集合中删除一个元素, 删除成功返回true, 否则false
        |        * int size(): 获取集合的长度(元素的数量)
        |        * Object[] toArray(): 将集合转换为Object[]数组
        |        * Iterator<E> iterator(): 获取集合的迭代器对象
    |- List接口(元素存取有序, 元素可重复, 有索引)
        |        |        * void add(int index, E e): 添加元素到指定索引上
        |        |        * E remove(int index): 删除索引上的元素, 并返回
        |        |        * E set(int index, E e): 修改指定索引上的元素, 并返回被替换的元素
        |        |        * E get(int index): 获取指定索引上的元素
        |        |        * ListIterator listIterator(): 获取List特有的迭代器对象
        |        |- ArrayList类(底层是数组, 查询快, 增删慢)
        |        |- LinkedList类(底层是链表, 查询慢, 增删快)
        |                        * void addFirst(E e): 添加元素到集合的开头
        |                        * void addLast(E e): 添加元素到集合的末尾
        |                        * E getFirst(): 获取集合开头的元素
        |                        * E getLast(): 获取集合末尾的元素
        |                        * E removeFirst(): 删除开头的元素, 并返回
        |                        * E removeLast(): 删除末尾的元素, 并返回
        |- Set接口(元素存取无序, 元素不可重复, 无索引)
                |        * `boolean add(E e)`: 添加成功返回true; 添加失败(重复了)返回false
                |- HashSet类(底层哈希表)
Map接口(双列集合体系的顶层, 以键值对方式存储, 键不可重复, 值可以重复)
        |        * `V put(K key, V value)`: 添加键值对
        |        * `V get(Object key)`: 通过指定键获取值
        |        * `int size()`: 获取集合长度
        |        * `containsKey(Object key)`: 是否包含指定的键
        |        * `containsValue(Object value)`: 是否包含指定的值
        |        * `boolean isEmpty()`: 是否为空
        |        * `void clear()`: 清空集合
        |        * `V remove(Object key)`: 删除指定键的值(key和value都会删除)
        |        * `Set<Map.Entry<K, V>> entrySet()`: 获取键值对的Set集合
        |        * `Set<K> keySet()`: 获取所有键的Set集合
        |        * `Collection<V> values()`: 获取所有值得Collection集合
        |- Map.Entry(Map内部接口, 表示键值对对象)
        |        * `K getKey()`: 获取键
        |        * `V getValue()`: 获取值
        |- HashMap类
       
Iterator接口(迭代器)
        |        * boolean hasNext(): 判断是否有下一个元素
        |        * E next(): 获取下一个元素
        |        * void remove(): 删除迭代器返回的最后一个元素
    |- ListIterator接口(List体系专用迭代器)
                        * void add(E e): 使用迭代器添加元素到集合
                        * void remove(): 删除迭代器返回的最后一个元素
Collections工具类
        * `static int binarySearch(List list, T key)`: 使用二分查找来查找元素在指定列表的索引位置
        * `static void copy(List dest, List src)`: 将源列表中的数据覆盖到目标列表
        * `static void fill(List list, Object obj)`: 使用指定对象填充指定列表的所有元素
        * `static void reverse(List list)`: 反转集合中的元素
        * `static void shuffle(List list)`: 随机打乱集合中元素的顺序
        * `static void sort(List list)`: 将集合中的元素按照元素的自然顺序排序
        * `static void swap(List list, int i, int j)`: 将指定列表中的两个索引进行位置互换

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马