Java核心技术笔记2

类:

由类构造(construct)对象的过程称为创建类的实例(instance)。
封装(encapsulation,有时称为数据隐藏)是与对象有关的一个重要概念。从形式上看, 封装不过是将数据和行为组合在一个包中,并对对象的使用者隐藏了数据的实现方式。对象 中的数据称为实例域(instance field),操纵数据的过程称为方法(method)。对于每个特定的 类实例(对象)都有一组特定的实例域值。这些值的集合就是这个对象的当前状态(state) 无论何时,只要向对象发送一个消息,它的状态就有可能发生改变。
实现封装的关键在于绝对不能让类中的方法直接地访问其他类的实例域程序仅通过对 象的方法与对象数据进行交互。

对象和对象变量:

Date deadline; // deadline doesn*t refer to any object
定义了一个对象变量deadline,它可以引用Date类型的对象。但是,一定要认识到:变量 deadline不是一个对象,实际上也没有引用对象。此时,不能将任何Date方法应用于这个变 量上。语句
s = deadline.toStringO; // not yet
将产生编译错误。

在Java中,任何对象变量的值都是对存储在另外一个地方的一个对象的引用。new操作 符的返回值也是一个引用。下列语句:
Date deadline = new Date();
有两个部分。表达式new Date。构造了一个Date类型的对象,并且它的值是对新创建对象的 引用。这个引用存储在变量deadline中。
可以显式地将对象变量设置为null,表明这个对象变量目前没有引用任何对象。

用户自定义类:

通常, 这些类没有main方法,却有自己的实例域和实例方法。要想创建一个完整的程序,应该将 若干类组合在一起,其中只有一个类有main方法。
源文件名是EmployeeTest.java,这是因为文件名必须与public类的名字相匹配。在一个 源文件中,只能有一个公有类,但可以有任意数目的非公有类。

参数:

在每一个方法中,关键字this表示隐式参数。如果需要的话,可以用下列方式编写 raiseSalary 方法:
public void raiseSal ary (double byPercent)
{
double raise = this.salary * byPercent / 100;
this, sal ary += raise;
}
下面总结一下Java中方法参数的使用情况:
・一个方法不能修改一个基本数据类型的参数(即数值型或布尔型)。
・一个方法可以改变一个对象参数的状态。
・一个方法不能让对象参数引用一个新的对象。

静态方法:

静态方法是一种不能向对象实施操作的方法。
可以认为静态方法是没有this参数的方法。
Employee类的静态方法不能访问Id实例域,因为它不能操作对象。但是,静态方法可 以访问自身类中的静态域。

重载:

如果多个方法(比如,StringBuilder构造器方法)有 相同的名字、不同的参数,便产生了重载。如 果编译器找不到匹配的参数,就会产生编译时错误,因为根本不存在匹配,或者没有一个比 其他的更好。(这个过程被称为重载解析(overloading resolution)。)
Java允许重载任何方法,而不只是构造器方法。因此,要完整地描述一个方法, 需要指出方法名以及参数类型。这叫做方法的签名(signature)。例如,String类有4个 称为indexOf的公有方法。它们的签名是
IndexOf(int)
indexOf(int, int)
indexOf (String)
indexOf(String, int)
返回类型不是方法签名的一部分。也就是说,不能有两个名字相同、参数类型也相 同却返回不同类型值的方法。

无参构造器:

如果在编写一个类时没有编写构造器,那么系统就会提供一个无参数构造器.这个构造 器将所有的实例域设置为默认值,于是,实例域中的数值型数据设置为0、布尔型数据设置 为false、所有对象变量将设置为null。
请记住,仅当类没有提供任何构造器的时候,系统才会提供一个默认的构造器。

初始化块:

前面已经讲过两种初始化数据域的方法:
·在构造器中设置值
·在声明中赋值
实际上,Java还有第三种机制,称为初始化块(initialization block) o在一个类的声明中, 可以包含多个代码块。只要构造类的对象,这些块就会被执行。

包:

Java允许使用包(package)将类组织起来。借助于包可以方便地组织自己的代码,并将 自己的代码与别人提供的代码库分开管理。
标准的Java类库分布在多个包中,包括java.lang、java.util和java.net等。标准的Java 包具有一个层次结构。如同硬盘的目录嵌套一样,也可以使用嵌套层次组织包。所有标准的 Java包都处于java和javax包层次中。
类的导入:一个类可以使用所属包中的所有类,以及其他包中的公有类(public class)□我们可以 采用两种方式访问另一个包中的公有类。第一种方式是在每个类名之前添加完整的包名。 例如:
java.tine.Local Date today = j ava.t i me.Local Date.now();
这显然很繁琐。更简单且更常用的方式是使用import语句。import语句是一种引用包含 在包中的类的简明描述。一旦使用了 import语句,在使用类时,就不必写出包的全名了。
在大多数情况下,只导入所需的包,并不必过多地理睬它们。但在发生命名冲突的时 候,就不能不注意包的名字了:例如,java.util和java.sql包都有日期(Date)类。如果在程 序中导入了这两个包:
import java.util
import java.sql
在程序使用Date类的时候,就会出现一个编译错误:
Date today; // Error—java.util.Date or java.sql.Date?
将类放入包中:要想将一个类放入包中,就必须将包的名字放在源文件的开头,包中定义类的代码之 前。例如,程序清单4-7中的文件Employee.java开头是这样的:
package cot.horstiann.corejava:
public class Employee
{
}…
如果没有在源文件中放置package语句,这个源文件中的类就被放置在一个默认包 (defaulf package)中。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值