第四章_对象与类

来源:互联网 发布:淘宝店铺装修页尾 编辑:程序博客网 时间:2024/05/16 18:07

4.1面向对象程序设计

1、oop中不必关心对象的具体实现,只要能够满足用户的需求即可2、oop将数据放在第一位然后再考虑操作数据的算法

4.1.1类

1、类时构造对象的模板或蓝图2、由类构造对象的过程称为构造类的实例3、封装:就是数据隐藏,封装的关键就是,只要知道方法名和参数,而不必了解他的具体实现过程4、实例域:对象中的数据5、方法:操纵数据的过程称为方法

4.1.2对象

1、对象的三个主要特征:行为、状态、标志2、对象的状态:每个对象都保存着描述当前特征的信息

4.1.3识别类

p94

4.1.4类之间的关系

1、类之间的关系:依赖(uses_a)、聚合(has_a)、继承(is_a)2、如果一个类的方法,操纵另一个类的对象,就说一个类以来另一个类,应该尽可能的将相互依赖的类减至最少,术语来说叫耦合度最小

4.2使用预定义类

p95

4.2.1对象与对象变量

1、构造器的名字与类名相同2、new操作符返回的是一个引用3、可以将对象变量设置为null4、可以将对象传递给方法    System.out.println(new Date());   可以将一个方法应用与刚刚创建的对象上    String s=new Date().toString();    5、如果希望构造的对象可以多次使用,需要将对象放在一个变量中    Date birthday=new Date();   注意:一个对象并没有实际包含一个对象,而仅仅引用一个对象6、局部变量不会自动初始为null,而必须通过调用new或者将他设置为null进行初始化

4.2.3更改器方法和访问器方法

1、更改器方法:对实例域做出修改的方法,方法名常加前缀set,(相比于直接赋值更改器方法,可以在赋值前进行错误检查)2、访问器方法:仅访问实例域而不进行修改的方法,方法名常加get,(注意不要编写返回引用可变对象的访问器方法,如果一定要返回一个可变对象的引用,应该首先对他进行克隆)

补充:

1、有时需要获取或设置实例域可以提供以下三项内容:                    一个私有的数据域                    有公共域的访问器方法                    有公共域的更改器方法(可以执行错误检查相对于直接对域赋值)2、Java不使用逗号运算符,但可以在for语句中使用逗号运算符分割的表达式列表3、==是对对象地址的比较,而equals是对对象内容的比较。4、GregorainCalendar月份从零开始计数

4.3用户组定义类

1、在一个文件中只能有一个公共类(public)但可以有任意个非公有类2、强烈建议将实例域设置成private

4.3.4从构造器开始

1、构造器总伴随着new操作符的执行被调用2、总结:构造器与类同名     每个类可以有一个以上的构造器     构造器可以有0个一个或多个参数     构造器没有返回值     构造器总是伴随着new操作一起调用3、所有的Java对象都是在堆中构造的4、不要再构造器(包括方法)中定义与实例域重名的变量

4.3.5隐式参数与显示参数

1、对象在调用方法时除了参数列表中的形参外,还隐式的传递给方法一个参数this(隐式参数)2、在Java中,所有的方法都必须定义在类的内部

4.3.7基于累的访问权限

1、一个方法可以访问所属类的所有对象的私有数据

4.3.8私有方法

1、特点:私有类不会被外部的其他类操作调用,如果方法需要重写,可以直接将其删去,如果方法是公有的,就不能将其删去,因为其代码很可能依赖它

4.3.9fianl实例域

1、构造对象时必须初始化这样的域,并且后面的操作中,不能够在对它进行修改,只代表对象构造之后这样的域不能改变,但并不意味着该域是一个常量。2、final修饰符大都应用于基本类型域,或不可变类的域(如果类的每个方法都不会改变其对象,这种类就是不可变类,example:Stirng类)。

4.4静态域域静态方法

4.4.1静态域

1、如果域定义为static(代表着这个域是属于类的,不属于任何独立对象),那么类的每一个对象对于所以的实例域都有自己的一份拷贝,也就是类的所有实例将共享这个静态域

4.4.2静态常量(static final)

1、Math.PI System.out

4.4.3静态方法

1、是一种不能向对象实施操作的方法。2、可以认为静态方法是没有this参数的方法,因为他是static的,所以他是属于类的,所以建议用使用类名来调用静态方法,不要使用对象来调用静态方法、3、因为静态方法不能操作对象,所以不能在静态方法中访问实例域。但是静态方法可以访问自身类中的静态域;4、可以通过类名调用静态方法,也可以用对象来调用;5、要使用静态方法的情况:        1、一个方法不需要访问对象状态,其所有参数都是显示参数提供;        2、一个方法只需要访问类的静态域;6、static的含义:属于属于类而不属于类对象的变量和函数

总结:static解释为:属于类且不属于对象的变量和函数;

4.4.5工厂方法

4.4.5main方法

1、不需要使用对象调用静态方法。例如:Math.pow();2、main方法不对任何对象执行操作,再启动程序时还没有任何一个对象,main方法将执行并创建程序所需的对象;3、每一个类可以有一个main方法,可以用于对类单元进行测试;p118

4.5方法参数

1、将参数传递给方法或函数的专业术语:按值调用、按引用调用、按名称调用;2、java语言采用的是按值调用,也就是说方法的得到的是所有参数的一个拷贝,特别的是方法不能修改传递给他的任何参数变量的内容;(有点没搞懂)实际上对象引用进行的是值传递,不能实现交换数据的效果;3、方法参数的两种类型:               基本数据类型               对象的引用4、方法参数的使用情况:    一个方法不能修改一个基本数据类型的参数    一个方法可以改变一个对象参数的状态    一个方法不能让对象参数引用一个新的对象

4.6对象构造

1、Java允许重载任何方法,2、签名:就是方法名以及参数类型。注意返回类型不是方法签名的一部分;

4.6.2默认域初始化

1、如果构造器没有显示地给域赋值,那么就会自动地赋为默认值数值为0,布尔值为false,对象应用为null,注意但是必须明确初始化方法中的局部变量

4.6.3无参数的构造器

1、如果编写一个类时没有编写构造器,那么系统就会提供一个无参构造器,这个构造器将所有域的实例域设置为默认值2、如果类中有构造器,但是没有无参构造器,则在构造对象时乳沟没有提供参数就会被视为不合法3、请记住,仅当类没有提供任何构造器的时候,系统才会提供一个默认的构造器

4.6.4显示域的初始化

4.6.5参数名

1、命名技巧:参数变量用与实例相同的名字将实例域屏蔽起来,用this.变量名,引用实例域

4.6.6调用另一个构造器

1、如果构造器的第一个语句形如this();这个构造器将调用同一个类的另一个构造器;

4.6.7初始化块

1、初始化数据域的方法    1、在构造器中设置    2、在声明中赋值    3、初始化块方式        {             }2、初始化块:在一个类的声明中可以包含多个代码块,只要构造类的对象这些块就会被执行;3、先运行初始化块,然后再才运行构造器的主体部分4、初始化块是不必要的,也不常见。通常直接将初始化代码放在构造器中5、调用构造器的具体步骤:    (1)所有数据域被初始化为默认值    (2)按照在类声明中出现的次序,依次执行所有域初始化语句和初始化块    (3)如果构造器第一行调用了第二个构造器,则执行第二个构造器主体    (4)执行这个构造器的主体6、静态域的初始化方法:使用静态的初始化块:                static{                            }    在类第一次加载的时候,将会进行静态域的初始化,
0 0
原创粉丝点击