对象与类
01面向对象
众所周知,Java是一个面向对象(OOP)的程序设计模式,即所谓,有了对象再确定我们调用什么方法去解决它。
而类(class)即可以理解为我们构建对象的模板。而由类构造(construck)对象的过程我们则称之为创建类的实例(instance)。封装是我们处理对象的又一个重要的概念,其将数据和行为组合在一个包中,并对对象的使用者隐藏了具体的使用方式。其中操作数据的过程,我们称之为方法(method)。另一个重要的概念是继承,会在后续提到。
对于对象有三点需要注意:对象的行为、对象的状态、对象的表示。
OOP编程一个简单的第一步就是从识别类开始,一般类十一大写开头的名词(方法则通常对应动词)。
类与类之间有三个典型的关系:依赖 聚合(注:例如特殊与一般的两种类) 继承
02预定义类
对象与对象变量:在Java程序设计中,我们会通过构造器来构造新实例并初始化对象。构造器是一个特殊的方法。构造器与类名通常相同,例如Date类的构造器名为Date,并在之前加上new,即表达了构造了一个新的对象。而构造出的对象可以定义一个变量来引用我们所构造出的这个对象。即对象变量并没有实际包含一个对象而是去引用一个对象。
更改器与访问器方法:
例如add方法,会改变对象的状态,为更改器方法。
例如get方法,仅仅访问对象我们称之访问器方法。
故在编写程序时,我们或创捷一个类以及一个类的接口,在实际使用时,即可以通过这个接口使用这个类的方法来实现复杂的任务。
03自定义类
即我们自己定义的一个类,例如User,Employee,Student等等我们用过的。
在自定义类中常包含构造器以及若干方法。并在类中我们会定义一些实例字段(常用private修饰)来存放将要操作的数据。(注:一些实例字段本身就是对象,例如String的name)。
此时关于构造器我们再记住这么几点:
构造器与类同名
每个类可以有一个以上构造器
构造器可以有多个或者0个参数
构造器没有返回值
构造器总是伴随着new操作符来一起调用。
注:用var我们可以来声明局部变量
一个对象变量表示对一个对象的引用,这个值可以是一个特殊的null值,表示没有引用任何对象(在使用时,注意使用不当会引起空指针异常)
显示参数与隐式参数:位于方法名后的括号中的数值即为一个显示参数,隐式参数则是出现在方法前类名类型的对象。对于隐式对象,可以用关键字this来表示。
类访问权限:public protected default private由高到低。
04静态字段与静态方法
static修饰符修饰的,即静态
静态字段:若将一个字段用static来修饰,那么每个类只有一个这样的字段。对于非静态字段,每个对象都有一个自己的副本,而静态字段属于这个类(即便没有对象存在)
静态常量:常量的存在不允许被重新赋值。
静态方法:静态方法并非在对象上执行的方法,我们可以认为静态方法是没有this参数的方法。并可以用类名来调用这个方法。以下两种情况可以使用静态方法:方法不需要访问对象状态;方法只需要访问类的静态字段。
工厂方法:静态工厂方法。此时不用命名构造器,或者使用构造器时无需改变所构造对象的类型。
05方法参数
由于Java程序是按值传递的,所以方法所得到的是所有参数的一个副本,由于原对象的引用以及这个副本都引用同一个对象(即对象变量会与对象引用同时引用同一对象的方法作用的值),从而实现改变对象参数状态的方法。
故对于方法我们可以总结如下:
方法不能修改基本数据类型的参数(数值或者布尔)
方法可以改变对象的参数状态
方法不能让一个对象参数引用一个新的对象
06对象构造
Java中对象构造机制有如下:
重载:多个方法有相同的名字、不同的参数,便出现了重载。
如果构造器中没有显示的设置字段的初始值,那么构造器会赋予默认值,数值为0,布尔为false、引用为null。
无参构造:使用无参构造时,对象的状态会设置为适当的默认值。
除去使用构造器中设置值,以及在声明中赋值,还可以使用初始化块的方法来初始化数据字段。
注:finalize方法,由于Java会自动垃圾回收,该方法已经被废弃。
07包
包即将类组织的在一起的一个集合。从而可以更好的组织代码。
在包中导入类有两种方法:一、采用完全限定名称;二、采用import。
由于类储存在文件系统的子目录中。类路径必须与包名匹配。此外类文件也可以存储在JAR(Java归档文件中)
08JAR文件
一个JAR文件既可以包含类文件,也可以包含诸如图像和声音等其他类型的文件。
09类设计技巧
*一定要保证数据私有
*一定要对数据初始化
*不要在类中使用过多的基本类型
*不是所有的字段都需要单独的字段访问器和字段更改器
*分解有过多职责的类
*类名和方法名要能体现其职责
*优先使用不可变类