在面向对象中讲,类是对象群体的抽象,对象是类的实例, 类做为对象的模板可以生成无数多个实体,每一个实体都是类的一种特例.
这是普通的情况,也是就一个类对应多个对象.
有普通就有特殊,
一个类没有实例对象,如工具类.
一个类只有一个实例对象,如单体类,
一个类有有限数量的实例对象,如枚举类.
定义一个工具类:
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;
}
这种方式提高到了语法支持的高度.功能更加丰富.
总结:根据类的使用方式,针对不同的情况加以处理.
分享到:
相关推荐
php5 类与对象 个人总结与简单的例子,类与对象1. PHP 类与对象 2. PHP 类的继承 extends 关键字 3. PHP 构造方法 __construct() 4. PHP 析构方法 __destruct() 5. PHP final 关键字 6. PHP 类的接口 interface...
C++ 类与对象习题,都是入门知识,给初学者参考^-^
很好的题,希望能给大家一点点帮助。 本文件为“JAVA类与对象及数组习题”是题哦
对平面几何中的各种基本图形使用面向对象的设计方法建模,需要设计的类包括:点、直线、三角形、矩形、正方形、圆形、椭圆;设计这些类的数据域和方法;设计类与类之间的关系;使用这些设计的类进行基本的运算。
类与对象练习.pdf
主要内容包括程序设计基础知识、类与对象的基本概念、继承与多态、输入输出流,以及泛型程序设计。此外,本教材还介绍了一些常用数据结构基础知识,使得读者学习本书后,能够解决一些简单的实际问题。整套教材语言...
类与对象.ppt 讲的很具体。主要涉及基础概念,构造函数,析构函数等
第3讲 面向对象—类与对象第3讲 面向对象—类与对象第3讲 面向对象—类与对象第3讲 面向对象—类与对象第3讲 面向对象—类与对象第3讲 面向对象—类与对象第3讲 面向对象—类与对象第3讲 面向对象—类与对象第3讲 ...
c++中类与对象的实验题目,对于初学者有很大的帮助
c++类与对象实习举例。
类与对象的基本概念 及实现代码
c++语言对类与对象的深刻理解!希望与大家分享!
讲述了C++中的类与对象的基本概念
3类与对象基础实验(一) zucc 浙江大学城市学院 java 2009级的
类与对象的定义和使用
JAVA类与对象及数组习题及答案.pdf
c++ 习题 4类与对象.doc (选择 解答 填空)
详细介绍了C++中类与对象的特点和应用,供初学者学习使用
入门练习题 趣学8.15类与对象
java面向对象、类与对象的定义笔记,是第5章节知识要点,很值得一看。