1. 类的概念:
    一堆具有共同的成员变量、属性和成员方法、功能对象集合

  2. 接口的概念:
    接口是功能的集合,就是方法的集合
    也就是说 接口中只能定义方法,不能定义普通的成员变量
    而且接口中的成员方法,必须都是抽象的
    接口是比抽象类还要抽象的一种类型

    问题:接口能创建对象吗?不能

     接口作用:天生作为“父接口”
    
  3. 接口的定义:
    定义接口用关键字:interface
    定义枚举用关键字:enum

    格式:
    public interface 接口名字{

     //成员变量,不能定义普通的成员变量
     //成员方法:必须都是抽象
     public abstract 返回值类型 方法名();
    

    }

    类和接口的本质区别不大,他们的源码都是.java文件
    编译后都是.class文件

  4. 类与类之间:继承,而且是单继承,一个子类,只能有一个直接父类
    接口和接口之间:继承,但是可以多继承,一个子接口 可以有多个直接父接口

    面试题:Java到底支不支持多继承?

     如果是类与类  不支持多继承  只支持多层继承
     如果是接口和接口  支持多继承  也支持多层继承
    

    类和接口之间:不叫继承(extends),叫实现(implements),可以多实现

     只有类 实现接口
    
  5. 接口中成员的特点
    5.1成员变量,但是必须有固定修饰符public static final 数据类型 变量 = 值
    5.2成员方法,必须是固定修饰符public abstract 即抽象方法
    5.3接口不可以创建对象(抽象类也是)
    5.4实现类 实现类接口,那么必须重写接口中所有的抽象方法,然后才能创建对象

     否则 这个实现类 还是一个抽象类,是不能创建对象的
     在开发中最常用的模式:
         public class A extends AbstractClassB implements 接口A,接口B{
             注意:
             A中必须重写 抽象类中的抽象方法,以及所有接口中的抽象方法
         } 
    
  6. 接口和抽象类的异同:

  7. 相同点:
    a.都不能创建对象
    b.都是作为父类/父接口
    c.子类/实现类 都必须重写抽象方法,然后才能创建对象

  8. 不同点:
    a.抽象类用关键字abstract 接口用关键字interface
    b.接口中只要有方法,必须都是抽象的
    c.抽象类可以定义任意成员变量 接口的成员变量必须public static final修饰
    d.类和抽象类之间关系是单继承,类和接口之间关系是多实现
    e.思想上的区别
    1.抽象类中必须定义整个继承体系中的共性内容
    2.接口中定义 整个继承体系之外的 额外扩展的功能。

