存档

文章标签 ‘面试’

简易Java(18):属性能否重写?为什么?

2015年1月25日 8 条评论

本文将给大家介绍面向对象编程中一个基本的概念–属性隐藏(Field Hiding)。

1、Java中,属性能否被覆盖?

来让我们看看下面的这个示例代码,它创建了两个子类实例:一个被赋值给子类引用,另外一个赋值给父类引用。

package com.diguage.books.simplejava.ar18;

/**
* 属性隐藏示例
* <p/>
* Coder:D瓜哥,http://www.diguage.com/
* <p/>
* Date: 2015-01-25 19:48
*/
class Super {
  String s = "Super";
}

class Sub extends Super {
  String s = "Sub";
}

public class FieldOverriding {
  public static void main(String[] args) {
    Sub c1 = new Sub();
    System.out.println(c1.s);

    Super c2 = new Sub();
    System.out.println(c2.s);
  }
}

输出是什么呢? 阅读全文…

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

简易Java(17):Java中的实例初始化器是什么?

2015年1月11日 1 条评论

在本文中,我们先用一个例子来展示什么是实例变量初始化器(instance variable initializer)、实例初始化器(instance initializer)和静态初始化器(static initializer)。然后,再解释一下实例初始化器的工作机制。

1、执行顺序

看下面这个类,你知道哪个先执行吗? 阅读全文…

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

简易Java(16):Java中的覆盖和重载

2014年11月16日 没有评论

1、定义

对于Java初学者来说,覆盖(Overriding)和重载(Overloading)是两个非常容易混淆的概念。

重载的情况是这样的,在同一个类中,有两个甚至更多的方面,他们名称相同,但是有不同的参数列表。

覆盖的意思是,有两个同名的方法,同时还有相同的参数列表,但是却有不同的实现。其中一个存在于父类中,另外一个在子类中。

2、覆盖 vs 重载

对于覆盖和重载有几个非常重要的事实需要注意:

  1. 真实的对象类型,而不是引用变量的类型,至于哪个覆盖方法会被使用是在运行时决定的;
  2. 引用类型在编译时决定那个重载方法被使用;
  3. 多态性取决于覆盖,而不是重载。

3、覆盖示例

这里有一个覆盖的示例。阅读代码,然后 阅读全文…

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

简易Java(15):Java中equals()hashCode()之间的联系

2014年11月14日 没有评论

Hash函数

Java的最基本的父类java.lang.Object中有两个非常重要的方法定义:

public boolean equals(Object obj)
public int hashCode()

实践证明,正确理解这两个方法非常重要,尤其是向Map中添加用户自定义的对象时。即便如此,甚至有些高级开发人员有时很很难说清楚它们到底应该怎么用。在这篇文章里,我将先展示几个常见的 阅读全文…

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

简易Java(14):ComparableComparator

2014年11月9日 没有评论

ComparableComparator是Java核心API提供的两个接口(interface)。从它们的名字就可以看出,他们用于比较对象的大小。但是,确切来说,它们到底是什么呢?以及它们直接有什么不同之处呢?接下来的两个例子来回答这个问题。这个简单的例子就是比较两种HDTV的尺寸。当阅读完下面的代码,你就知道如何使用ComparableComparator

1、Comparable

一个类实现Comparable接口,是为了可以让其自身的对象和其他对象进行比较。类本身必须实现这个接口,为的是可以和它自己的实例进行比较。要求实现的方法是compareTo()。下面的 阅读全文…

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

简易Java(13):Java中的null到底为何方神圣?

2014年11月3日 1 条评论

让我们从下面这行代码开始:

String x = null;

上面这句话到底做了什么?

在回答这个问题之前,我们需要先回顾一下什么是变量以及什么是变量值?一个常见的比喻是变量就类似一个箱子。就像你可以使用箱子盛放东西一样,你能用变量存放变量值。当你声明一个变量时,你就需要设置它的类型。

Java中主要分为两种数据类型:基本类型和引用类型。声明为基本类型的变量存储变量值;声明为引用类型的变量存储引用。在 阅读全文…

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

简易Java(12):如何高效检查一个数组中是否包含某个值?

2014年9月29日 没有评论

如何检查一个数组(未排序)中是否包含某个特定的值?在Java中,这是一个非常有用并又很常用的操作。同时,在StackOverflow中,有时一个得票非常高的问题。在得票比较高的几个回答中,时间复杂度差别也很大。在下面的例子中,D瓜哥将展示每个方法花费的时间。

1、不同的实现方式

1) 使用List

/**
 * Coder:D瓜哥,http://www.diguage.com/
 */

public static boolean useList(String[] arr, String targetValue) {
    return Arrays.asList(arr).contains(targetValue);
}

2) 使用 阅读全文…

分类: Java, 未分类 标签: , ,

简易Java(09):创建字符串应该用字面量还是构造函数?

2014年7月4日 没有评论

Java中,可以通过下面两个方法来创建一个字符串:

/**
 * Coder:D瓜哥,http://www.diguage.com/
 */

String x = "abc";
String y = new String("abc");

用双引号和用构造函数有什么区别呢? 阅读全文…

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

简易Java(11):细说Java中的lengthlength()

2014年7月3日 没有评论

首先,在开始正文之前,请你快速回答如下问题:

在不使用任何IDE自动补全的情况下,如何获取一个数组的长度?以及,如何获取一个字符串的长度?

这个问题,我问过初级和高级,两个不同层次的开发人员。他们都不能准确而自信地回答这个问题。当IDE提供方便的代码自动补全功能时,它也会带来“理解肤浅”的问题。在这篇文章中,D瓜哥将给大家介绍几个关于Java数组的关键概念。

上述问题的正确答案是: 阅读全文…

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

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

2014年5月27日 没有评论

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

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

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

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