`
ASCII
  • 浏览: 30874 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Java基础知识(不断更新)

阅读更多

1.关于基类构造器与导出类构造器的注意事项

 

public class A
{
       //此处如果没有无参构造方法会报编译错误,因为编译器不知道在导出类中用哪个构造器构造基类
       public A()
       {
              System.out.println("Constructor A");
       }
       
       public A(int i)
       {
              System.out.println("Constructor A int");
       }
}

public class B
{
       public B()
       {
              System.out.println("Constructor B");
       }
}

 

2.方法调用绑定

 

      将一个方法调用同一个方法主体联系起来被称作绑定。若在程序执行前进行绑定,叫做前期绑定。如果在运行时根据对象的类型进行绑定就叫后期绑定。

      Java中除了static和final方法(private方法属于final方法)之外,其他所有的方法都是后期绑定。

 

3.为什么在重写equals()方法时,一般都会重写hashCode()方法?

 

      基于散列法的集合需要使用hashCode()方法返回的散列值存储和管理元素,例如Hashtable、HashMap和HashSet等,在使用这些集合时,首先会根据元素对象的散列码值确定其存储位置,然后再根据equals()方法结果判断元素对象是否已经存在,最后根据判断结果进行不同处理。因此,实际应用时如果重写了equals()方法,那么hashCode()方法也应该被重写。

      HashMap中put的说明:在此映射中关联指定值与指定键。如果该映射包含了一个该键的映射关系,则旧值被替换。

      以下是JDK1.5中HashMap类put方法的源码:

    /**
     * Associates the specified value with the specified key in this map.
     * If the map previously contained a mapping for the key, the old
     * value is replaced.
     *
     * @param key key with which the specified value is to be associated
     * @param value value to be associated with the specified key
     * @return the previous value associated with <tt>key</tt>, or
     *         <tt>null</tt> if there was no mapping for <tt>key</tt>.
     *         (A <tt>null</tt> return can also indicate that the map
     *         previously associated <tt>null</tt> with <tt>key</tt>.)
     */
    public V put(K key, V value) {
        if (key == null)
            return putForNullKey(value);
        int hash = hash(key.hashCode());
        int i = indexFor(hash, table.length);
        for (Entry<K,V> e = table[i]; e != null; e = e.next) {
            Object k;
            if (e.hash == hash && ((k = e.key) == key || key.equals(k))) {
                V oldValue = e.value;
                e.value = value;
                e.recordAccess(this);
                return oldValue;
            }
        }

        modCount++;
        addEntry(hash, key, value, i);
        return null;
    }
 

4.如何重写hashCode()方法?

 

      hashCode()方法在重写时通常按照以下设计原则实现。

 

      (1). 把某个非零常数值,例如17,保存在int型变量result中。

 

      (2).对于对象中每一个关键域f(指equals方法中考虑的每一个域)参照以下原则处理

  • boolean型,计算(f?0:1)。
  • byte、char和short型,计算(int)。
  • long型,计算(int)(f^(f>>>32))。
  • float型,计算Float.floatToIntBits(afloat)。
  • double型,计算Double.doubleToLongBits(adouble)得到一个long,再执行long型的处理。
  • 对象引用,递归调用它的hashCode()方法。
  • 数组域,对其中每个元素调用它的hashCode()方法。

      (3).将上面计算得到的散列码保存到int型变量c,然后执行result = 37 * result + c;

 

      (4).返回result。

 

      为了维护hashCode常规协定,在重写hashCode()方法时需要遵循一定的设计原则,具体如上所述。

public int hashCode() 
{
		int hashCode = 7;
		for (Iterator it = this.genericArgumentValues.iterator(); it.hasNext();) 
        {
			ValueHolder valueHolder = (ValueHolder) it.next();
			hashCode = 31 * hashCode + valueHolder.contentHashCode();
        }
		hashCode = 29 * hashCode;
		for (Iterator it = this.indexedArgumentValues.entrySet().iterator(); it.hasNext();)
        {
			Map.Entry entry = (Map.Entry) it.next();
			Integer key = (Integer) entry.getKey();
			ValueHolder value = (ValueHolder) entry.getValue();
			hashCode = 31 * hashCode + (value.contentHashCode() ^ key.hashCode());
        }
		return hashCode;
}
 

 

5.什么是clone?


      在实际编程过程中,我们常常要遇到这种情况:有一个对象A,在某一时刻A中已经包含了一些有效值,此时可能会需要一个和A完全相同新对象B,并且此后对B 任何改动都不会影响到A中的值,也就是说,A与B是两个独立的对象,但B的初始值是由A对象确定的。

 

解释:  
      浅复制(影子克隆):只复制对象的基本类型,对象类型,仍属于原来的引用.

      深复制(深度克隆):不紧复制对象的基本类,同时也复制原对象中的对象.就是说完全是新对象产生的.

public class B {

}

public class A {

      private B b = new B();

      public B getB() {
            return this.b;
      }
}

       上面这段代码中A类中的getB()获取的B是浅复制还是深复制呢?

分享到:
评论

相关推荐

    Java基础知识点总结.docx

    Java是一种广泛使用的面向对象的编程语言,其基础知识涵盖了多个方面,包括语法、面向对象特性、异常处理、多线程...以上只是Java基础知识的一个概述,每个话题都值得深入探讨和实践,不断学习和总结是提升技能的关键。

    Java基础知识总结.pdf

    ### Java基础知识精炼 #### 一、Java概述与发展历程 Java是一种高级编程语言,由Sun Microsystems公司的James Gosling等人于1991年开始研发,原名为Oak,旨在控制嵌入式设备如有线电视交换盒和PDA。1994年正式更名...

    java基础知识学习入门

    Java编程语言是软件开发领域的重要组成部分,尤其对于初学者来说,掌握Java基础知识是至关重要的。本文将深入探讨Java的学习入门,分享一些实用的学习经验和技巧。 首先,了解Java的基础概念是开始学习的第一步。...

    java基础知识学习资料

    Java基础知识是学习Java编程语言的基石,涵盖了许多关键概念。以下是一些主要的Java基础知识知识点: 1. **数据类型**:Java分为基本数据类型(如int, double, boolean等)和引用数据类型(如类、接口和数组)。...

    JAVA基础知识入门

    对于初学者来说,了解Java基础知识是入门的关键。以下是一些核心的知识点: 1. **基础语法**:Java的基础语法包括变量、数据类型(如整型、浮点型、字符型和布尔型)、常量、运算符、流程控制(如if语句、switch...

    Java基础知识PDF格式

    这份名为“Java基础知识PDF格式”的资料,应该是针对初学者设计的一份教程,旨在帮助读者掌握Java编程的基础概念和技能。在Java的世界里,基础知识包括但不限于以下几个方面: 1. **Java语法**:Java的语法与C++...

    java基础知识教程讲义

    ### Java基础知识教程讲义知识点概览 #### 一、Java的起源与发展背景 - **Java与计算机语言进化的关系**:Java的出现被视为计算机语言发展史上的一次重要变革,其背后有着深厚的背景故事。从B语言到C语言再到C++...

    第一讲 Java基础知识.ppt

    【Java基础知识概述】 Java是一种广泛使用的高级编程语言,由Sun Microsystems公司(现已被Oracle公司收购)于1991年发起的“绿色项目”孕育而生,最初名为Oak。尽管最初的项目目标并未实现,但Java作为一种面向...

    java基础知识详解 Java入门必看 Java面试题集锦

    这份资料集主要涵盖Java基础知识、初学者入门指南以及常见的Java面试题,旨在帮助学习者系统地理解和掌握Java的核心概念。 首先,Java基础知识是理解任何Java程序的基础。这包括: 1. **Java环境搭建**:学习如何...

    corejava基础知识

    学习CoreJava基础知识不仅需要理解和掌握以上知识点,还要通过实践不断巩固,解决实际问题。CoreJavaNoteBook.pdf和corejava.pdf这两份文档,很可能是详尽的教程或笔记,它们将帮助你深入理解并应用这些概念。无论你...

    java基础知识总结(超级经典)

    Java是一种广泛使用的面向对象的编程语言,它简单、面向对象、稳定且跨平台。...学习Java基础不仅仅是学习它的语法和编程模型,还要理解Java的运行环境、开发环境以及如何有效地使用Java平台进行软件开发。

    java 基础知识强化

    Java基础知识是每位Java开发者必须掌握的核心技能,涵盖了编程语法、数据类型、控制结构、类与对象、异常处理、集合框架等多个方面。以下是对这些基础知识的详细解析: 一、Java编程语法 Java是一种强类型、面向...

    java基础知识技术

    ### Java基础知识技术详解 #### 一、Java语言概述 ##### 1.1 Java简介 Java是一种面向对象的编程语言,自1995年由Sun Microsystems公司发布以来,因其跨平台性和强大的功能,在软件开发领域占据了重要的地位。...

    java 基础知识

    Java基础知识是每个想要深入学习Java或从事Java开发的程序员必须掌握的。以下是对Java基础知识的详细阐述: 1. **Java语法基础**: - **变量与数据类型**:Java支持基本数据类型(如int、char、boolean等)以及...

    JAVA学习基础知识

    Java学习基础知识涵盖了编程语言的核心概念,是初学者进入Java世界的必备知识。以下是对这些主题的详细阐述: 1. **Java简介** Java是由Sun Microsystems(现为Oracle公司)开发的一种面向对象的编程语言,它的...

    java基础知识点笔记

    Java是世界上最流行的编程语言之一,尤其对于初学者来说,掌握其基础知识至...总的来说,理解并熟练运用这些Java基础知识点是成为合格的Java程序员的第一步。不断实践和深入学习将帮助你更好地掌握这门强大的编程语言。

    java基础知识文档

    Java是一种广泛使用的面向对象的编程语言,以其...这个"java基础知识文档"涵盖了Java编程的核心领域,对初学者来说是一个全面的学习起点。深入理解这些概念,并通过实践不断巩固,将有助于你成为一名熟练的Java开发者。

    java基础知识速成教程.doc

    本教程将引导你快速掌握Java的基础知识,包括基本概念、编程思想以及关键语法元素。 首先,我们来了解一下Java中的基本数据类型。Java有八种基本数据类型,分为两大类:整型和浮点型。整型包括byte(1字节),short...

Global site tag (gtag.js) - Google Analytics