java点点滴滴
yinbodotcc
基础和内核很重要---能力构成
展开
-
小知识点
1。/////////////////////////////////////////////////////////////////////////////////////////////////////////////////. HashSet 子和父的同名函数问题//这个类用来测试加入到HashSet时候,只有当hashSet函数和equals都一样时,才认定//插入的是重复的原创 2006-11-06 17:32:00 · 587 阅读 · 0 评论 -
小心Comparator陷阱
注意底下的Comparator cmp = new Comparator()的实现是不正确的。:如果你有两个数字,你想得到一个数值,其符号表示它们的顺序,那么你可以计算它们的差。这个惯用法至少从1970 年代早期就一直存在了,它在早期的UNIX 里面被广泛地应用。遗憾的是,这种惯用法从来都没有正确地工作过。既然这种比较的惯用法是有问题的,那么为什么它会被如此广泛地应用呢?因为它在大多数时间里可以正原创 2007-01-17 12:48:00 · 699 阅读 · 0 评论 -
务必遵循命名规则
package com.yinbodotcc;/** * * @author yay * 这个程序演示了,由于没有遵循好的命名规则,导致的尴尬的问题, * 但是程序不会报错,会打印white。因为,即当一个变量和一个类型具有相同的名字, * 并且它们位于相同的作用域时,变量名具有优先权[JLS 6.5.2] * */public class PrivateClass{ public stati原创 2007-01-20 17:54:00 · 757 阅读 · 0 评论 -
包内访问权限使得没有override
看父类:package com.yinbodotcc.Container;public class HavingSubclassOutOfPackage { public void doIt() { printMessage(); } void printMessage() { System.out.println("HavingSubclassOutOfPackage"); }}原创 2007-01-20 19:21:00 · 749 阅读 · 0 评论 -
final关键子上面的注意点
final 修饰符对方法和域而言,意味着某些完全不同的事情,阐述如下:对于方法,final 意味着该方法不能被覆写(对实例方法而言)或者隐藏(对静态方法而言)对于域,final 意味着该域不能被赋值超过一次,仅此而已。子类有和父类同名的变量,会隐藏父类变量的。 如果你想保证在父类中的final可以保留到子类中,那么你应该用一个final 方法来代替final 域:原创 2007-01-20 20:21:00 · 572 阅读 · 0 评论 -
Math.abs陷阱
Math.abs(..)如果其参数等于Integer.MIN_VALUE,那么产生的结果与该参数相同,它是一个负数。所以下面程序你要小心。当然不不要去运行啦,这个要好产时间的哦,呵呵package com.yinbodotcc;import java.util.*;public class SuspiciousSort { public static void main(String[ ]原创 2007-01-17 13:25:00 · 1083 阅读 · 0 评论 -
子类和父类中方法和变量访问权限
1。一个覆写方法的访问修饰符所提供的访问权限与被覆写方法的访问修饰符所提供的访问权限相比,至少要一样多2。但是。对一个域来说,当它要隐藏另一个域时,如果隐藏域的访问修饰符提供的访问权限比被隐藏域的少,尽管这么做不可取的,但是它确实是合法的class Base{ public String className = "Base"; public void pr() { }}class De原创 2007-01-19 23:24:00 · 1827 阅读 · 0 评论 -
带缓冲区的输出流
一个PrintStream 可以被创建为自动刷新的;这意味着当一个字节数组(bytearray)被写入,或者某个println 方法被调用,或者一个换行字符或字节(‘/n’)被写入之后,PrintStream 类型的flush 方法就会被自动地调用。System.out和System.err就是PrintStream类,所以你需要注意哦。package com.yinbodotcc;publ原创 2007-01-23 23:41:00 · 822 阅读 · 0 评论 -
原生类型 和 参数化类型
import java.util.*;public class Pair {private final T first;private final T second;public Pair(T first, T second) {this.first = first;this.second = second;}public T first() {return first;}public T se原创 2007-01-24 19:32:00 · 5460 阅读 · 3 评论 -
e.equals(e)为false的设计
public class Conundrum{ public static void main(String[] args) { Enigma e = new Enigma(); System.out.println(e.equals(e)); }}/* * 下面给出了两种方式,第一种比较狡猾;第二种不太主张用 */class Enigma{ public Enigma() { System.原创 2007-01-22 13:12:00 · 680 阅读 · 0 评论 -
enmu新用法(我刚刚发现)
////////////////////////////////////////////////////////////////////////////下面的可以运行的 JDK1.5以上package com.yinbodotcc;import java.util.Random;public enum CoinSide{ YAYHEADS, YAYTAILS; public String原创 2007-01-22 13:31:00 · 990 阅读 · 1 评论 -
override overload hide obscure shadow概念区别
1。一个实例方法可以覆写(override)在其超类中可访问到的具有相同签名的所有实例方法,VM 将基于实例的运行期类型来选择要调用的覆写方法 2。一个域、静态方法或成员类型可以分别隐藏(hide)在其超类中可访问到的具有相同名字(对方法而言就是相同的方法签名)的所有域、静态方法或成员类型。隐藏一个成员将阻止其被继承3。在某个类中的方法可以重载(overload)另一个方法,只要它们具有相原创 2007-01-22 14:02:00 · 1384 阅读 · 0 评论 -
当Singleton模式类实现Serializable
package com.yinbodotcc;import java.io.*;public class CopyDog{ // Not to be confused with copycat public static void main(String[] args) { Dog newDog = (Dog) deepCopy(Dog.INSTANCE); System.out.prin原创 2007-01-24 14:59:00 · 987 阅读 · 0 评论 -
泛型类的非静态内部类可访问外围类的类型参数
package com.yinbodotcc;/* * 一个泛型类的内部类可以访问到它的外围类的类型参数 *//*public class MyList { private Node head = null; private class Node { E value; Node next; Node(E value) { this.value = value; this.n原创 2007-01-26 10:57:00 · 1069 阅读 · 0 评论 -
内部类的另外一个陷阱
package com.yinbodotcc;public class Twisted { private final String name; Twisted(String name) { this.name = name; } private String name() { return name; } private void reproduce() { new Twisted("rep原创 2007-01-26 12:10:00 · 886 阅读 · 0 评论 -
生成一个随机字符串
下面代码给出了如何生成一个随机字符串: private static String chars= "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; private static char[] src = chars.toCharArray(); public static class NextRandChar { publ原创 2007-04-05 23:17:00 · 1132 阅读 · 0 评论 -
编译和运行
1.带包路径的编译:[bmclaugh:~/Documents/developerworks/castor] javac -d . *.java有包路径的运行:[bmclaugh:~/Documents/developerworks/castor] java com.yinbodotcc..MarshalTester 2.相对路径问题import org.e原创 2008-10-23 22:04:00 · 472 阅读 · 0 评论 -
Arrays.asList()陷阱
public class ArrayASListTest{ public static void main(String[] args) { /* String[] s = new String[]{"one","two"}; List wrongList = Arrays.asList(s); wrongL原创 2009-02-18 21:02:00 · 1652 阅读 · 0 评论 -
集合类的几个用法
////////////////////////////////////////////////////////////////////////////////////////LinkedHashSet ListA.编写一个方法,它接受一个包含元素的List,并返回一个新的List,它以相同的顺序包含相同的元素, 只不过它把第二次以及后续出现的重复元素都剔除了。package原创 2007-01-17 15:15:00 · 616 阅读 · 0 评论 -
getClassLoader
1. 下面这个方法可以取得一个输入流 InputStream is = getClass().getClassLoader().getResourceAsStream("helloworld.properties"); 2。 下面这个方法:类装载器负责从Java字符文件将字符流读入内存,并构造Class类对象 这里会间接调用无参构造函数 MainFra原创 2007-03-02 11:08:00 · 1759 阅读 · 0 评论 -
调用父类的方法,父类用谁的变量
这个是父类public class MarsSuper { private String name="Super"; public void init() { System.out.println("name: "+name); } } 下面这个是子类,注意子类有自己的name,会覆盖父类的name,那么super.init()里面用到原创 2007-01-09 16:49:00 · 766 阅读 · 0 评论 -
有关assert的用法
我们的类假定为ATest.java则编译: javac -source 1.6 ATest.java 这里我假定用jdk6.0运行: java -ea ATest原创 2006-11-12 22:10:00 · 657 阅读 · 0 评论 -
有关SimpleDateFormat的常用方法说明
//////////////////////////////////////////首先说明一下关键的参数 G 年代标志符 y 年 M 月 d 日 h 时 在上午或下午 (1~12) H 时 在一天中 (0~23) m 分 s 秒 S 毫秒 E 星期 D 一年中的第几天 F 一月中第几个星期几 w 一年中第几个星期 W 一月中第几个星期 a 上午 / 下午 标记符原创 2006-11-17 15:37:00 · 22069 阅读 · 5 评论 -
Java 内部类
////////////////////////////////////////////////////////////////////////////////注意static 已经层次package com.yinbodotcc;public class PrivateClass{ public static class One { int a=1; class OneTwo { i原创 2006-12-30 10:12:00 · 666 阅读 · 0 评论 -
有关类的初始化问题
首先下面的部分摘抄于Thinking in Java在这里有必要总结一下对象的创建过程。请考虑一个名为Dog的类:(1) 类型为Dog的一个对象 首次 创建时,或者Dog类的static方法/static字段 首次 访问时,Java解释器必须找到Dog.class(在事先设好的类路径里搜索)。(2) 找到Dog.class后(它会创建一个Class对象,这将在后面学到翻译 2007-01-05 22:45:00 · 632 阅读 · 0 评论 -
数组
1。数组大小可以 Scanner scanner = new Scanner(System.in); int length = scanner.nextInt(); int[] arr = new int[length]; 2。对于2维: 1。数组名.length是表示有多少行 2。二维数组可以不规则,每行列数可以不相同:原创 2007-01-07 17:25:00 · 505 阅读 · 0 评论 -
字符,数字的分类器
这个程序是从pitfalls上改写的,用于实现区分数字,字母的,主要是学会indexOf的灵活运用public class Classifier { public static void main(String[] args) { System.out.println( classify(n) + classify(+) + classify(2)); } static S原创 2007-01-05 14:04:00 · 956 阅读 · 0 评论 -
小集合
1。获取你系统默认字符集 并打印 System.out.println( java.nio.charset.Charset.defaultCharset() );2。想知道你的这么类的完整名称吗 System.out.println(Me.class.getName()+".class"原创 2007-01-05 14:13:00 · 577 阅读 · 0 评论 -
到底调用什么方法呢
1。下面这个类中,当没有Confusing(double[])时候,就会调用Confusing(Object) public class Confusing { private Confusing(Object o) { System.out.println("Object"); } private Confusing(double[] dArray) { System.out.println原创 2007-01-05 20:57:00 · 557 阅读 · 0 评论 -
断言的简单应用
public class AssertMy { public static void main(String[]args) { assert 3==4: "I am wrong"; }}原创 2007-01-07 16:40:00 · 612 阅读 · 0 评论 -
注意final域
需要说明的是:final域不需要在定义时就初始化,但是一旦第一次赋值过后,就不能第二次赋值了。但是个人觉得也许初始化是个好的习惯原创 2007-01-04 11:50:00 · 596 阅读 · 0 评论 -
不可变类的含义
BigInteger 实例是不可变的。String、BigDecimal 以及包装器类型:Integer、Long、Short、Byte、Character、Boolean、Float 和Double 也是如此,你不能修改它们的值。我们不能修改现有实例的值,对这些类型的操作将返回新的实例,我们正确做法是把运算结果返回给原来实例。在下面例子中,第一个例子达不到目的 第二个例子正是我们需要的看这原创 2007-01-06 22:10:00 · 786 阅读 · 0 评论 -
扩展类型带来的问题
注意扩展类型带来的问题,下面给出了一个解决方案public class ByteToInt { public static void main(String[] args) { for (byte b = Byte.MIN_VALUE; b if ((b&0x00ff) == 0x90) System.out.print("Joy!"); } } }b&0x00ff)中0原创 2007-01-05 16:46:00 · 571 阅读 · 0 评论 -
一些非常非常严峻的问题
1。下面这个代码觉得不能用,因为它是错的:int j = 0;for (int i = 0; i j = j++;System.out.println(j); 最终结果是0而不是100你不能用j=j++,而应该用j++就好了,但是你用j=j+2不会出项问题,原因在于++操作符 2。下面这个循环永远不会结束public class NotEndedLoop {public s原创 2007-01-05 17:21:00 · 872 阅读 · 1 评论 -
不允许一个变量声明语句作为一条语句在for、while 或do中
1。Null s1;//这里Null是一个已经写好的类for(int i=0;i //Null s1=new Null();如果直接这样写会编译错误, s1=new Null(); //int j=1;如果直接这样写也会编译错误 Java是不允许一个变量声明语句作为一条语句在for、while 或do中2。就上一个问题原创 2007-01-06 20:18:00 · 784 阅读 · 0 评论 -
JDK5中出现的Atomic...帮助实现线程安全
AtomicBooleanAtomicInteger AtomicLong 都能保证 可以用原子方式更新的 boolean,long ,int值 例如,下面这个同步方式:import java.util.concurrent.atomic.AtomicLong;class Creature {private static AtomicLong numCreated = ne原创 2007-01-06 20:42:00 · 670 阅读 · 0 评论 -
当你只有equals 没有hashcode
import java.util.*;public class Name{ private String first, last; public Name(String first, String last) { this.first = first; this.last = last; } public boolean equals(Object o) { if (!(o instanc翻译 2007-01-06 22:21:00 · 634 阅读 · 0 评论 -
Scanner和正则表达式
1。 package com.yinbodotcc;import java.util.Scanner;import java.io.*;import java.util.regex.*;public class UserInput { public static void main(String []args) throws Exception { ////////////////////原创 2007-01-07 15:29:00 · 1627 阅读 · 0 评论 -
给sohu到yahoo的那封邮件
1. MailSenderInfoAndReciver类, 存放邮件发送者,发送内容,和接受者信息 package yinbodotcc.mailtest; import java.util.Properties; public class MailSenderInfoAndReciver{ // 发送邮件的服务器的IP和端口 private St原创 2009-04-26 22:08:00 · 1652 阅读 · 0 评论