从网上下的java解惑总共讲了61点,我拣一些,自己不知道的或者需要注意的分享出来,以作笔记。
20.程序中的Unicode转义字符
//\u0022是双引号的Unicode编码表示
System.out.println("a\u0022.length() + \u0022b".length());// 2
\u0022表示一个双引号",可以在编码时用\u0022代替双引号,当然不会有人干这么二的事情,但我们需要知道\u开头的4个数字表示unicode编码的字符,Unicode编码表示的字符是在
编译期间就转换成了普通字符,它与普通转义字符(如:\")是不一样的,它们是在程序被解析为各种符号之后才处理转义字符序列。
此外,注释中也是支持Unicode转义字符的。
23.string的编码,默认是utf-8或者gbk编码,在将string和byte[]互相转化的时候要注意编码类型,否则容易出现乱码
String s = "你号";//默认是UTF-8编码
byte[] bs = s.getBytes("GBK");//去GBK编码的bytes,
System.out.println(bs.length);//GBK长度为4,UTF-8为6
String s1 = new String(bs, "GBK");//如果不用GBK会乱码,因为默认的是utf-8
System.out.println(s1);
ISO8859-1是唯一能够让该程序按顺序打印从0到255的整数的缺少字符集,这也是唯一在字符和字节之间一对一的映射字符集。所以ISO-8859-1不能存储汉字,这点要注意,如果把某汉字字符串用iso-8859-1编码后,就乱码了,也再也还原不出原汉字了。
24.string的replace和replaceAll
举个例子,将.class的.替换为\$如何写?如果是replace,可以这么写:
System.out.println(".class".replace(".", "\\$"));
。
如果是replaceAll.按照上面写法System.out.println(".class".replaceAll(".", "\\$"));会出错结果是$$$$$$,为何?因为replaceAll的第一个参数是正则表达式,因此要匹配.,需要转义因为.在正则表达式里表示任意字符。第二个参数里的\和$也需要转义,因此\的转义是\\\\,$的是\\$。因为replaceAll实际调用正则表达式里的replaceAll:Pattern.compile(regex).matcher(str).replaceAll(repl),这个函数要求需要将\和$转义,因为这2个字符有特殊用处,
引用
美元符号可视为到如上所述已捕获子序列的引用,反斜线可用于转义替换字符串中的字面值字符。
所以正确写法:
System.out.println(".class".replaceAll("\\.", "\\\\\\$"));
26. finally与中断
不要用return、break、continue或throw来退出finally语句块,并且千万不要允许受检查的异常传播到finally语句块之外。也就是说不要在finally块内终止程序,而是执行完finally块后,要将控制权移交给try块,由try最终决定怎样结束方法的调用。因为如果在finally里执行return,则try的ruturn则无效果。
27.捕获RuntimeException、Exception或Throwable的catch语句是合法,不管try块里是否抛出了这三个异常。但如果try块没有抛出或不可能抛出检测性异常,则catch不能捕获这些异常。重写或实现时不能扩大异常的范围,如果是多继承,则异常取所有父类方法异常的交集或不抛出异常。这样设计可以编码异常范围扩大。
31. 递归构造
public class S {
private S instance = new S();
public S() {}
}
如果在程序外面构造该类的实例,则会抛出java.lang.StackOverflowError错误。其原因是实例变量的初始化操作将先于构造器的程序体而运行。
32. 构造器中的异常
如果父类构造器抛出了检测异常,则子类也只能抛出,而不能采用try-catch来捕获:
33. StackOverflowError
Java虚拟机对栈的深度限制到了某个值,当超过这个值时,VM就抛出StackOverflowError。一般VM都将栈的深度限制为1024,即当方法调用方法的层次超过1024时就会产生StackOverflowError。
分享到:
相关推荐
java 解惑 java 解惑 java 解惑 java 解惑 java 解惑 java 解惑
《Java解惑(中文版)》是一本专为Java初学者设计的学习资料,旨在帮助读者解答在学习Java过程中遇到的各种困惑。"solve65p"可能代表这本书包含65个问题或主题,每个都深入浅出地进行了讲解,旨在解决初学者在编程...
Java PUZZLE Java 解惑 Java PUZZLE Java 解惑 Java PUZZLE Java 解惑Java PUZZLE Java 解惑 Java PUZZLE Java 解惑 Java PUZZLE Java 解惑
《Java解惑中文版》是一本专为Java程序员设计的指南,旨在帮助读者解决在编程过程中遇到的各种问题,提升程序的健壮性。本书深入浅出地探讨了Java语言的核心概念、常见疑惑以及最佳实践,旨在使开发者能够编写出更...
2. **面向对象编程**:Java是一种面向对象的语言,封装、继承、多态是其三大特性。封装涉及如何隐藏内部实现细节,提供公共接口;继承允许类间共享代码,提高代码复用;多态则增强了程序的灵活性。 3. **异常处理**...
《Java解惑》 布洛克 著;陈昊鹏 译 扫描清晰带目录,仅供参阅,请支持正版
2. **类与对象**:面向对象编程是Java的核心特性。类是对象的模板,而对象则是类的实例。理解类的构造器、继承、封装和多态性对于Java编程至关重要。 3. **异常处理**:Java的异常处理机制帮助程序员捕获和处理运行...
"java解惑" PDF版本
文档《java解惑 PDF版》中列举了95个这样的谜题,每个谜题都旨在帮助开发者理解并纠正一些常见的错误理解。以下是根据提供的部分内容解析的几个相关知识点。 ### 表达式谜题与取余操作符(%)的行为 在Java中,...
《JAVA解惑》这本书主要针对Java编程中遇到的各种常见问题和困惑进行了解答,旨在帮助开发者深入理解Java语言,提高编程技巧。以下是一些关键的知识点解析: 1. **异常处理**:Java中的异常处理是通过try-catch-...
《JAVA解惑》是Java开发者领域的一本经典著作,它被广大编程爱好者称为Java四大名著之一,旨在解决初学者及有一定经验的开发者在学习和使用Java过程中遇到的各种困惑。这本书深入浅出地讲解了Java语言的核心概念和...
6. **Java 十大基础笔记整理(PDF).zip**:这是一份整理好的Java基础知识点的笔记,涵盖了类、对象、接口、继承、异常处理、输入输出、集合框架等关键概念,适合初学者和复习者参考。 通过这些文件,我们可以系统...
讲述如何在程序中避免程序缺陷和程序陷阱的,解惑的过程中,介绍了一些Java编程语言中许多不易被掌握的知识点,其阅读价值非常高,适合具有Java知识的学习者和有编程经验的Java程序员阅读。
"Java解惑"这个主题,显然旨在帮助开发者解决他们在学习和实践中遇到的问题。在Java的世界里,疑惑可能涵盖语法、类库、框架、并发、内存管理等多个方面。下面,我们将深入探讨一些常见的Java解惑知识点。 1. **...
"java解惑"这个主题旨在帮助初学者理解和解决在学习Java过程中遇到的问题,通过实例来深入浅出地讲解Java的基础知识,同时也强调了实用技巧和注意事项。 "Java解惑"的资料可能包含了两部分:`.chm`和`.pdf`格式的...
"Java解惑(中文).pdf"这份文档很显然是为了帮助Java开发者解决他们在编程过程中遇到的一些常见困惑和误解。这份高清版、文字版的资料很可能包含了深入浅出的解释和实例分析,以中文的形式呈现,使得国内开发者更容易...
2. **多线程**:Java提供了丰富的多线程支持,包括Thread类、Runnable接口、ExecutorService等。书中将探讨并发编程的挑战,如线程同步、死锁、活锁等问题,以及如何使用synchronized、volatile关键字来确保线程安全...
### JAVA解惑中的关键知识点解析 #### 谜题1:奇数性的判断 在《JAVA解惑》一书中,作者通过一系列实例介绍了Java编程语言中的一些不易掌握的知识点。其中一个例子是关于如何正确判断一个整数是否为奇数。 **原始...