jdk和jre
jdk 是Java开发工具包,提供Java运行环境+开发环境
jre是运行环境;
jdk包含jre、开发和调试工具、分析工具。
java基本数据结构类型
Boolean 1位
char 2字节
byte 1字节
short 2字节
int 4字节
long 8字节
float 4字节
double 8字节
内存泄漏与内存溢出
内存溢出:程序运行过程中,系统无法分配足够需要的内存,于是产生溢出;(只能放个苹果却非要放个西瓜)
内存泄漏:程序逻辑有问题,在堆上申请的内存无法释放,以至于内存越用越少;
如何避免内存泄漏与溢出:
及时回收垃圾,尽早释放无用对象;
尽量少使用静态变量,因为静态变量是全局的,GC不会回收。
尽量使用stringbuffer,少使用string
final关键字
修饰类,类不能被继承;
修饰方法,方法不能被重写(可以重载);
修饰变量,变量初始化后不能被修改。
Math.round
Math.round(1.5) = 2;
Math.round(-1.5) = 0;
原因:在数抽上表示为例,(0.5)是向右取整的。
String的常用方法:
indexOf():返回指定字符的索引。
charAt():返回指定索引处的字符。
replace():字符串替换。
trim():去除字符串两端空白。
split():分割字符串,返回一个分割后的字符串数组。
getBytes():返回字符串的 byte 类型数组。
length():返回字符串长度。
toLowerCase():将字符串转成小写字母。
toUpperCase():将字符串转成大写字符。
substring():截取字符串。
equals():字符串比较。
接口和抽象类的区别:
一个类可以实现多接口,但只能继承一个抽象类;
实现接口用implements,继承用extends;
接口没有构造方法和main方法,抽象类有;
接口中的所有方法都必须用public修饰,抽象类中则任意修饰符。
Java中的IO流:
输入流,输出流
字节流:以字节为单位,8位传输,用于传输数字、字母等数据。
字符流:以字符为单位,16位传输,用于传输中文字符等数据。
使用:先创建文件,根据要输入的文本内容选择字节流还是字符流。
字节流接口:InputStrem和OutputStrem都是接口,接口是不能被实例化的,我们只能使用它的实现类,例如FileInputStrem和FileOutputStrem,可传入byte型数据。
FileInputStream fileInputStream = new FileInputStream(file)
int read = fileInputStream.read(bytes);
字符流接口:Reader和Writer。
实现类:
InputStremReader,可传输char型数据,创建一InputStremReader对象,可以在这里传入两个参数,第一个是一个字节流,也就是说这个InputStremReader是需要传入一个字节流的,第二个是它可以传入编码格式。
InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream,"gbk");
FileReader,不需要传上述参数,可直接传入file。
FileReader filereader = new FileReader(file);
BufferedReader(缓冲流),BufferedReader需要接收一个字符流 InputStreamReader,然后就可以直接调取readLine方法进行整行读取,会得到一个字符串,可以直接输出,因为是整行读取可以保持格式不乱。
FileInputStream fileInputStream = new FileInputStream(file);
InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream);
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
BIO、NIO、AIO 有什么区别?
BIO:同步阻塞式,即传统式IO,
NIO (New I/O):同时支持阻塞与非阻塞模式,
AIO ( Asynchronous I/O):异步非阻塞 I/O 模型。