什么是面向对象?
类和对象的关系
客观存在的事物皆为对象 ,所以我们也常常说万物皆对象。
类的理解
-
类是对现实生活中一类具有共同属性和行为的事物的抽象
-
类是对象的数据类型,类是具有相同属性和行为的一组对象的集合
-
简单理解:类就是对现实事物的一种描述
类的组成
-
属性:指事物的特征,例如:手机事物(品牌,价格,尺寸)
-
行为:指事物能执行的操作,例如:手机事物(打电话,发短信)
类和对象的关系
-
类:类是对现实生活中一类具有共同属性和行为的事物的抽象
-
对象:是能够看得到摸的着的真实存在的实体
-
简单理解:类是对事物的一种描述,对象则为具体存在的事物,通过类来创建一个对象
成员变量和局部变量的区别
类的构造方法
什么是方法重载?
在一个类中,方法名相同,参数类型或者参数个数不同,就属于方法重载。
==和equals比较
==比较的是栈中的值,基本数据类型的值在栈中,而引用数据类型存放在栈中的是堆中的地址
而Object的equals默认采用的也是==,但是String类的Object对其进行了重写,先比较字符串的长度是否相等,如果相等在比较内容是否相等

final修饰类、成员变量、局部变量、局部内部类和匿名内部类
- final修饰类表示类不能被继承
- final修饰方法表示类不能被重写覆盖,但是可以重载
- final修饰变量一旦变量被复制就不能改变它的值,这一点需要具体分析
- 当修饰类变量的时候(静态成员变量),只能在静态代码块中对其进行初始化,或者声明变量的时候指定初始值。
-
如果 final 修饰的是成员变量,可以在非静态初始化块、声明该变量或者构造器中执行初始值。
-
修饰局部变量可以在声明变量的时候进行初始化,也可以不指定值,等到用到的时候再指定值,但是只能指定一次。
-
如果修饰的是基本类型值一旦确定就不能够修改
-
如果修饰的是引用类型,那么指定对象之后就不能再指向另一个对象,但是对象的内容可以改变
-
为什么局部内部类和匿名内部类只能访问局部 final 变量?
String、StringBuffer、StringBuilder
- String是final修饰的,不可变,每次操作都会产生新的String对象
- StringBuffer和StringBuilder都是在原对象上操作
- StringBuffer是线程安全的,StringBuilder线程不安全的
- StringBuffer方法都是synchronized修饰的
- 性能:StringBuilder > StringBuffer > String
- 场景:经常需要改变字符串内容时使用后面两个
- 优先使用StringBuilder,多线程使用共享变量时使用StringBuffer
重载和重写的区别
集合的体系结构

集合首先分为两种:单列集合,键值对集合。
单列集合的基类是collection,而键值对集合的基类是Map
先说说单列集合collection的子类
— List 有序,可重复
ArrayList
优点: 底层数据结构是数组,查询快,增删慢。
缺点: 线程不安全,效率高
Vector
优点: 底层数据结构是数组,查询快,增删慢。
缺点: 线程安全,效率低
LinkedList
优点: 底层数据结构是链表,查询慢,增删快。
缺点: 线程不安全,效率高
—Set 无序,唯一
HashSet
底层数据结构是哈希表。(无序,唯一)
如何来保证元素唯一性?
1.依赖两个方法:hashCode()和equals()
LinkedHashSet
底层数据结构是链表和哈希表。(FIFO插入有序,唯一)
1.由链表保证元素有序
2.由哈希表保证元素唯一
TreeSet
底层数据结构是红黑树。(唯一,有序)
1. 如何保证元素排序的呢?
自然排序
比较器排序
2.如何保证元素唯一性的呢?
根据比较的返回值是否是0来决定
小汇总(使用方法):如果需要保证唯一,就是用set的子类,如果不用排序就选择hashset,如果需要排序就选择linkedset或者treeset
如果不需要保证唯一,可以使用List的子类,需要保证线程安全,就选Vector,如果不需要保证线程安全就选ArrayList或者LinkedList,根据实际情况选择。
Map接口:
ap接口有三个比较重要的实现类,分别是HashMap、TreeMap和HashTable。
- TreeMap是有序的,HashMap和HashTable是无序的。
- Hashtable的方法是同步的,HashMap的方法不是同步的。这是两者最主要的区别。
List和Set集合的区别
List和Set集合都继承至collection
2498

被折叠的 条评论
为什么被折叠?



