Java基础的个人笔记

1.final关键字的基本用法(修饰符)

修饰类,使之不能被继承,修饰方法,使之不能被使用,修饰成员变量来表示常量

参考:https://www.cnblogs.com/xiaoxi/p/6392154.html

 

2.文件流(IO)

String fileName = "D:\\Hello.txt";

\\第一个\是转义符,在表示文件地址时要么使用/要么使用\\

 

3.代码块

1.普通代码块:

类中方法的方法体

2.构造代码块

构造块会在创建对象时被调用,每次创建时都会被调用,优先于类构造函数执行。

3.静态代码块:

用static{}包裹起来的代码片段,只会执行一次。静态代码块优先于构造块执行。

4.同步代码块:

使用synchronized(){}包裹起来的代码块,在多线程环境下,对共享数据的读写操作是需要互斥进行的,否则会导致数据的不一致性。同步代码块需要写在方法中。

 参考:https://www.jb51.net/article/129990.htm

 

4.Math函数

Math.floor()   表示向下取整,返回double类型   (floor---地板)
Math.ceil()   表示向上取整,返回double类型    (ceil---天花板)
Math.round()  四舍五入,返回int类型
 
5.溢出
堆溢出 heap overflow: 不断的 new 一个对象,一直创建新的对象。
栈溢出 stack overflow:死循环或者是递归太深,递归的原因,可能太大,也可能没有终止。
整数,如 int 溢出 (integer overflow):由于计算机中整数都有一个宽度(本文中为32位),因此它就有一个可以表示的最大值。当我们试图保存一个比它可以表示的最大值 (java..lang.Integer.MAX_VALUE) 还大的数时,就会发生整数溢出。
参考:https://www.oschina.net/question/2551725_2284831?sort=time
 
6.操作系统的进程区
一条进程的栈区、堆区、数据区和代码区在内存中的映射
    1>栈区:主要用来存放局部变量, 传递参数, 存放函数的返回地址。.esp 始终指向栈顶, 栈中的数据越多, esp的值越小。
    2>堆区:用于存放动态分配的对象, 当你使用 malloc和new 等进行分配时,所得到的空间就在堆中。动态分配得到的内存区域附带有分配信息, 所以你  能够 free和delete它们。
    3>数据区:全局,静态和常量是分配在数据区中的,数据区包括bss(未初始化数据区)和初始化数据区。
注意:
    1)堆向高内存地址生长;
    2)栈向低内存地址生长;
    3)堆和栈相向而生,堆和栈之间有个临界点,称为stkbrk。
 
另一种解释,更通俗易懂
1.方法区(Method Area) 存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据
2.堆(Heap) 存放对象实例,几乎所有对象实例都在这里分配内存
3.虚拟机栈(VM Stack) 描述的是Java方法执行的内存模型:每个方法在执行的同时会创建一个Stack Frame(方法运行时的基础数据结构)用于存储局部变量表、操作数栈、动态连接、方法出口等信息
4.本地方法栈(Native Method Stack)  与虚拟机栈了类似,不过则为虚拟机使用的到的Native方法服务。(有的虚拟机譬如Sun HotSpot虚拟机直接把本地方法栈和虚拟机栈合二为一)
5.程序计数器(Program Counter Register) 可看作当前线程所执行的字节码的行号的标识器
 
7.异常
链接:https://www.nowcoder.com/questionTerminal/a267c0cac51640c1a4a2edc81c094a0e
来源:牛客网

通常,Java的异常(包括Exception和Error)分为 可查的异常(checked exceptions)和不可查的异常(unchecked exceptions)
可查异常(编译器要求必须处置的异常): 正确的程序在运行中,很容易出现的、情理可容的异常状况 。 可查异常虽然是异常状况,但在一定程度上它的发生是可以预计的,而且一旦发生这种异常 状况,就必须采取某种方式进行处理。

除了RuntimeException及其子类以外,其他的Exception类及其子类都属于可查异常。这种异常的特点是Java编译器会检查它,也就是说,当程序中可能出现这类异常,要么用try-catch语句捕获它,要么用throws子句声明抛出它,否则编译不会通过。

不可查异常(编译器不要求强制处置的异常):包括运行时异常(RuntimeException与其子类)和错误(Error)。

Exception 这种异常分两大类运行时异常和非运行时异常(编译异常)。程序中应当尽可能去处理这些异常。

运行时异常: 都是RuntimeException类及其子类异常,如NullPointerException(空指针异常)、IndexOutOfBoundsException(下标越界异常)等,这些异常是不检查异常,程序中可以选择捕获处理,也可以不处理。这些异常一般是由程序逻辑错误引起的,程序应该从逻辑角度尽可能避免这类异常的发生。

运行时异常的特点是Java编译器不会检查它,也就是说,当程序中可能出现这类异常,即使没有用try-catch语句捕获它,也没有用throws子句声明抛出它,也会编译通过。

非运行时异常 (编译异常): 是RuntimeException以外的异常,类型上都属于Exception类及其子类。从程序语法角度讲是必须进行处理的异常,如果不处理,程序就不能编译通过。如IOException、SQLException、ClassNotFoundException等以及用户自定义的Exception异常,一般情况下不自定义检查异常
重点:非RuntimeException一般是外部错误(非Error),其必须被 try{}catch语句块所捕获
 
8.Map(散列表)
链接:https://www.nowcoder.com/questionTerminal/98bd477e12d64dc2bcdca4b889028eb6
来源:牛客网

A选项Map属于接口类型,不可以new的方式创建对象。所以A错误。
B选项SortedMap属于接口类型,不可以new的方式创建对象。所以B错误。
C选项HashMap基于哈希表实现Map接口的类,并允许Key为null的值和value为null键
D选项TreeMap通过红黑树实现Map接口的类,key不可以为null,会报NullPointerException异常,value可以为null。
 
 
posted @ 2019-07-03 19:36  shiniad  阅读(105)  评论(0)    收藏  举报