自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Maggie's Blog

Shoot for the moon. Even if you miss, you'll land among the star.

  • 博客(25)
  • 收藏
  • 关注

原创 java中的垃圾回收

相对于c语言的这种由开发人员显式的分配内存、释放内存,如果处理不当往往会造成内存泄露的问题。java的垃圾回收机制监视java程序的运行,自动释放不再使用的对象的内存。java使用软指针(指向对象引用的指针)来跟踪对象的所有引用。并使用一个对象表将软指针映射为对象的引用。垃圾收集器以单独的线程在后台运行,通过软指针依次检查每个对象。垃圾收集器会不定时的检查对象的各个引用,如果一个对象没有任何的

2012-09-30 23:26:11 1101

原创 java中的final关键字

final变量如果在变量前加final关键字,则这个变量一旦被初始化,便不可再改变。如果一个final变量是类成员变量,则必须被初始化,且只能被初始化一次。方法中的参数也可以是final变量。这在我们需要传递引用型的变量时非常有用,因为有时候我们并不希望调用函数修改该变量而影响到原函数中对象的值。因此将引用型变量设为final类型可以有效方式变量被调用参数修改。此时在调用方法中只可

2012-09-30 21:44:43 928

原创 java类的构造器

提供构造器可以确保在创建对象时,编译器自动调用构造器进行初始化。java中采用了构造器与类名相同的机制,以确保编译器可以知道应该调用哪个方法。使用构造器提高了代码的可读性,也有助于减少错误。 构造器是特殊的方法,它没有返回值。如果我们的类中没有构造器,编译器会自动创建一个默认构造器。它是无参的。如果我们在类中定义了构造器(无论是否有参数),编译器都不会再自动创建默认构造器。我们

2012-09-24 00:40:13 1333

原创 java中的移位运算符

