什么是面向对象编程?
面向过程:按照步骤解决问题
面向对象:把构成问题的各个事物分解成各个对象,对象作为程序基本单位,将程序和数据封装其中,以提高程序的重用性、灵活性和可扩展性。
Java三大特性
封装
继承
多态性
Java八种基本数据类型
8种基本数据类型:
byte、short、int、long
float、double
boolean
char
3种引用数据类型:
对象、数组、接口
Java多线程实现方法
Thread —— 类,继承
Runnable——接口,实现implement
实现Callable接口通过FutureTask包装器来创建Thread线程
使用ExecutorService、Callable、Future实现有返回结果的多线程
Thread类中的start()和run()方法有什么区别?
- start():作用是启动一个新线程,新线程会执行相应的run()方法,不能被重复调用;
- run():可以被重复调用,单独调用run()的话,会在当前线程中执行run(),不会启动新线程
三个线程T1、T2、T3,如何确保它们按顺序执行?
- join():等待线程结束,可以实现线程按顺序执行
编写一个线程安全的单例模型
https://www.cnblogs.com/x_wukong/p/3962315.html
String、StringBuilder、StringBuffer三者区别
- 运行速度/执行速度:StringBuilder > StringBuffer > String
- String是字符串常量(char保存),对象创建之后不可更改;前两者是字符串变量,是引用类型,是可以更改的。
- 线程安全:StringBuilder是线程不安全的,StringBuffer是线程安全的。
- StringBuffer中很多方法可以带有synchronized关键字,所以可以保证线程安全;
- StringBuilder的方法则没有synchronized关键字
- 多线程-StringBuffer 单线程-StringBuilder
- 结论:
- String:适用于少量的字符串操作情况
- StringBuilder:适用于单线程下在字符缓冲区进行大量操作的情况
- StringBuffer:适用于多线程下在字符缓冲区进行大量操作的情况
垃圾回收
与垃圾回收相关的JVM参数
-Xms/-Xmx —— 堆的初始大小/堆的最大大小
-Xmn —— 堆中年轻代的大小
-XX:-DisableExplicitGC ——让System.gc()不产生作用
-XX:+PrintGCDetail —— 打印GC的细节
-XX:+PrintGCDateStamps —— 打印GC操作的时间戳
Java中final关键字有哪些用法
1、修饰类:表示该类不能被继承;
2、修饰方法:表示方法不能被重写;
3、修饰变量:表示变量只能一次赋值,值不能被修改,即是常量
数据类型之间的转换
1)如何将字符串转换为基本数据类型?
2)如何将基本数据类型转换为字符串?
1)调用基本数据类型对应的包装类中的方法parseXXX(String)或者valueOf(String)即可返回基本类型。
2)方法一:将基本数据类型与空字符串连接(+);
方法二:调用String类中的valueof()方法返回相应字符串。
Error和Exception有什么区别?
Error:表示系统级的错误和程序不必处理的异常,是恢复不是不可能 但很困难的情况下的一种严重问题,比如内存溢出。
Exception:表示需要捕获或者需要程序运行处理的异常,是一种设计或实现问题,也就是说如果程序运行正常,从不会发生的情况。
try()里有一个return语句,那么紧跟在这个try后的finally{}里面的code会不会被执行?什么时候被执行,return之前还是之后?
会执行。在方法返回调用者之前执行。因此,若finally修改返回值,可能会导致问题。
final,finally,finalize的区别
final:修饰符,可以修饰类、方法、变量。
finally:通过放在try catch的后面构造总是执行的代码,可以将释放外部资源的代码写在finally块中。
finalize:Object中定义的方法,Java中运行使用finalize()方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在销毁对象时候调用。