简单的一些不怎么用的java知识总结。

1.Double类型

java浮点数分3类,正无穷大(Double.POSITIVE_INFINITY),负无穷大(Double.NEGATIVE_INFINITY)和非数字(Double.NaN)。判断用Double.is*** 静态方法。

2. UTF-16

java中,用UTF-16编码字符。对于我们常用的所谓的基本的多语言级别的代码,用16位表示一个字符,称为代码单元(code unit);而特殊的辅助字符,则用两个16位表示,即两个代码单元。

所以,对字符串中每个字符的便利和提取相对复杂一些(尽管我们并不怎么需要便利字符串)。字符串中,每个字符称为代码点,而一个代码点可能占1个代码单元,也可能占两个代码单元。String的length()方法返回的是代码单元的数量,charAt(n)返回的是n位置上代码单元的字符。而String的以codePoint开头的方法才是针对代码点的。比如codePointCount(0,length)返回0到length中字符串中代码点的个数。codePointAt(i)返回i位置的codePoint,即字符。 所以遍历字符,需要

for(int i;i

int cp = str.getCodePointAt(i);

if(Character.isSupplymentaryCodePoint(cp)) i+=2;

else i++;

...

}

3.一种将Date转化为String的方法。

String time = String.format("%tY-%

输出为 : 2014-12-13 23:32:48

这里,%t* 表示一种时间,比如%tY表示4位时间,2014;%

4、单利模式一定安全?

其实,可以通过反射调用私有构造函数。防治办法是在私有方法里抛出异常。

5.终结方法

终结方法虽然存在,但未必好用。一般,其运行时不可预测的,而且会造成程序性能下降,调用此方法回收内存是不可行的。一个对象的终结方法和整个JVM的GC的线程拥有的优先级很低,且其调用是不被保证的。

其实,jvm提供了强大的垃圾回收机制,内存管理,就托管给JVM就可以了,我们的干预顶多是在代码和一些JVM参数上做文章。当然,一般程序中还会涉及非内存的资源,比如网络连接等,这些资源的释放应该放在finally中进行。

同时,System.gc和System.runFinalization两个方法只能增加gc执行的可能性,并不能确保gc发生。而使用它们,却会造成系统性能的很大损失。

《Effctive Java》中认为两种情况因可以使用终结方法,一种是对于链接的资源,如果使用了终结方法,那么总会被释放,但是明显这会引起性能的问题,而正确的释放仍然是在finally中释放;另一种情况是针对本地对象。虽然Java是跨平台的,但是Java的实现并不是跨平台的,不同平台会绑定不同的java本地对象,而操作这些对象的普通java对象的回收并不会引起本地对象的资源回收(我觉得这是android手机慢的一个原因)。如果本地对象与外部重要资源关联,那么应该在finally中释放,不然,用终结方法释放是合适的。

但是有一点需要注意,当对象重写了终结方法,一定要调用父类的终结方法,不然父类的终结方法将得不到执行。

6.静态工厂方法创建对象的缺点

如果没有共有的构造方法,那么这个类相当于不能被其他类继承,因为子类必须可以调用父类的构造方法,否则无法实例化;但是有工厂,又有方法,就有些混乱了。同时,静态方法其实也是普通的方法,如果说有区别,那区别也只是工厂方法一定会返回一个构造函数构造的对象。

例如下面例子:

/**

* 想继承这个类,子类的构造函数必须调用SuperClassHelper(int i)。

*

*/

public class SuperClassHelper {

@SuppressWarnings("unused")

private SuperClassHelper() {

}

public SuperClassHelper(int i) {

}

}

7.java的内存泄露

java提供了良好的GC机制,但是java毕竟是计算机语言,无法智能的对一切不可用的垃圾进行回收。所以,其实JVM仍然可能发生内存泄露。一种情况就是一直保持着对过期对象的引用,比如对数组中对象不清理,而只是移动表示其范围的下标,或者对HashMap不停添加新的键值对进去,但对于过期和应该删除的键值对不做处理。这样,逻辑上无用的对象是不必要继续保留的,但是却会一直留在JVM中,这边导致了内存泄露。另一种导致内存泄露的情况是缓存,缓存引起的内存溢出其实也是没有清理不用的对象,特别的地方是缓存不用的对象并不像一般的对象那么明显。对于前一种情况,应该采取显示的清理方法,比如 elements[i]=null;对于后一种情况,可以采用弱引用,比如WeakedHashMap。

8.Object自身方法

equals和hashCode方法关注对象实例的相同的域。equals关系要求满足自反,对称,传递和一致。equals的对象之间的hashCode方法返回相同的int。重写equals方法必须重写hashCode方法,否则很多基于hashCode方法的行为将出现想象不到的结果,比如HashMap,其在找桶的阶段调用hashCode方法,而在找到桶后,确定对象的阶段调用equals,显然这两个方法有紧密的联系。对于hashCode方法,冗余的域可以不加入计算,这样可以减少计算量。

clone方法是object的一个受保护的方法,cloneable接口表示这个类是可复制的,它决定了object中clone方法的行为:逐域复制。意义是,clone放回一个新的对象,这个新对象在jvm堆上,与原对象同类型,且equals返回true。clone并没有调用构造器。clone的本意是全新的,但是默认情况下是浅复制,深复制需要手动重写方法实现。见这里。顺便提一点,comparable最好保持compareTo和equals是一致的。因为对于有序集合,比如TreeSet,其调用的是comrateTo,而对于无序的HashSet,则调用equals。

java有点_JAVA 有点儿冷相关推荐

  1. 【源码+教程】Java课设项目_12款最热最新Java游戏项目_Java游戏开发_Java小游戏_飞翔的小鸟_王者荣耀_超级玛丽_推箱子_黄金矿工_贪吃蛇

    马上就要期末了,同学们课设做的如何了呢?本篇为大家带来了12款热门Java小游戏项目的源码和教程,助力大家顺利迎接暑假![源码+教程]Java课设项目_12款最热最新Java游戏项目_Java游戏开发 ...

  2. 黑马程序员全套Java教程_Java基础教程_异常(含扩展)(二十三)

    黑马程序员全套Java教程_Java基础教程_异常(含扩展)(二十三) 1.1 异常概述与异常体系结构 1.2 JVM遇到异常时的默认处理方案 1.3 异常处理 1.4 异常处理之try--catch ...

  3. json与java反射_Java 对象的 Json 化与反 Json 化

    最近在家里修习 Java 这项技能,估计快点满技能点儿了,很开心.不过遇到了一个问题,困扰了我一阵子.问题是这样的,我要写 Android App,与服务器交互.大家都知道 Javascript 不知 ...

  4. java理念_java温故而知新(9)OOP(面向对象编程)理念

    Object   Oriented   Programming   (面向对象的程序设计) 1.定义 面向对象程序设计(OOP)的具体定义很难下,也很容易因此而引起争论,在   Object-Orie ...

  5. 普罗米修斯监控java项目_java学到什么程度可以出去实习?

    把基础的知识学完,然后再学个框架,比如常见的SSH,SSM之类的,自己能用这个框架做个简单的项目,就可以了 简单的来说就是把下方的视频教程学完就可以找工作了(需要完整的资料可以找up) Java零基础 ...

  6. 简单计算机java程序_JAVA程序员需要知道的计算机底层基础10-操作系统引导程序的简单...

    JAVA程序员需要知道的计算机底层基础10-操作系统引导程序的简单 JAVA程序员需要知道的计算机底层基础10-操作系统引导程序的简单制作 汇编实现引导程序 ; 文件名 boot.asm org 7c ...

  7. java 百家姓_java判断姓是否合格 百家姓

    java判断姓是否合格 百家姓 package util; import java.lang.reflect.Array; public class FirstName { public static ...

  8. rotate java 参数_java rotateLeft()和rotateRight()方法

    这两个方法实现的思想是循环左移和循环右移.首先来理解这两个概念 循环移位就是把数值变成二进制,然后循环移动的过程:换句话说,循环移位就是将移出的低位放到该数的高位(循环右移)或把移出的高位放到该数的低 ...

  9. Ajax接收Java异常_java – 处理来自Servlet的Jquery AJAX响应中的异常

    我的servlet代码是 try{ //something response.setStatus(201); out.print("Data successfully saved" ...

最新文章

  1. mongodb 安装与卸载
  2. 位域 内存 字节序_C语言中的位域、字节序、比特序、大小端(转)
  3. 有序序列中的i个最大数(算法导论思考题9-1)
  4. DHPST云主机分销系统源码
  5. mysql获取分组后每组的最大值
  6. Caffe学习:pycaffe利用caffemodel进行分类=裁剪图片
  7. OCP4.4 部署EFK-使用local-volume持久化
  8. php k线15分钟 30分钟,成功率极高的“分时K线战法”:15分钟K线战法+30分钟K线战法...
  9. Android开机自动循环播放视频
  10. java 分别输出姓和名_用java输出姓名和学号 编程输出学号和名字 java语言
  11. excel sql python_报表自动化,三流用Excel,二流用Python,一流用它
  12. mysql唯一key_MySQL唯一约束(UNIQUE KEY)
  13. Android开发——贝塞尔曲线解析
  14. 邮件的发送与接收原理
  15. Objective-C中的消息发送总结
  16. 美服无限火力是哪个服务器,无限火力再度来袭 美服已经上线国服还会远吗?...
  17. 鸡兔同笼问题----已知鸡和兔的总数量为n,总腿数为m,输入n和m,依次输出鸡的数目和兔的数目。如果无解,则输出 No answer。
  18. SQL Server与SQL Server Express的区别
  19. 年龄越大,越难找到好工作,超过40岁失业了能找什么样的工作?
  20. Ant Design Vue <a-upload>上传文件

热门文章

  1. 巴黎新式婴儿饼干,你敢吃吗?
  2. 前端通信:ajax设计方案(十)--- 完善Promise A+规范,增加mock数据功能
  3. TensorFlow的基础概念03
  4. Prim算法和Dijkstra算法的异同
  5. .net托管环境下struct实例字段的内存布局(Layout)和大小(Size)
  6. [摘录]第8章 与非美国人谈判的技巧
  7. HTML5权威指南--Web Storage,本地数据库,本地缓存API,Web Sockets API,Geolocation API(简要学习笔记二)...
  8. 同时运行多个scrapy爬虫的几种方法(自定义scrapy项目命令)
  9. 第八周项目5-定期存款利息计算器
  10. AndroidManifest.xml配置文件详解