移位运算符是在数字的二进制形式上进行平移。主要有左移(>)以及无符号右移(>>>)。左移运算符(带符号右移运算符(>>)的运算规则为:按二进制形式将数字右移相应位数,低位舍弃,高位正数补零,负数补1。无符号右移运算符(>>>)的运算规则为:按二进制形式将数字右移相应位数,低位舍弃,高位补零。int a=-8;System.out.println(a << 2);Syst

2012-09-19 00:54:28 1242

原创 java三目运算符boolean?x:y中的类型转换

下面的代码是面试宝典上的一道题目:int a=5;System.out.println("a="+((a这段代码的输出是9.0。因为三目运算符中有一个10.9,java会根据运算符的精度类型进行自动类型转换。因此9会变为9.0char x='x';int i=10;System.out.println(false?i:x);System.out.println(

2012-09-18 00:17:42 8321 1

原创 Java中的自增操作符与中间缓存变量机制

我们来看这样一段程序:public static void main(String[] args){ int i, sum1, sum2; i=0; sum1 = (i++)+(i++); System.out.println("sum1="+sum1); i = 0; sum2 = (++i)+(++i)

2012-09-17 01:51:04 7890 1

原创 Java中的Set与hashCode

我们知道Java中的Collection分为List和Set。List中的元素是有序和可重复的,而Set中的元素无序且不可重复。由于Set中的元素是不可重复的,在每次向一个Set中插入新的元素时,如果没有hashCode,就需要遍历整个集合检查是否已经存在该元素。这样会使Set的效率非常低下。使用哈希算法可以提高从元素集合中查找一个元素的效率。根据集合元素的hashCode来将元素

2012-09-16 04:31:43 2872

原创 C#中包含子类集合的类的Equals方法重写

最近的项目中,对于单元测试,我们使用NMock来模拟测试方法中依赖的方法的行为。我们在定义模拟方法的参数值和返回值时遇到了问题。当参数或返回值为一个对象时,我们必须重写它的Equals方法来使模拟值与实际的值匹配。因此我会为每个实体类重写Equals和GetHashCode方法。我们有这样一个类:public class ShippingRequest{ IEnumera

2012-09-15 02:48:04 2799

原创 Java中的枚举类型

enum关键字是一个看似很小的特性。使用这个关键字,我们可以创建一个枚举类型。事实上,在使用enum关键字创建新的枚举类型时,其实是创建了一个java.lang.Enum 类的子类。枚举中每个指定的值都可以看做是该类的一个实例。不过我们并不需要在意枚举的本质,只需要将它当做一种创建数据类型的方式,然后可以将获得的类型直接使用即可。在项目开发过程中,我们经常需会用到一些常量,比如

2012-09-14 01:39:11 3397

原创 单例模式(Singleton Pattern)

单例模式确保一个类只有一个实例,并提供一个全局访问点。某些对象我们只需要一个,比如线程池、缓存、注册表等等。如果这些类拥有多个实例,可能会产生很多问题。使用单例模式可以确保我们使用的这些全局资源只有一份。一个经典的单例模式的实现:public class Singleton{ private static Singleton uniqueInstance; private Si

2012-09-13 01:38:28 1280

原创 什么是java泛型

什么是泛型呢?我们首先写一个最简单的泛型类来说明:public class Generics { //T是type的简称,可以使用任何名称代替 private T o; //泛型成员变量 public Generics(T o){ this.o=o; } public T getObject() { return o; } public void setObject(T

2012-09-12 00:04:49 6109

转载 如何在Java中避免equals方法的隐藏陷阱

译者注 :你可能会觉得Java很简单,Object的equals实现也会非常简单,但是事实并不是你想象的这样,耐心的读完本文,你会发现你对Java了解的是如此的少。如果这篇文章是一份Java程序员的入职笔试,那么不知道有多少人会掉落到这样的陷阱中。原文转自http://www.artima.com/lejava/articles/equality.html 三位作者都是不同领域的大拿,有兴趣的读者

2012-09-11 22:25:12 1052

原创 【算法】一个小算法的非递归方式的两种实现

某幢大楼有100层。你手里有两颗一模一样的玻璃珠。当你拿着玻璃珠在某一层往下扔的时候,一定会有两个结果,玻璃珠碎了或者没碎。这幢大楼有个临界楼层。低于它的楼层,往下扔玻璃珠,玻璃珠不会碎,等于或高于它的楼层,扔下玻璃珠,玻璃珠一定会碎。玻璃珠碎了就不能再扔。现在让你设计一种方式,使得在该方式下,最坏的情况扔的次数比其他任何方式最坏的次数都少。也就是设计一种最有效的方式。解决方案1(一个

2012-09-10 21:48:34 4412 2

原创 java中的静态变量、静态方法与静态代码块

我们知道类的生命周期分为装载、连接、初始化、使用和卸载的五个过程。其中静态代码在类的初始化阶段被初始化。而非静态代码则在类的使用阶段(也就是实例化一个类的时候)才会被初始化。静态变量可以将静态变量理解为类变量(与对象无关),而实例变量则属于一个特定的对象。静态变量有两种情况:静态变量是基本数据类型,这种情况下在类的外部不必创建该类的实例就可以直接使用静态

2012-09-09 17:49:43 9164

原创 java中的参数传递与引用

有些java书籍在介绍java中的传参时都说,不论是基本类型还是对象类型,都是传值。这种说法不能算错,但往往让很多初学java的人感到很困惑。因为这里所说的传值与c++中简单变量的传值已经不是同一个概念。对于java传参,我觉得更准确一点的描述是,不论参数是什么类型,传递的都是参数的副本。对于基本类型的变量,传递值的副本。对于引用类型的变量(包括对象与数组),传递引用的副本。由于引

2012-09-09 01:02:42 1146

原创 【排序算法】鸡尾酒排序的实现与分析

以升序排序为例:算法思路鸡尾酒排序即双向的冒泡排序,是冒泡排序的轻微变形。它的主要思路是对于一组无规律排放的数字,先找到最大的数字放到最后一位,在反向找到最小的数字放到第一位。然后再找第二大的数字放到倒数第二位,再找第二小的数字放到第二位。以此类推,直到所有数字有序排列。代码实现public class CocktailSort

2012-09-07 23:20:18 3629 1

原创 【排序算法】冒泡排序的实现与分析

以升序排序为例:实现方法将所有的待排序的n个数字放入数组中。从第1个数字开始遍历数组,两两比较数组中的元素,如果前者大于后者,则将两者位置进行交换。一次遍历后,最大值将排在最后一个位置上。然后对前n-1个元素做第二次遍历和交换,遍历后第二大的数字将被排到数组的倒数第二个位置。以此类推。代码实现public class BubbleSort {

2012-09-07 00:41:29 1284

转载 各种排序算法及其复杂度

稳定的  冒泡排序(bubble sort) — O(n^2)  鸡尾酒排序(Cocktail sort,双向的冒泡排序) — O(n^2)  插入排序(insertion sort)— O(n^2)  桶排序(bucket sort)— O(n); 需要 O(k) 额外空间  计数排序(counting sort) — O(n+k); 需要 O(n+k) 额外空间  合并

2012-09-06 23:20:24 1488 2

原创 java中类与对象的生命周期

类的生命周期.java源文件经过编译后会生成相应的字节码文件(.class)。jvm通过解释器翻译字节码文件并在系统中执行。而java类的生命周期就是其字节码文件装载、连接、初始化、使用、和卸载的整个过程。装载。jvm找到需要装载的类,将类的信息装载到jvm的方法区中。然后在堆区实例化一个java.lang.Class对象,作为方法区中的类的

2012-09-06 00:21:36 2580

转载 人生最不值得你去做的30件事

玛丽亚·罗宾森(Maria Robinson)说过,"没有人可以回到过去重新开始,但每一个人都可以从现在开始创造全新的未来。"所言极是,不过在你开始这样的人生转变之前,你须得放弃那些拖你后腿且不值得你去做的事情才行。下文谈到的30个想法就是不错的着手点:1、不要把时间浪费在错误的人身上。人生短暂,所以你不该把你的宝贵岁月与压榨你幸福的人分享。假如别人真的需要你,他们自会腾出

2012-09-05 22:52:45 1445 1

原创 java中的基本数据类型与封装类

java提供了一组基本数据类型,包括boolean, byte, char, short,  int, long, float, double, void. 同时,java也提供了这些类型的封装类,分别为Boolean, Byte, Character, Short, Integer, Long, Float, Double, Void。既然提供了基本类型,为什么还要使用封装类呢?

2012-09-04 23:59:50 18864 2

原创 【笔试题】一个无重复面值的找零算法的思路与实现【方案2】

给出升序排列的N个数字,比如1, 2, 3, 7, 70找出无法被这组数字组成的最小正整数。(这组数字中每个数字最多使用一次)(1)简单描述你的算法和思路。(2)用C/C++实现(3)分析你的代码的时间复杂度和空间复杂度解题思路:这个问题类似于一个硬币找零问题的升级版。现存在一堆面值为V1, V2, V3, ...的硬币,每种面值的硬币只有一枚,现在需要为顾客找出总

2012-09-04 01:49:12 1432

原创 Java中的错误与异常

在java.lang软件包中有一个java.lang.Throwable类,这个类是java中所有错误和异常的超类。顾名思义,这个类(以及子类)的实例可以通过JVM或者java的throw语句抛出。而catch子句的参数也只能是Throwable类型(或者其子类型)。Throwable类有两个子类,Error与 Exception。错误与异常都是在程序编译和运行时出现的错误。不同的是,

2012-09-03 00:24:31 4438 1

原创 【笔试题】一个无重复面值的找零算法的思路与实现

在论坛上看到有人问了一个类似的算法题:给出升序排列的N个数字,比如1, 2, 3, 7, 70找出无法被这组数字组成的最小正整数。(这组数字中每个数字最多使用一次)(1)简单描述你的算法和思路。(2)用C/C++实现(3)分析你的代码的时间复杂度和空间复杂度解题思路:这个问题类似于一个硬币找零问题的升级版。现存在一堆面值为V1, V2, V3, ...的硬币,每种面

2012-09-01 18:01:44 2314

原创 Java.lang软件包中的类

java.lang软件包是java语言的核心部分,它提供了java中的基础类。java.lang.Object,这是java.lang的根类,也是所有java类的超类。在构造java类的实例时,都先调用Object中的默认构造方法。类java.lang.Class也是一个非常重要的类。Class 类的实例用来表示正在运行的 Java 应用程序中的类和接口。Class对象

2012-09-01 02:47:43 6521 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除