`
文章列表
1. 概述 float和double类型的主要设计目的是为了科学计算和工程计算。它们执行二进制浮点运算,这是为了在广域数值范围上提供较为精确的快速近似计算而精心设计的。然而,它们没有提供完全精确的结果,所以不应该被用于要求精确结果的场合。float和double类型对于货币计算尤为不合适,因为要让一个float或者double精确地表示0.1(或者10的任何负数次方值)是不可能的,比如System.out.println(2.0-1.1)将会打印0.899999999999999,而不是你所希望的0.9,这种舍入错误产生的原因是浮点数实际上是用二进制系统实现的,而分数1/10在二进制系统中 ...
For-Each循环   For-Each循环也叫增强型的for循环,或者叫foreach循环。   For-Each循环是JDK5.0的新特性(其他新特性比如泛型、自动装箱等)。   For-Each循环的加入简化了集合的遍历。   其语法如下:   for(type element: array)   {         System.out.println(element);
1.什么是方法重载     方法名字相同,参数类型或者参数个数不同 2.下面我们先看下面这段代码    [java] view plain copy    print
在Java程序中,方法与属性是类中最基本的成员。下面的问题与方法有关: 实现一个方法的第一步是什么? 说到这里我突然想起侯耀文、赵丽蓉两位艺术家在小品《英雄母亲的一天》中有这样一段台词: 导演:您起床后做的第一件事是什么?可以随便说。大娘一听可以随便说,笑了。大娘(凑到导演的耳朵边,轻声地):上厕所。 在这里,我也想做一回导演,把上面的台词改一下: 编程新手:您在实现类中的一个方法时,第一步要做的事是什么?可以随便说。编程老手一听可以随便说,笑了。编程老手(凑到新手的耳朵边,轻声地):参数有效性检查。 大娘的回答铁定不是导演希望听到的,编程老手的回答恐怕也不是新手想要得到的。原因 ...
如果一个方法的返回值类型是集合或者数组 ,如果在方法内部需要返回的集合或者数组是零长度的,也就是没有实际对象在里面,我们也应该放回一个零长度的数组或者集合,而不是返回null。如果返回了null,客户端程序员就要检测返回的是不是null,然后才能进行下一步操作,否则就会引发NullPointException。但是如果是返回的的是空数组或者集合,就不会再后续的使用这个对象上,引发空指针异常,我们可以根据代码的行为和表现,来判断数组和集合是不是为空。   在Collections中有专门针对List,Set,Map的空的实现。如: Collections.emptyList() Col ...
用法一:常量 在JDK1.5 之前,我们定义常量都是: public static fianl.... 。现在好了,有了枚举,可以把相关的常量分组到一个枚举类型里,而且枚举提供了比常量更多的方法。 public enum Color { RED, GREEN, BLANK, YELLOW }   用法二:switch JDK1.6之前的switch语句只支持int,char,enum类型,使用枚举,能让我们的代码可读性更强。
A:原生态类型如 List:不带任何类型参数的泛型名称 B:参数化类型如List<String> :表示元素类型为String的列表 C:无限制的通配符类型如List<?>:表示元素为未知类型   参数化类型优点 1)安全,提供了编译前检查 2)方便,不用显示的cast,自动完成 原生态类型存在的主要目的是兼容性。   List和List<Object>区别 后者提供了编译期检查,明确的表明集合中可以放任何类型的元素 举例:对于方法 f(List param)和方法f(List<Object>),前者可以接受List< ...
有时候,可能会遇到带有两个甚至更多风格的实例的类,并包含表示实例风格的标签(tag)域。Demo:   [java] view plain copy   // Tagged class - vastly inferior to a class hierarchy!
由于java interface中声明的字段在编译时会自动加上static final的修饰符,即声明为常量。因而interface通常是存放常量的最佳地点。然而在java的实际应用时却会产生一些问题。 问题的起因有两个,第一,是我们所使用的常量并不是一成不变的,而是相对于变量不能赋值改变。例如我们在一个工程初期定义常量∏=3.14,而由于计算精度的提高我们可能会重新定义∏=3.14159,此时整个项目对此常量的引用都应该做出改变。第二,java是动态语言。与c++之类的静态语言不同,java对一些字段的引用可以在运行期动态进行,这种灵活性是java这样的动态语言的一大优势。也就使得我们在 ...
      一般情况下,泛型最通常应用于集合,如set和Map,以及单元素的容器,如ThreadLocal等。在这些语法中一般情况下,这些容器都被充当被参数化了的容器,意味着每个容器只能有一个或者多个固定数目的类型参数。如一个Set只有一个类型参数,用于表示元素类型。一个Map有两个类型参数,表示它的键和值类型。(个人认为类型参数就是指定了类型的参数。这也是泛型的意义所在)       但是有时候我们可能需要更多的灵活性,比如数据库行可以有任意多的列,每个列的类型可能不一样,如果能以类型安全的方式访问所有列就好了。目前,有一种方法可以实现,就是将键值(key)进行参数化而不是对整个容器进行 ...
        看如下一个泛型的例子:   [java] view plain copy    
1.什么是Comparable接口 此接口强行对实现它的每个类的对象进行整体排序。此排序被称为该类的自然排序 ,类的 compareTo 方法被称为它的自然比较方法 。实现此接口的对象列表(和数组)可以通过 Collections.sort (和 Arrays.sort )进行自动排序。实现此接口的对象可以用作有序映射表中的键或有序集合中的元素,无需指定比较器。 强烈推荐(虽然不是必需的)使自然排序与 equals 一致。所谓与equals一致是指对于类 C 的每一个 e1 和 e2 来说,当且仅当(e1.compareTo((Object)e2) == 0) 与e1.equals((Ob ...
下面这段程序存在一个“内存泄漏”。在极端的情况下,会导致磁盘交换(Disk Paging),甚至导致程序失败(OutOfMemoryError)。那么哪里引起的内存泄漏呢?如果一个栈先是增长,然后再收缩,那么从栈中弹出来的对象讲不会被当做垃圾回收,即使使用的栈程序不再引用这些对象。这是因为,栈内部维护着对这些对象的过期引用(obsolete reference)。过期引用是指,永远也不会再被接触的引用。demo: view plaincopy to clipboard
Clone提供一种语言之外的机制:无需调用构造器就可以创建对象。 它的通用约定非常弱: 创建和返回该对象的一个拷贝。这个拷贝的精确含义取决于该对象的类。一般含义是,对于任何对象x,表达式x.clone() != x 将会是true,并且,表达式x.clone().getClass() == x.getClass() 将会是true,但这些不是绝对的要求,通常情况下,表达式 x.clone().equals(x) 将会是true,这也不是一个绝对的要求,拷贝对象往往是创建它的类的一个新实例,但它同时也会要求拷贝内部的数据结构。   如果类的每个域包含一个基本类型的值,或者包含一个指向不 ...
java.lang.Object的toString方法的实现: public String toString() { return getClass().getName() + "@" + Integer.toHexString(hashCode()); } 这通常不是用户期望看到的,它包含类名称,一个“@”符号,以及散列码的无符号十六进制表示法。   toString通用约定指出,被返回的字符串应该是一个“简洁的,但信息丰富,并且易于阅读的表达形式”,进一步的约定指出,建议所有的子类都覆盖这个方法。
Global site tag (gtag.js) - Google Analytics