《Beginning Java 7》 - 3 - Equalty 判等】的更多相关文章

== 用于判断是否为同一引用. 比如对于 String: System.out.println("abc" == "abc"); // Output: true System.out.println("abc" == "a"+"bc"); // Output: true System.out.println("abc" == "Abc"); // Output: fa…
比如这里存xml,这里判断了一下element是否为空,来避免空指针异常,推荐用guava的optional判空…
Java 垃圾回收机制原理: Java 语言使用 garbage collector 来进行垃圾回收.它是允许在后台的代码,间或地检查没有引用的对象(unreferenced object).发现后,会在系统堆栈(heap)中清除来释放空间. unreferenced object 是在程序中任何位置都不能被访问的对象,比如 new Emplyee ("jack",32); 当程序中把一个对象的所有引用都清除了的时候,这个对象就变成了 unreferenced object. 虽然 J…
哈希码和 equals() 都是用来比较的. 1. 哈希码的作用是用来提高比较的效率.因为当比较的对象比较复杂时,equals() 可能很耗时,但哈希码只需要比较一个 int .哈希码常用于集 (set) 中的检索. 2. 规则:当我们 override 了 equals() 和 hashcode() 中的其中一个时,另一个也要重写. 因为 Java 的正确规则是,如果 equals() 为真,hashcode() 必须相同,但反之可以不成立.需要尽量遵循此此规则. 3. 一种合理的 hashc…
嵌套类分为四种: static member class 静态成员类 nonstatic member class 非静态成员类 anonymous class 匿名类 local class 局部类 后三者统称为 inner class 内部类. 还有一种嵌套的形式叫 interfaces within classes 类内部接口,我们在最后介绍. 1. Static Member Class 静态成员类 //外围类 class EnclosingClass{   private static…
1. 抽象类: 为什么用抽象类: 一些 generic 的类本身并没有现实意义,所以不需要被实例化.比如动物,自然界没有动物这个物种,但却有无数的继承自动物的物种,那么动物本身可以是一个抽象类. 抽象类使用规则: 抽象类不可以被创建,不能有实例. 抽象类不可以是 final 的,因为 final 类不能被继承,那么抽象类就没任何意义了. 抽象类可以包含任意可见性的属性. 可以包含非抽象方法,但非抽象方法必须实现(必须有函数体). 可以不包含抽象方法. 抽象方法只能声明,不能实现. 抽象方法在子类…
public final class String implements Serializable, Comparable<String>, CharSequence 所以: 1. String 一旦被创建不能被修改,因为 final 2. String 不能调用 clone() 因为没有 implements Cloneable String 类中含有一些对比字符串的方法,比如字典比较等等. String 的比较: 1. == 用来比较是否是两个 String 是否是同一个引用. 如: St…
当我们想在系统进行垃圾回收时做一些特定的工作,我们就可以重写 finalze() 函数,因为 Object 的 此函数是空的. 比如: protected void finalize() throws Throwable { try { //do something } finally { super.finalize(); } } 但这种写法不是完美的,因为如果出现 Exception,finally 不会被调用.super.finalize() 将永远不会被执行.那么解决办法是,要处理 Ex…
Cloning 分两类:影子克隆 shallow cloning 深度克隆 deep cloning * 调用 clone() 需要 implments Cloneable.此函数为 protected,如果在外部调用,需要把它重写为 public 的.Cloneable 接口本身其实是空的,也就是没有方法需要实现.所以 clone() 可以不重写.这种空的接口被称为 marker interface 标记接口 或 tagged interface 标签接口. 1. 影子克隆是简单的克隆,对于一…
Initializer 分两类:class initializer 类初始化器   instance initializer 实例初始化器 1. class initializer,在编译时运行,通过 <clinit>() 函数. 例: Class A { static int i; static { i = 10; } } 初始化于static关键字中. 2. instance initializer,在实例创建时运行,通过 <init>() 函数,主要用于代替 construc…
1. Variables (1) Three ways to define variables: 1) val refers to define an immutable variable; scala> val x = x: Int = scala> x*x res4: Int = scala> res4 + # use result as a value res6: Int = scala> res4 + res6 res7: Int = scala> x = # x i…
控制台程序. import java.io.*; public class Person implements Comparable<Person>, Serializable { // Constructor public Person(String firstName, String surname) { this.firstName = firstName; this.surname = surname; } // Read a person from the keyboard publ…
控制台程序,使用如下代码能读入包含Junk对象的文件: import java.io.*; import java.nio.file.*; class DeserializeObjects { public static void main(String args[]) { Path file = Paths.get(System.getProperty("user.home")).resolve("Beginning Java Struff").resolve(&…
控制台程序. 首先定义一个含有任意不同数据类型域的可序列化类: import java.io.Serializable; public class Junk implements Serializable { private static java.util.Random generator = new java.util.Random(); private int answer; // The answer private double[] numbers; // Valuable data…
控制台程序,使用通道随机读写primes_backup.bin文件. import static java.nio.file.StandardOpenOption.*; import java.nio.file.*; import java.nio.channels.SeekableByteChannel; import java.io.IOException; import java.nio.ByteBuffer; import java.util.EnumSet; public class…
import java.nio.file.*; import java.nio.channels.FileChannel; import java.io.IOException; import java.nio.ByteBuffer; public class RandomFileRead { public static void main(String[] args) { Path file = Paths.get(System.getProperty("user.home")).r…
控制台程序,本例读取Java基础之写文件部分(PrimesToFile2)写入的Primes.txt. 方法二:设置一个任意容量的.大小合适的字节缓冲区并且使用来自文件的字节进行填充.然后整理出缓冲区中所有的内容.这种方式的问题是:缓冲区的内容可能会在读取文件的一个数据项时半途而断.这样一来,就必须做一些工作对此进行检测并且找出下一步要做的工作,但是这比第一种方式更加有效,因为这极大减少了用于读取整个文件所需的读操作数目. 本例的关键是缓冲区类提供的compact()方法,即压缩缓冲区. imp…
控制台程序,本例读取Java基础之写文件部分(PrimesToFile2)写入的Primes.txt. 方法一:可以在第一个读操作中读取字符串的长度,然后再将字符串和二进制素数值读入到文本中.这种方式的唯一不足是:这不是一种有效读取文件的方式,因为有很多的读操作,其中的每个都读取非常少量的数据. import java.nio.file.*; import java.nio.channels.FileChannel; import java.io.IOException; import java…
控制台程序,本例读取Java基础之写文件部分(PrimesToFile)写入的primes.bin. import java.nio.file.*; import java.nio.*; import java.nio.channels.ReadableByteChannel; import java.io.IOException; public class ReadPrimes { public static void main(String[] args) { Path file = Pat…
控制台程序,使用通道从缓冲区获取数据,读取Java基础之写文件(BufferStateTrace)写入的charData.txt import java.nio.file.*; import java.nio.channels.ReadableByteChannel; import java.io.IOException; import java.nio.ByteBuffer; public class ReadAString { public static void main(String[]…
控制台程序,本例读取Java基础之写文件部分(WriterOutputToFile)写入的Saying.txt. import java.io.*; import java.nio.file.*; import java.nio.charset.Charset; public class ReaderInputFromFile { public static void main(String[] args) { Path file = Paths.get(System.getProperty("…
控制台程序,读取Java基础之读文件部分(StreamOutputToFile)写入的50个fibonacci数字. import java.nio.file.*; import java.nio.*; import java.io.*; public class StreamInputFromFile { public static void main(String[] args) { Path file = Paths.get(System.getProperty("user.home&qu…
控制台程序,使用单个写操作将数据从多个缓冲区按顺序传输到文件,这称为集中写(GatheringWrite)操作.这个功能的优势是能够避免在将信息写入到文件中之前将信息复制到单个缓冲区中.从每个缓冲区写入到文件中的数据有这个缓冲区的位置和限制决定. 本例会将字符串长度.字符串本身以及二进制素数值设置到单独的字节缓冲区中,另外还会将素数字符串作为本地编码的字节写入. import static java.lang.Math.ceil; import static java.lang.Math.sqr…
控制台程序,上一条博文(PrimesToFile2)每次将一个素数写入到文件中,所以效率不是很高.最好是使用更大的缓冲区并加载多个素数. 本例重复使用三个不同的视图缓冲区加载字节缓冲区并尽可能加入更多的素数,推荐使用这种方式. import static java.lang.Math.ceil; import static java.lang.Math.sqrt; import static java.lang.Math.min; import static java.nio.file.Stan…
控制台程序.本例将对应于每个素数的数据以三个连续数据项的形式写入: 1.以二进制值表示的字符串长度值(最好是整型,但本例使用double类型): 2.素数值的字符串表示”Prime=nnn“,其中数字的位数明显是变化的: 3.将素数以long类型的二进制表示. 基本策略是,创建一个字节缓冲区,之后创建一系列将三种不同类型数据映射到其中的视图缓冲区.一种简单的方法是每次写入一个素数的数据. import static java.lang.Math.ceil; import static java.…
控制台程序,计算素数.创建文件路径.写文件. import static java.lang.Math.ceil; import static java.lang.Math.sqrt; import static java.lang.Math.min; import static java.nio.file.StandardOpenOption.*; import java.nio.file.*; import java.nio.channels.*; import java.nio.*; im…
控制台程序,使用Formatter对象将写入文件的数据准备好. 使用Formatter对象的format()方法,将数据值格式化到视图缓冲区charBuf中. import static java.nio.file.StandardOpenOption.*; import java.nio.file.*; // Files and Path import java.nio.channels.WritableByteChannel; import java.nio.*; // ByteBuffer…
控制台程序,将一系列有用的格言写入到文件中. 本例使用通道把不同长度的字符串写入到文件中,为了方便从文件中恢复字符串,将每个字符串的长度写入到文件中紧靠字符串本身前面的位置,这可以告知在读取字符串之前字符串中存在的字符数目,也可以使用视图缓冲区来读取字符串. import static java.nio.file.StandardOpenOption.*; import java.nio.file.*; import java.nio.channels.*; import java.util.E…
控制台程序,在Junk目录中将字符串“Garbage in, garbage out\n”写入到名为charData.txt的文件中. import static java.nio.file.StandardOpenOption.*; import java.nio.file.*; import java.nio.channels.*; import java.util.EnumSet; import java.io.IOException; import java.nio.ByteBuffer…
控制台程序,将一列字符串写入到文件中. import java.io.*; import java.nio.file.*; import java.nio.charset.Charset; public class WriterOutputToFile { public static void main(String[] args) { String[] sayings = {"A nod is as good as a wink to a blind horse.", "L…