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是一种广泛使用的面向对象的编程语言,其基础知识涵盖了多个方面,包括语法、面向对象特性、异常处理、多线程...以上只是Java基础知识的一个概述,每个话题都值得深入探讨和实践,不断学习和总结是提升技能的关键。
### Java基础知识精炼 #### 一、Java概述与发展历程 Java是一种高级编程语言,由Sun Microsystems公司的James Gosling等人于1991年开始研发,原名为Oak,旨在控制嵌入式设备如有线电视交换盒和PDA。1994年正式更名...
Java编程语言是软件开发领域的重要组成部分,尤其对于初学者来说,掌握Java基础知识是至关重要的。本文将深入探讨Java的学习入门,分享一些实用的学习经验和技巧。 首先,了解Java的基础概念是开始学习的第一步。...
Java基础知识是学习Java编程语言的基石,涵盖了许多关键概念。以下是一些主要的Java基础知识知识点: 1. **数据类型**:Java分为基本数据类型(如int, double, boolean等)和引用数据类型(如类、接口和数组)。...
对于初学者来说,了解Java基础知识是入门的关键。以下是一些核心的知识点: 1. **基础语法**:Java的基础语法包括变量、数据类型(如整型、浮点型、字符型和布尔型)、常量、运算符、流程控制(如if语句、switch...
这份名为“Java基础知识PDF格式”的资料,应该是针对初学者设计的一份教程,旨在帮助读者掌握Java编程的基础概念和技能。在Java的世界里,基础知识包括但不限于以下几个方面: 1. **Java语法**:Java的语法与C++...
### Java基础知识教程讲义知识点概览 #### 一、Java的起源与发展背景 - **Java与计算机语言进化的关系**:Java的出现被视为计算机语言发展史上的一次重要变革,其背后有着深厚的背景故事。从B语言到C语言再到C++...
【Java基础知识概述】 Java是一种广泛使用的高级编程语言,由Sun Microsystems公司(现已被Oracle公司收购)于1991年发起的“绿色项目”孕育而生,最初名为Oak。尽管最初的项目目标并未实现,但Java作为一种面向...
这份资料集主要涵盖Java基础知识、初学者入门指南以及常见的Java面试题,旨在帮助学习者系统地理解和掌握Java的核心概念。 首先,Java基础知识是理解任何Java程序的基础。这包括: 1. **Java环境搭建**:学习如何...
学习CoreJava基础知识不仅需要理解和掌握以上知识点,还要通过实践不断巩固,解决实际问题。CoreJavaNoteBook.pdf和corejava.pdf这两份文档,很可能是详尽的教程或笔记,它们将帮助你深入理解并应用这些概念。无论你...
Java是一种广泛使用的面向对象的编程语言,它简单、面向对象、稳定且跨平台。...学习Java基础不仅仅是学习它的语法和编程模型,还要理解Java的运行环境、开发环境以及如何有效地使用Java平台进行软件开发。
Java基础知识是每位Java开发者必须掌握的核心技能,涵盖了编程语法、数据类型、控制结构、类与对象、异常处理、集合框架等多个方面。以下是对这些基础知识的详细解析: 一、Java编程语法 Java是一种强类型、面向...
### Java基础知识技术详解 #### 一、Java语言概述 ##### 1.1 Java简介 Java是一种面向对象的编程语言,自1995年由Sun Microsystems公司发布以来,因其跨平台性和强大的功能,在软件开发领域占据了重要的地位。...
Java基础知识是每个想要深入学习Java或从事Java开发的程序员必须掌握的。以下是对Java基础知识的详细阐述: 1. **Java语法基础**: - **变量与数据类型**:Java支持基本数据类型(如int、char、boolean等)以及...
Java学习基础知识涵盖了编程语言的核心概念,是初学者进入Java世界的必备知识。以下是对这些主题的详细阐述: 1. **Java简介** Java是由Sun Microsystems(现为Oracle公司)开发的一种面向对象的编程语言,它的...
Java是世界上最流行的编程语言之一,尤其对于初学者来说,掌握其基础知识至...总的来说,理解并熟练运用这些Java基础知识点是成为合格的Java程序员的第一步。不断实践和深入学习将帮助你更好地掌握这门强大的编程语言。
Java是一种广泛使用的面向对象的编程语言,以其...这个"java基础知识文档"涵盖了Java编程的核心领域,对初学者来说是一个全面的学习起点。深入理解这些概念,并通过实践不断巩固,将有助于你成为一名熟练的Java开发者。
本教程将引导你快速掌握Java的基础知识,包括基本概念、编程思想以及关键语法元素。 首先,我们来了解一下Java中的基本数据类型。Java有八种基本数据类型,分为两大类:整型和浮点型。整型包括byte(1字节),short...