1.面向对象的特征:
(1)封装:将成员变量私有化,不让外界访问,提供公共的set和get方法;
构造方法:1)类名和方法名相同.2)没有void.3)构造方法可以重载
(2)继承:可以让某个对象获得另外一个类型对象的属性和方法
(3)多态:一个类实例的相同方法在不同情况下的不同表现形式.
多态的前提条件:1)有继承关系.2)存在方法重写.3)父类引用指向子类对象.
2.final,finally和finalize的区别:
(1)final:修饰类:该类不可以被继承;修饰成员变量:该变量是自定义常量;修饰成员方法:该方法不能被重写
局部内部类访问局部变量,该变量被final修饰.
(2)finalize:和gc有关,垃圾回收器,回收不用的对象,底层重写类object类的finalize()方法.
(3)finally:释放资源,IO流使用频繁,该语句中的代码一定会被执行,除非jvm退出.
3.String,StringBuffer和StringBuilder的区别?
String:不可变的字符串序列,一旦被赋值,其值不可以改变,String类耗费内存.
Stringbuffer:可变的字符序列:构造字符串缓冲区,线程安全,同步,但是效率低.
Stringbuilder:可变的字符序列:线程不安全,不同步,效率高.
4.集合和数组的区别?
1)长度:数组:长度固定;集合:长度可变
2)存储类型的区别:
数组:既可以存储基本数据类型,也可以存储引用数据类型.
集合:只可以存储引用数据类型.
3)存储数据类型元素的区别:
数组只可以存储同一种数据类型.
集合可以存储多种类型的数据.
5.IO流:
字节流:FileInputStream;BufferedInputStream;DataInputStream;ObjectInputStream;
字符流:BufferedReader;InputSrtreanReader---->FileReader; 输出流类似
6.多线程:
(1)线程安全的检测标准:
看当前执行环境是否是多线程的.
看当前程序是否有共享数据.
是否有多条语句对共享数据进行操作.
----解决方案:
同步机制:Synchronized:同步机制对多条语句进行共享数据的包装
锁定操作:lock接口---ReentrantLock:执行效率低:等待唤醒机制:生产者消费者模式
(2)多线程的实现方式
1)自定义类继承Thread类:
重写run方法--创建该类对象---启动线程:start()方法
2)自定义类实现runnable接口
实现run()方法--创建该类对象,统一资源--创建Thread类对象,将上步的对象作为参数传递
3)创建线程池对象--自定义类实现Callable接口,实现call方法--结束