存档

2014年5月 的存档

简易Java(10):Java字符串的“引用传递”

2014年5月27日 没有评论

前面有说明“图解Java字符串的不可变性”,后面有解释“为什么Java中的字符串是不可变的? ”。还有一篇与时俱进的substring()方法在JDK6和JDK7中的异同 ”。下面,上演第四篇“Java字符串的‘引用传递’”。

这也是一个Java中的一个经典问题。很多类似的问题在StackOverflow被提出。同样有很多不完整甚至不正确的回答。如果不深入思考,这问题很简单。但是,如果我们稍微深究一下,那么她却显得很“迷人”。

1、一段有趣而诡异的代码 阅读全文…

分类: Java, 挨踢(IT) 标签: , ,

简易Java(08):为什么Java中的字符串是不可变的?

2014年5月23日 没有评论

“图解Java字符串的不可变性”中,介绍了在Java中字符串是不可改变的。但是,大家有没有想过“为什么字符串是不可变的?”今天就来给大家解释一下这个问题。

通过substring()方法在JDK6和JDK7中的异同 ”这篇文章,让D瓜哥看到,对于字符串的处理也是与时俱进。所以,如果发现下文中如有已经过时之处,请及时指出。D瓜哥也会及时更正的。

这是面试中经常被问到的老问题了。在Java中,将字符串设计成不可变是又很多原因的。一个好的回答需要建立在 阅读全文…

简易Java(07):substring()方法在JDK6和JDK7中的异同

2014年5月21日 没有评论

看到substring(),D瓜哥就想起来去年面试的惨痛精力。连续两次被问到substring()会造成什么问题;第一次被问到时,确实不知道会造成什么问题,面试结束后就查了查资料。但是,没有认真看。没想到接下来的面试又问到,由于没有看,还是没回答上来,结果面试就惨遭失败!

没想到,这次又遇到了substring()。所以,这篇文章D瓜哥必须好好翻译!

substring()会造成什么问题,请看参考资料

另外,需要提前说明一点,本节内容是针对Oracle JDK来说明的,其他JDK的实现也许可能不同。请读者自己查看相关文档以及源代码。

substring(int beginIndex, int endIndex)方法,在JDK6和JDK7中的实现是不一样的。了解实现的不同之处,可以帮助我们更好地使用这个方法。为了简单起见, 阅读全文…

分类: Java, 挨踢(IT) 标签: , , ,

简易Java(06):图解Java字符串的不可变性

2014年5月20日 没有评论

本节,我们将通过一系列的图片来解释Java String的不可变性。

1、声明一个字符串

String s = "abcd";

s存放了到字符串对象的引用。下面图片中的箭头就代表这种“存放引用”。

存放应用

2、将 阅读全文…

分类: Java, 挨踢(IT) 标签: , ,

在阿里云安装WordPress

2014年5月19日 8 条评论

前两天上网,看到竟然可以使用阿里云。D瓜哥的“‘地瓜哥’博客网”访问速度实在是不给力。所以,准备搬到国内。因为在“博客园”上经常看到阿里云各种坑爹。所以,一直犹豫要不要买。正好借这个机会,试用一下,尝尝鲜。所以,果断申请试用。

目前考虑,准备在阿里云上搭建一个PHP环境用于存放博客。另外,搭建一套Rails环境,准备放点自己倒腾的东西。所以,果断选择Ubuntu 12.04系统(阿里云里面支持的最新版了,可惜没有14.04版)。

因为,一直没有自己搭建过PHP的运行环境。所以,记录一下这个过程,以备后用,也分享给喜欢倒腾的朋友。

更新系统

  • 备份源文件。命令如下:
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bk
  • 打开源列表的配置文件:
sudo vim /etc/apt/sources.list

然后, 阅读全文…

简易Java(05):Javadouble示例

2014年5月16日 没有评论

其实,这篇文章所讲内容非常简单、非常基础。相信99%的Java程序员都了解。不过,为了整个《简易Java》系列的完整性,还是把这篇文章翻译出来了。大家可以忽略这篇文章,直接飞过。

你应该遇到过这样的情形,你想得到一个double类型的数,但是却得到一个int类型的数。

对于如下方法,devide(2, 3)将返还0.0。

/**
 * Coder: D瓜哥,http://www.diguage.com/
 */
public static double devide(int x, int y) {
    return x / y;
}

问题就在于 阅读全文…

分类: Java, 挨踢(IT) 标签: ,

简易Java(04):Java如何进行静态类型检查?

2014年5月15日 2 条评论

维基百科上对“静态类型检查”和“动态类型检查”的介绍如下:

静态类型检查是一个基于程序源代码分析来确保程序类型安全的过程。

动态类型检查是一个在运行时检查程序类型安全的过程。

Java语言在编译时使用静态类型检查来分析程序。如果有类型错误,则报错。基本思想是不要让类型错误在运行时发生。通过下面的例子,可以更好地理解Java中静态类型检查的工作原理。

1、代码示例

假设我们有如下两个类, 阅读全文…

分类: Java, 挨踢(IT) 标签: ,

简易Java(03):Java类何时以及如何加载并初始化?

2014年5月14日 没有评论

开发Java程序时,我们想编辑一个.java文件,然后该文件被编译器编译成.class文件。Java在运行时,自己加载所需要的类。但是,加载初始化有什么不同,却让人难以区分。一个Java类在何时以及如何被加载和初始化呢?让我们通过下面的例子来给大家清晰地描述一下。

1、 “加载一个类”是什么意思?

在C/C++中,首先被编译成本地机器代码,然后在编译之后有一个链接过程。所谓链接,就是将不同地方的源代码搜集起来,然后生成一个可执行文件。但是,Java并不这样。在Java中,类似链接的过程是在加载到Java虚拟机时完成的。

不同Java虚拟机,加载类的方式也不同。(D瓜哥注:即使同一个虚拟机,不同的类,加载方式也可能不同。)但是,最基本的加载规则是按需加载。如果已经加载过的类需要其他类,则这些被需要的类就加载。这个加载过程是递归进行的。

2、一个类何时以及如何加载?

在Java语言中,加载规则由ClassLoade来处理。下面, 阅读全文…

分类: Java, 挨踢(IT) 标签: ,

简易Java(02):如何构建您自己的Java库?

2014年5月13日 没有评论

代码重用(Code Reuse)是软件开发中重点考虑的因素之一。将常用的功能组织起来,构建成一个“自产自销”的私有库是一个非常好的主意!只要有一些方法被调用,则将其简化成一个方法调用。至于Java,最直接了当的就是管理一个库。在Eclipse中,有个一个简单的例子。为了这个演示构建库的方法,这个库很简单,仅仅包含一个add方法。

  • 步骤1:创建一个名为MyMathJava项目,然后添加一个库Simple,然后在类中添加一个方法add

包(Package)结构如下所示:

包结构

阅读全文…

分类: Java, 挨踢(IT) 标签: ,

简易Java(01):从HelloWorld中可以学到什么?

2014年5月12日 4 条评论

HelloWorld程序是每一个Java程序员都知道的程序。它很简单,但是小事物却包含着大道理,它可以帮助我们更深入的去理解Java中一些更复杂的原理。在这篇文章中,我将向大家说明我们能从这个简单程序中学到什么知识。如果你能从HelloWorld中体会到更多东西,请留言告知。

public class HelloWorld {
    /**
     * Coder: D瓜哥,http://www.diguage.com/
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        System.out.println("Hello World");
    }
}

1、为什么一切事物皆从一个类(Class)开始?

Java程序都是从类开始构建的, 阅读全文…

分类: Java, 挨踢(IT) 标签: ,