Java对象与类

本文深入探讨了封装、静态域、静态方法、方法参数、对象构造、包、文档注释以及类的设计技巧等核心概念,帮助开发者构建更高效、更安全的面向对象程序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

对象与类

1、封装的优点
  • 访问器方法(域访问器)

    相对于实例域定义为public域,使用访问其方法的优点是:实例域为只读域,一旦通过构造器构造成功后,外界的任何方法都无法对其进行修改,如此可以确保实例域不会收到外界的干扰。
    
  • 更改器方法(域访问器)

    更改器方法的优点是:可以检查更改数据的属性。
    
    有些时候需要设置实例域的值,需要提供:
    
    • 一个私有的数据域
    • 一个公有的域访问器方法
    • 一个公有的域更改器方法
2、静态域和静态方法
如果将域定义为static,那么每个类只有一个这样的域。而对于实例域,每个对象都有一份拷贝。即使没有对象存在,静态域也存在。它只属于类,而不属于任何独立的对象。

在绝大多数面向对象编程语言中,静态域被成为类域。“static”只是沿用C++的叫法,并没有实际意义。
  • 静态方法

    在下面两种情况下,使用动态方法:
    
    • 当一个方法不需要访问对象状态,其所需参数都是通过显示参数提供。
    • 当一个方法只需要访问类的静态域。
3、 方法参数
  • 在java中方法参数

    一个方法不能修改一个基本数据类型的参数(即数值类型和布尔型)  
    一个方法可以改变一个对象参数的状态
    一个方法不能让参数对象引用一个新对象
    
4、对象构造
  • 重载

    多个方法有相同的名字不同的参数是为重载
    

    可以重载的不仅仅是构造方法

    方法的签名(signature):方法名以及参数类型。
    
  • 默认构造器

    public Student
    {
        name ="";
        id = 0;
        schoolday = new Date();
    }
    默认构造器:它就会被自动的赋为默认值:数值为零,布尔值为false,对象引用为null
    
  • 参数名

    public Employee(String aName, double aSalary)
    {
        name = aName;
        salary = aSalary;
    }
  • 调用另一个构造器

    this(arg1, agr2);
  • 初始化块
    java初始化数据域的方法:

    在构造器中设置值
    在声明中赋值
    初始化块

    首先运行初始化块,然后运行构造函数。

    {};//初始化块用大括号包起来
    static    //静态初始化块
    {
    }
  • 对象析构 和finalize方法

    C++有显式的析构方法,java有自动的垃圾回收器,不支持析构器。
    可以为任意一个类添加finalize方法,finalize方法在垃圾回收器清除对象之前被调用。在实际应用中不要用finalize方法回收任何短缺的资源,因为很难知道这个方法什么时候调用。
    
5、 包
java允许使用包(package)将类组织起来,借助于包可以方便的组织自己的代码,并将自己的代码和别人的代码库分开管理。

标准的java类库分布在多个包里:java.lang, java.util, java.net。
标准的java包具有一个层次结构。也可以使用嵌套层次组织包。
所有标准的java包都处于java和javax包层次中。

使用包的主要作用是确保类名的唯一性。
sun公司建议以公司因特网域名的逆序作为包名。
对于编译器来说,嵌套的包毫无关系。
  • 类的导入

    import

    import语句位于源文件的顶部(package语句的后面)

    import java.util.* //通配符,导入所有的类。

    在发生命名冲突时,增加特定的import语句

    import java.util.*;
    import java.sql.*;
    import java.util.Date; //sql和util都有Date类

    import 不仅可以导入类,还可以导入静态方法和静态域。

    import static java.lang.System.*; 
    //于是就可以
    out.println("Hello");
    exit(0);

    另外还可以导入特定的方法或域

    import static java.lang.System.out;

    导入静态方法和静态域的两个实际作用

    • 算数运算
     Math.sqrt(16);
     sqrt(16);
    • 笨重的常量
    if(d.get(DAY_OF_WEEK)==MONDAY);
    if(d.get(Calendar.DAY_OF_WEEK)=Calendar.MONDAY);
  • 将类放入包中

    将包的名字放在源文件的开头。
    
6、文档注释
/**....*/
/**
@param 参数
@return 返回值
@throws 抛出的异常
@author 作者
@version 版本
@since 始于
@deprecated 
@see 超链接
@link 超链接
  • 包注释
    要产生包注释,就需要在每一个包目录中添加一个名为package.html的文件。
7、类的设计技巧
  • 一定将数据设计为私有
  • 一定要对数据初始化
  • 不要在类中使用过多的基本数据类型
  • 不是所有的域都需要独立的域访问器和域更改器
  • 使用标准格式进行类的定义
    一般使用下面的顺序书写类的内容:

    • 公有访问特性部分
    • 包作用域访问特性部分
    • 私有访问特性部分

    在每一部分中应当按照下列顺序列出:

    • 实例方法
    • 静态方法
    • 实例域
    • 静态域
  • 将职责过多的类进行分解

  • 类和方法名要体现它们的职责
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值