Java基础知识点(三)
前言:准备将Java基础知识点总结成一个系列,用于平常复习并加深理解。每篇尽量做到短小精悍,便于阅读。
1.Math类中相关函数
Math.floor(x):返回不大于x的最大整数。eg:Math.floor(1.4)=1.0。
Math.round(x):该函数会进行“四舍五入”,具体操作:返回小于等于(x+0.5)的最大整数(加0.5然后向下取整)。换算记忆:Math.round(x)=Math.floor(x+0.5)。eg:Math.round(1.4)=Math.floor(1.4+0.5)=1.0。
Math.ceil(x):返回不小于x的最小整数。eg:Math.ceil(1.4)=2.0。
2.switch能否用string做参数
在jdk1.7之前,switch 只能支持 byte、short、char、int 这几个基本数据类型和其对应的封装类型。
switch后面的括号里面只能放int类型的值,但由于byte,short,char类型,它们会自动转换为int类型(精度小的向大的转化),所以支持在switch中使用。
jdk1.7之后,整型、枚举类型、boolean和字符串都可以。原因:jdk1.7之后通过调用switch中string.hashCode,将string转换为int从而进行判断。注意:long类型还是不可以用于switch的。
3.关于重载与重写
具体参考:https://www.cnblogs.com/zheting/p/7751787.html
要点:
1)重载:方法名相同,形参数不同,不能以返回值类型来判断重载。
2)重写:方法名、形参都相同,发生在继承的场景。
4.static的用法
参考:
http://www.cnblogs.com/dolphin0520/p/3799052.html
http://www.cnblogs.com/xrq730/p/4820992.html
要点:
1)通过static修饰的变量或方法,不需要依赖对象,就可以进行访问,当然访问权限不能为private。
2)特别指出构造器不是static的。参考:http://rednaxelafx.iteye.com/blog/652719
3)静态代码块或静态变量的执行顺序为代码上下文书写顺序。
参考:https://blog.csdn.net/u012871251/article/details/53009511
5.hashCode方法
参考:
http://www.cnblogs.com/dolphin0520/p/3681042.html
http://www.cnblogs.com/xrq730/p/4842028.html
要点:
1)hashCode()方法为Object类中的方法,该方法为native方法。
2)hashCode()方法的返回值,不仅仅为内存地址。
3)在重写equals()方法时,有必要重写hashCode()方法。
6.关于强引用、软引用、弱引用和虚引用
1)强引用就是指在程序代码之中普遍存在的,类似"Object obj = new Object()"这类的引用,只要强引用还存在,垃圾收集器永远不会回收掉被引用的对象。
2)软引用是用来描述一些还有用但并非必需的对象,对于软引用关联着的对象,在系统将要发生内存溢出异常之前,将会把这些对象列进回收范围进行第二次回收。如果这次回收还没有足够的内存,才会抛出内存溢出异常。在JDK1.2之后,提供了SoftReference类来实现软引用。
3)弱引用也是用来描述非必需对象的,但是它的强度比软引用更弱一些,被弱引用关联的对象,只能生存到下一次垃圾收集发生之前。当垃圾收集器工作时,无论当前内存是否足够,都会回收掉只被弱引用关联的对象。在JDK1.2之后,提供了WeakReference类来实现弱引用。
4)虚引用也成为幽灵引用或者幻影引用,它是最弱的一中引用关系。一个对象是否有虚引用的存在,完全不会对其生存时间构成影响,也无法通过虚引用来取得一个对象实例。为一个对象设置虚引用关联的唯一目的就是能在这个对象被收集器回收时收到一个系统通知。在JDK1.2之后,提供给PhantomReference类来实现虚引用。
参考:
http://www.cnblogs.com/dolphin0520/p/3784171.html
http://www.cnblogs.com/xrq730/p/7082471.html
7.内部类
具体参考:http://www.cnblogs.com/dolphin0520/p/3811445.html
8.ArrayList中不能用For-Each循环中删除元素
具体参考:https://zhuanlan.zhihu.com/p/25744271
要点:
1)不用foreach循环,删除是不会报错的。
2)用foreach在删除倒数第二个元素时不会报错。
9.值传递问题
具体参考:https://www.cnblogs.com/chen-kh/p/6696303.html
要点:
java中都是值传递操作。
10.Java序列化
1)首先理解序列化的含义,参考:https://www.cnblogs.com/iOS-mt/p/6600177.html
2)几种实现序列化的方式,参考:https://blog.csdn.net/pistolove/article/details/60321123
11.Java中动态代理的两种方式以及区别
一般而言动态代理分两种:1)是JDK反射机制提供的代理;2)是CGLIB代理。
其实现方式,参考:https://www.cnblogs.com/lxcmyf/p/6433018.html
其区别,参考:https://blog.csdn.net/qq_27093465/article/details/53340513
12.类与继承
参考:http://www.cnblogs.com/dolphin0520/p/3803432.html
注:文章中所有构造器都是static的,这是不正确的。
by Shawn Chen,2018.4.2日,晚。