在面向对象中讲,类是对象群体的抽象,对象是类的实例, 类做为对象的模板可以生成无数多个实体,每一个实体都是类的一种特例.
这是普通的情况,也是就一个类对应多个对象.
有普通就有特殊,
一个类没有实例对象,如工具类.
一个类只有一个实例对象,如单体类,
一个类有有限数量的实例对象,如枚举类.
定义一个工具类:
public class XXXUtil {
private XXXUtil() {
}
public static void xxxxMethod() {
}
/*
*其他工具方法
*/
}
要注意的是:工具类的访问修饰符根据使用范围来定.
构造方法推荐使用private修饰符,以关闭实例化和子类化.
虽然Java中使用对象调用static方法是可以的,但这是不规则的写法,
子类化一个工具类是没有意义的,抽象类才是应该被子类化,具体类都不推荐子类化,子类化可以做到复用,但子类化最大的用处是为了封装变化的代码,进行多态调用.
定义一个单体类:
import java.io.Serializable;
public class Singleton implements Serializable{
private static final serialVersionUID = 2342352342L;
private static final Singleton INSTANCE;
static {
INSTANCE= new Singleton();
}
private Singletion() (){
}
public static Singleton getInstance() {
return INSTANCE;
}
public synchronized void xxxxMethod() {}
/*
*其它方法.
*/
private Object readResolve() throws ObjectStreamException {
return INSTANCE;
}
}
要注意的是:定义静态字段,并用静态代码块初始化.效果和用静态初始化语句相同,静态代码块和静态初始化语句在类型初始化时都会被虚拟机整到一个静态初始化方法中去.
如果用lazy加载方法要注意同步,如果不同步可能会现线程争用情况.
静态代码块不会出现线程同步问题在于静态数据的初始化是类型初始化的一部分,虚拟机会自动保证线程安全.
最后一个方法是在单体类实现Serializable接口后用于分布式环境下的正确性.反序列化本身是另一种创建对象的方式,初始化对象的数据是二进制流,显式的或默认的readObject方法都会重新生成一个新的对象,readResolve方法返回的对象会替代掉反序列化生成的对象.
定义一个枚举类:
//jdk1.5之前
public class Season {
public static final Season SPRING = new Season("spring");
public static final Season SUMMER = new Season("summer");
public static final Season AUTUMN = new Season("autumn");
public static final Season WINTER = new Season("winter");
private static int count;
private int index = count++;
private String name;
private Season(String name){
this.name = name;
}
public int getIndex() {
return this.index;
}
public String getName() {
return this.name;
}
}
要注意的是:count与SPRING,SUMMER,AUTUMN,WINTER在类中声明的先后顺序.像这种情况,count有无初值没有关系,count总是从零算起,如果count声明在上面,则按count的初始值算起,这个也是静态数据的初始化问题.
这里没有实现Serializable接口,如果实现了,处理方式与上面的单体类处理方式相同.
//jdk1.5以后
public enum Season2 {
SPRING,SUMMER,AUTUMN,WINTER;
}
这种方式提高到了语法支持的高度.功能更加丰富.
总结:根据类的使用方式,针对不同的情况加以处理.
分享到:
相关推荐
- **类定义**: C++中用来描述一类对象的共同特征和行为的概念。它是一个抽象数据类型,包含了数据成员和成员函数。 - **成员函数**: 定义在类中的函数,用于实现类的行为。 - **数据成员**: 定义在类中的变量,用于...
JAVA类与对象及数组习题 JAVA类和对象及数组是JAVA编程语言的基础概念。下面是关于JAVA类和对象及数组的习题,涵盖了构造方法、继承、多重继承、变量声明、数组初始化等方面的知识点。 1. 构造方法的调用方式: ...
在本实验"3类与对象基础实验(一)"中,我们主要探讨的是Java编程语言中的核心概念——类和对象。这个实验是针对浙江大学城市学院2009级学生的,旨在帮助他们深入理解和掌握面向对象编程的基础。 首先,我们要了解...
类是创建对象的根源,它定义了同一类对象共有的属性和方法。类中的属性(Attribute)可以理解为对象所拥有的变量,而方法(Method)则是对象可以执行的操作或行为。 对象(Object)是类的实例(Instance),是具有...
本章的"【第5章:面向对象基础】_面向对象、类与对象的定义"将详细讲解面向对象编程的核心概念,包括如何定义类、创建对象,以及如何利用继承和多态性设计高效的程序。通过学习,你将能更好地理解和应用Java的面向...
面向对象程序设计是一种主流的编程范式,它以类与对象为基础,强调以对象为程序设计的核心。Java语言是面向对象的,其三大基本特征分别是封装、继承和多态。封装是将数据(属性)和代码(行为)绑定到一起,形成一个...
c++类与对象实习举例。
面向对象编程(OOP)是一种编程思想,它将复杂的信息对象化,将现实的关系抽象化装化成类,通过封装、继承、多态等方式进行处理。在OOP中,类和对象是两个基本概念。 类(Class)是一种引用数据类型,是对一类事物...
c++ 习题 4类与对象.doc (选择 解答 填空)
"java类与对象实例" 在 Java 中,类和对象是两个紧密相连的概念。类是一种蓝图,用于创建对象,而对象是类的一个实例。类描述了对象的基本结构,包括属性、方法和事件等。类设计的关键概念包括封装、继承和多态。 ...
在编程世界里,类与对象是面向对象编程(OOP)的核心概念,它们为我们提供了抽象、封装、继承和多态等重要特性。本教程“类与对象的分析与设计”将深入探讨如何从实际问题中抽离出这些概念,以便进行高效、结构化的...
常对象(Const Object)是指声明为const的类对象,它的成员函数不能修改数据成员。常成员函数(Const Member Function)是在类定义中声明为const的函数,它承诺不修改对象的状态。 最后,对象在内存中的分布情况...
在Java编程语言中,"类与对象教学(1)"是一个重要的学习主题,它涵盖了面向对象编程的基本概念,对比了面向对象编程(OOP)与面向过程编程(POP),并深入探讨了类、对象以及如何在实际开发中创建和使用它们。...
讲述类的声明和类体及其构成,构造方法和对象的创建
### Java类与对象详解 #### 一、面向对象编程的核心理念 面向对象编程(OOP)是一种编程范式,其核心在于将现实世界中的事物抽象为计算机中的对象,通过对象来模拟和处理复杂的问题。这一理念源于试图让编程更加...
开篇对比面向对象与面向过程编程思想,阐述前者优势。接着深入剖析类的定义、成员、修饰符,介绍对象创建方式、内存分配及生命周期。随后探究类与对象关系,详解封装、继承、多态等高级特性。最后回顾知识,建议通过...
在编程世界中,类与对象是面向对象编程(OOP)的核心概念。面向对象编程是一种设计和实现软件的方法,它基于“对象”的概念,而这些对象则是类的实例。类可以看作是创建对象的蓝图,它定义了对象的数据属性和行为。...
本章重点讲解了类与对象的概念及其在Java中的应用。 首先,面向对象的基本思想是基于现实世界的抽象,通过对象、类、继承、封装、多态等概念来构建程序。这种编程方式更符合人类的思维模式,使得代码更易于理解和...
【Java程序设计】类与对象是Java编程的核心概念,它们是面向对象编程的基础。类是对具有相似属性和行为的事物的抽象,而对象是类的实例,代表着具体存在的个体。 在【描述】中,该教案是为了2021年的高校教师资格证...
《面向对象技术与方法》08、类与对象这一章节深入探讨了类与对象的基本概念及其操作,下面我们将详细解析其中的关键知识点。 ### 类与对象的基本概念 类是面向对象编程中用于定义对象的蓝图或模板,它描述了一组...