31:多态是什么,前提是什么? 多态:对象在不同时刻表现出来的多种状态。是一种编译时期状态和运行时期状态不一致的现象。 成员变量:编译看左边,运行看左边。 成员方法:编译看左边,运行看右边。因为,普通成员方法可以重写,变量不可以。 静态方法:编译看左边,运行看左边。 前提:类与类之间要有继承关系。要有方法的重写。父类引用指向子类对象。
32:多态的好处及弊端?如何解决多态的弊端。 好处:提高了程序的可维护性(前提要有继承保证),和扩展性。 弊端:不能使用子类的特有功能。
33:什么是抽象类?抽象类的特点和好处是什么? 相同的方法,有相同方法的声明,但是方法体不一样,只抽取方法声明的方法,叫做抽象方法,有抽象方法的类,叫做抽象类。 特点: A:类或者方法必须用abstract修饰。 B:具体类在继承抽象类的时候,要么本身也是抽象类,要么实现抽象类中的所有抽象方法。 C:抽象类不能被实例化。要想使用,必须按照多态的方式使用。 D:成员特点: a:成员变量 可以是变量,也可以是常量。 b:构造方法 有构造方法,但是不能实例化。 用于子类访问父类数据的初始化。 c:成员方法 可以有抽象方法也可以有非抽象方法。 好处: A:限定子类必须实现某些功能。 B:提高代码的复用性。 抽象类的几个问题: A:抽象类不能实例化,构造方法有什么用。 用于子类访问父类数据的初始化。 B:抽象类没有抽象方法,有什么意义? 限制创建对象。 C:abstract不能和哪些关键字共存? final: 冲突 private: 冲突 static: 无意义
34:什么是接口? 接口的特点? 如果一个抽象类中的方法全部是抽象方法,那么java就针对这种类型的抽象类,给出了一个更抽象的表达式:接口。 特点: A:所有的方法,都是抽象方法。 B:类实现接口 要么本身是抽象类,要么重写接口中的抽象方法。 C:接口不能被实例化,要想使用,用多态。 D:成员特点 a:成员变量 只有常量,并且是静态常量。默认修饰符:public static final b:构造方法 没有构造方法,子类数据的初始化默认走的是Ojbect类的构造方法 c:成员方法 全部是抽象的,有默认修饰符:public abstract
35:抽象类和接口的区别? (*面试题) A:成员区别 抽象类: 成员变量:可以是变量,也可以是常量。 构造方法:有。 成员方法:有,可以是抽象的,也可以是非抽象的。 接口: 成员变量:只能是常量。默认修饰符:publci static final 构造方法:没有,子类数据的初始化默认走的是Ojbect类的构造方法。 成员方法:只能是抽象的,默认修饰符是:public abstract B:类与接口的关系区别 类与类: 继承关系,单继承。 类与接口: 实现关系,单实现、多实现。 接口与接口: 继承关系,单继承、多继承。 C:设计理念的区别 抽象类被继承体现的是:is a的关系。抽象类中一般定义的是整个继承结构的共性功能。 接口被实现体现的是:like a的关系。接口中一般定义的是整个继承结构的扩展功能。
36,什么是内部类?有什么特点? 把类定义在其他类的内部,就被称为内部类。 内部类的访问特点: A:内部类可以直接访问外部类的成员,包括私有。 B:外部类要访问内部类的成员,必须创建对象。
37,为什么内部类访问局部变量必须加final修饰?(*面试题) A: 防止在使用后数据发生改变。 B: 延长变量的生命周期。
38,什么是匿名内部类?本质是什么? 匿名内部类就是没有名字的内部类。 格式: new 类名或者接口名() { 重写方法; }; 本质:是继承类或者实现接口的子类匿名对象。
39,==和equals()的区别? (*面试题) A:== a:基本类型 比较的是基本类型的值 b:引用类型 比较的是引用类型的地址值 B:equals() 只能比较引用类型。 默认比较地址值。
40,什么是字符串?字符串的特点是什么? 字符串:由多个字符组成的一串数据。 特点:一旦被赋值就不能被改变。(*面试题) 注意:这里指的是字符串的内容不能发生改变。而字符串的引用是可以再次赋值的。
41:Strings1 = new String("hello");和String s2 ="hello";的区别?(*面试题) 有区别,区别是:前者创建了两个对象,后者创建了一个对象。
42:String、StringBuffer、StringBuilder的区别?(*面试题) String:字符长度是固定的。 StringBuffer/StringBuilder:字符长度是可变的。 StringBuffer:安全的,但效率较低一些。 StringBuilder:不安全的,但效率较高一些。 StringBuffer和StringBuilder兼容。
43:什么是基本数据包装类? 为了对基本类型的数据进行更多的操作的,java就针对每种基本类型的数据提供了对应的包装类类型。 对应的类型 byte Byte short Short int Integer long Long float Float double Double char Character boolean Boolean
44:什么是正则表达式? 正则表达式就是符合一定规则的字符串。
45:集合和数组有什么区别?(*面试题) 集合: 长度可以发生改变。 只能存储对象类型,引用类型。 可以存储任意类型的对象。 数组: 长度固定。 可以存储基本类型,也可以存储引用数据类型。 只能存储同一种类型的元素。
46:集合有多少种? 各自的特点是什么? Collection |--List 有序(存入和取出的顺序一致),元素可重复 |--ArrayList 底层数据结构是数组,查询快,增删慢。 线程不安全,效率高。 |--Vector 底层数据结构是数组,查询快,增删慢。 线程安全,效率低。 |--LinkedList 底层数据结构是链表,查询慢,增删快。 线程不安全,效率高。 |--Set 无序的 元素唯一 |--HashSet |--TreeSet
47:泛型是什么?有什么用?在哪里用?泛型有什么好处和弊端? 泛型是一种把明确数据类型的工作推迟到创建对象或者调用方法的时候才去明确的特殊的数据类型。 能优化程序设计,解决了黄色警告线问题。 把运行时期的异常提前到了编译时间。 避免了强制类型转换。 好处: 优化了程序的设计,解决了黄色警告线的问题。 把运行时期的问题提前到了编译时期间解决了。 避免了强制类型转换。 弊端:让类型统一了,不能存储不同的数据类型了。
48:用迭代器遍历集合的时候,用集合修改集合有没有问题?如果有,怎么解决?(*面试题) 有问题,因为会出现并发修改异常。 解决方法有多种,比如,我们可以不通过集合来修改集合,而使用迭代器来修改集合。 像ListIterator迭代器就有添加方法。
49、HashSet如何保证元素唯一性的呢? 底层数据结构是哈希表(散列表)。具体的是由一个元素是单向链表的数组组成。 它依赖于两个方法:hashCode()和equals()方法。 执行顺序: 先判断hashCode()是否相同, 如果相同 继承执行equals()方法,看其返回值: true:元素重复,不存储。 false:元素不重复,存储。 如果不同 存储。 记住: 看到HashXxx结构的集合,就要知道,被该集合存储的元素要重写hashCode()和equals()方法。 而且,是自动生成的。
50、TreeSet底层数据结构是什么?如何保证元素的唯一性的呢? 底层数据结构是二叉树。 根据比较的返回值是否是0来决定。 如何保证元素的排序的呢? A:自然排序 元素具备比较性 让集合中被存储的元素所属的类实现Comparable接口。 B:比较器排序 集合具备比较性 在创建集合对象的时候,让构造方法接收一个Comparator接口的子类对象。 自然排序和比较器排序的区别: TreeSet构造函数什么都不传, 默认按照Comparable(接口,compareTo(T))的顺序(没有实现Comparable就报错ClassCastException) TreeSet如果传入Comparator(接口compare(T1,T2)), 就优先按照Comparator
|