Java的对象与类

面向对象程序设计(OOP):不必关心对象的具体实现,只要能满足用户的需求即可。

一、类

概念:构造对象的模板或蓝图,而类构造对象的过程称为创建类的实例。

封装:将数据和行为组合在一个包中,并对对象的使用者隐藏了数据的实现方式。

继承:扩展一个已有的类,这个扩展后的新类具有所扩展的类的全部属性和方法。在新类中,只需提供适用于新类的新方法和数据域就可以了。这种通过扩展一个类来创建新类的过程称为继承。

( 1 ) 构造器:构造器是一种特殊的方法,用来构造并初始化对象。

                例如:new Date( );

注:1>任何对象变量并没有实际包含一个对象,而仅仅引用一个对象。

       2>在Java中,任何对象变量的值都是对存储在另一个地方的一个对象的引用,new操作符的返回值也是一个引用。

       3>构造器与类同名、

 每一个类可以有一个以上的构造器、

 构造器可以有0个、1个或多个参数

 构造器没有返回值

 构造器总是伴随着new操作一起调用

      4>所有Java对象都是在堆中构造的,构造器总是伴随着new操作符一起使用。

( 2 )Java类库中的日期和时间

类库设计者将保存时间与给时间点命名分开,标准的Java类库分别包含两个类:表示时间点的Date类和日历表示法的GregorianCalendar类。

GregorianCalendar类扩展了一个更加通用的Calendar类,用来描述日历的一般属性。

实际上Date类有getDay、getMonth以及getYear方法,但并不推荐使用。对于日历的信息使用日历类更好。

( 3 )更改器方法和访问器方法:

get方法仅仅查看并返回对象的状态,而set方法却对对象的状态进行修改。对实例域做出修改的方法称为更改器方法,仅访问实例域而不进行修改的方法称为访问器方法。

( 4 )静态方法

静态方法是一种不能向对象实施操作的方法,所以不能再静态方法中访问实例域。但是,静态方法可以访问自身类中的静态域。

注:使用静态方法的情况:

1>一个方法不需要访问对象状态,其所需参数都是通过显式参数提供

2>一个方法只需要访问类的静态域。

( 5 )方法参数:共有两种类型:基本数据类型、对象引用

一个方法不能修改一个基本数据类型的参数,而对象引用作为参数就不同,可以很容易修改其中的状态。

注:实际上,对象引用进行的是值传递。

总结:1>一个方法不能修改一个基本数据类型的参数。

 2>一个方法可以改变一个对象参数的状态。

 3>一个方法不能让对象参数引用一个新的对象。

( 6 )对象构造

1>重载:多个方法有相同的名字、不同的参数,便产生了重载。

要完整描述一个方法需要指出方法名以及参数类型,这叫做方法的签名。

2>默认域初始化

如果构造器中没有显式地给域赋予初值,那么就会被自动地赋为默认值。

然而这并不提倡,会影响程序代码的可读性。

3>无参数构造器

很多类都包含一个无参数的构造函数,对象由无参数构造函数创建时,其状态会设置为适当的默认值。

注:
a>如果编写一个类时没有编写构造器,那么系统会提供一个无参数的构造器,这个构造器会将所有的实例域设置为默认值。

b>如果类中提供了至少一个构造器,但是没有提供无参数的构造器,则在构造对象时如果没有提供参数就会视为不合法。

4>显示域初始化

class Employee{
      private String name = "";
}
在执行构造器之前,先执行赋值操作。当一个类的所有构造器都希望把相同的值赋予某个特定的实例域时,这种方式特别有用。

5>调用另一个构造器

关键字this引用方法的隐式参数,然而还有另外的含义。

public Employee( double s ){
        //调用Employee的另一个构造函数
        this("Employee",s);
}

6>初始化块

i>初始化数据域的方法:在构造器中设置值、在声明中赋值、使用初始化块。

class Employee{
	private int id;
	//初始化块
	{
		id = 4;
	}

	public Employee(int k){
		id = k;
	}
}

在构造器构造对象之前先运行初始化块,但这种机制不是必需的,也不常见。

ii>数据初始化步骤:

a>所有数据域被初始化为默认值。

b>按照在类声明中出现的次序,依次执行所有域初始化语句和初始化块。

c>如果构造器第一行调用了第二个构造器,则执行第二个构造器主体。

d>执行这个构造器主体。

iii>静态数据的初始化:

a>提供一个初始化值,或者使用一个静态的初始化块来对静态域进行初始化。

static{
         id = 4;
}

在类第一次加载的时候,将会进行静态域的初始化。

7>对象析构与finalize方法

i>有些面向对象的程序设计语言,如c++,有显示的析构器方法,其中放置一些当对象不再使用时需要执行的清理代码。常见操作是回收分配给对象的存储空间。

由于Java有自动垃圾回收器,不需要人工回收内存,所以不支持析构器。

ii>对于某些对象使用了内存之外的其他资源,例如:文件或使用系统资源的另外一个对象的句柄,回收和再利用将显得十分重要。

可以为任何一个类添加finalize方法,在垃圾回收器清除对象之前调用。但是实际应用中,不要依赖于使用finalize方法回收任何短缺的资源,因为很难知道这个方法什么时候才能够调用。

注:  a>System.runFinalizersOnExit(true)的方法能够确保finalize方法在Java关闭前被调用,不过并不安全,不鼓励使用。

b>有一种代替的方法使用Runtime.addShutdownHook添加“关闭钩”。

( 7 )包

主要原因:确保类名的唯一性。

1>类的导入:一个类可以使用所属包的所有类,以及其他包的公有类。

i>导入方法:

java.util.Date today = new java.util.Date();
或者

import java.util.*;
注:使用import java.util.*;与import java.util.Date;两者对代码的大小没有任何负面影响。

当然明确指明所导入的类将会是代码的读者更加明确加载的类。

2>访问修饰符

访问权限   类   包  子类  其他包

public       ∨    ∨     ∨      ∨

protect     ∨    ∨     ∨      ×

default     ∨    ∨     ×      ×

private      ∨    ×     ×      ×

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值