7.面向对象3大特征:封装(安全性),继承(扩展性),多态(灵活性)
多态:
前提1.必须有子父类关系
2.必须有方法的重写
多态在Java中的表现形式:
父类类型 变量名 = new 子类类型();
接口类型 变量名 = new 实现类();
Animal an = new Cat();
父类类型的变量指向了子类的对象
注意:
1.使用多态调用成员变量
编译时,看父类
运行时,看父类
2.使用多态调用成员方法
编译时,看父类
运行时,看子类
总结:
弊端:多态只能调用子父类共有的方法,不能调用子类特有的方法
好处:提高灵活性
父类类型的变量,可以接收任何一个子类的对象
调用方法的时候,编译是看父类,运行时运行的传递过来的子类对象的方法
弊端的解决方案:
向下转型:强制类型转换
向上转型:自动类型转换 (就是多态)
向下转型也有弊端:
把父类的变量 转成任何子类类型时候,编译器直接通过
可以转成cat,本质是dog 所以出错
Java中解决向下转型弊端的方法:
一个关键字Instanceof 运算符
作用:判断某一个变量 不是 该类的类型
格式:
boolean b = an instanceof 类名
多态提高程序的灵活性,扩展性,复用性。

  1. static的介绍:
    static的作用用来修饰类中的成员
    1.如果一个类的成员被static修饰了,怎么访问? 类名.成员变量名
    存在方法区中的静态区,只有一个空间 优先于对象存在
    2.类名.成员变量(推荐) 对象.成员变量 都可以
    3.所有对象共有的,被staic修饰的成员属于类,不属于单个对象
    4.静态没有多态性 静态不属于对象,属于类
    5.静态代码块:

     在类的成员位置
         static{
             代码
         }
    

    特点:
    使用到这个类时,JVM会自动执行静态代码块
    只会第一次使用时执行
    优先级比构造方法高,比main方法高
    作用:用来初始化类的,myswl数据(静态代码块来加载驱动)

  2. final可以修饰
    类,成员变量,成员方法,局部变量(基本类型,引用类型)
    1.修饰类(太监类),不能被继承
    2.final修饰成员变量:

     2.1必须在创建对象之前有却确定的值
     2.3只能赋值一次
    

    3.修饰方法:

     不能被子类重写
    

    4.修饰基本类型局部变量

     被final修饰的基本类型局部变量  只能赋值一次
    

    5.修饰引用类型局部变量

     被final修饰的引用类型局部变量  只能赋值一次
     但是引用类型所指向的对象中内容是可以改变的
    
  3. 匿名内部类:是一种特殊的语法,用来快速创建抽象类的子类对象

             用来快速创建 接口的实现类对象
    

    AbstractAnimal an1 = new AbstractAnimal(){

     重写
    

    }
    多态

  4. 引用数据类型
    a.类作为方法的参数或者返回值(我们需要传递或返回的是该类的对象)
    b.抽象类作为方法的参数和返回值 (和9结合起来)我们需要传递或返回的是该抽象类的子类的对象
    c.接口作为方法的参数和返回值 (我们需要传递或返回的是该接口的实现类的对象)

  5. 链式编程

  6. 权限修饰符
    如果一个成员只想在本类中使用 用private修饰
    如果一个成员想在本类和本包的其它类中使用 不写 default
    如果一个成员想在本类,本包,其他包的子类中使用 用protected修饰
    如果一个成员想在所有类中使用 用public修饰

  7. Object类:
    类Object是类层次结构的根类
    所有类都必须直接或者间接的继承object

    1. boolean equals(Object obj);
      p1.equals(p2);
      //比较两个对象是否相等,在Object类中定义equals方法比较是 两个对象的地址
      在String类中 重写了object父类中的equals方法,
      本来在object类中比较的是两个对象的地址
      在String重写后变成比较两个字符串的内容

    我们程序员 通常自定义一个类 也会重写equals

    1. toString(); //返回该对象的字符串表示
      Object类中的默认的返回值:包名.类名@地址
      实际开发中toString的使用,重写toString 返回对象中的成员变量
  8. 异常:是java代码编译或者运行过程中
    异常的继承体系:
    Throwable(异常和错误的超类):可以抛出去的东西

    --Exception:异常(普通问题) 
    --编译时异常:
      指的是Exception 以及Exception子类  (除了RuntimeException)
    --运行时异常:
      RuntimeException以及其子类
    --Error:错误(严重问题) 
    比如:OutOfMemoryError:超出内存错误
    如果程序出现了错误,只能改代码
    

    创建异常对象,对异常的基本操作:
    1.抛出异常 2.处理异常(捕获异常,将异常获取,使用try/catch做分支处理)
    JVM默认处理异常的方式:(中断处理)
    处理异常的方式:
    1.不处理

    public 返回值类型 方法名(参数)throws xxxException{
    
    }
    

    2.捕获处理

    try{
        可能出现的异常的代码
    }catch(Exception e){
        //处理异常
    }finally{
        //写上必须要执行的代码
        //释放资源的代码
    }
    

    3.其他的处理方式

    多个异常分别处理
    多个个异常一次捕获多次处理
    多个异常一次捕获一次处理
    

    父类方法没有抛出异常,子类覆盖父类该方法时也不可抛出异常。此时子类产生该异常,只能捕获处理。
    打印异常信息:printStackTrace
    1.RuntimeException
    2.ClassCastException 类型转换异常(向下转型的时候)
    3.ArrayIndexOutOfBoundsException 数组下标越界
    4.StringIndexOutOfBoundsException 字符串下标越界
    自定义异常类:
    1.创建一个类,这个类必须用Exception结尾
    2.必须继承Exception 或者 RumtimeException
    3.自定义的异常 至少有两个构造

    a.空参数构造
    b.带有String类型参数构造
    
  9. Object类:是所有类的根类
    boolean equals(Object obj)
    a.Object类中equals方法,比较是两个对象的地址,就是==号的作用
    b.重写 比较两个字符串的内容 比较两个对象的成员变量的值
    String toString();//返回该对象的字符串表示 hashCode()返回该对象的数字表示

  10. 什么叫设计模式?
    把解决问题的方案 总结出一个套路

  11. 代理设计模式
    1.1静态代理设计模式
    1.2动态代理设计模式

  12. date类:日期类

    表示特定的瞬间,精确到毫秒
    

    public Date(); //无参构造
    public Date(long time);
    1.DateFormat是一个抽象类 我们不能用它
    2.我们使用它的一个子类:SimpleDateFormat
    SimpleDateFormat:简单的日期格式化类
    1.构造

    public SimpleDateFormat(String pattern);//以指定的模式 创建一个日期格式化对象
    

    2.成员方法

    public String format(Date d);//格式化一个日期对象,返回格式化后的一个字符串
    public Date parse(String s);//把一个字符串形式的日期,解析成Date对象
    
  13. Calender类
    获取Calendar的子类对象
    获取Calender对象的某个字段 (get)

  14. System类
    它不能被实例化,因为构造方法私有化了
    而且System类中的方法都是静态的,通过类名就可以直接访问
    System.exit(0); //退出JVM
    public static void gc(); //运行java的垃圾回收器(并不是马上运行)
    public static String getProperty(String ProertyName);//获取某一个属性的值
    public static long currentTimeMillis();//获取当前系统的毫秒值

  15. String(不可变) StringBuilder(可变)
    //当出现大量的字符串拼接运算 时 用StringBuilder

  16. 基本数据类型 对应的引用类型
    int Integer
    拆箱:包装类型—>基本类型
    装箱:基本类型—>包装类型

  17. 正则表达式:

  18. javac 生成编译文件

  19. java 执行类文件,出错原因java程序运行class文件,对于有包名的类,java把包名当成文件夹处理.”包名+类名”相当于”文件夹目录+类名”来寻找类。

  20. b = a++ a先赋值,再自增。

  21. mysql Orcale DB2(银行系统) SQLite(手机端) SQLServer SyBase(建模工具PowerDesigner)