10-面向对象3
Posted liujiaqi1101
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了10-面向对象3相关的知识,希望对你有一定的参考价值。
构造器
用构造器确保初始化
- 可以假想为编写的每一个类都定义一个initialize()方法
- 该方法的名称提醒你在使用其对象之前,应首先调用initialize()。然而,这同时意味着用户必须记得自己去调用此方法
- 在Java中,通过给定【构造器】,类的设计者可确保每个对象都会得到初始化
- 创建对象时,如果其类具有构造器,Java就会在用户有能力操作对象之前自动调用相应的构造器,从而确保了初始化的进行
- 如何命名这个方法?
- Q1:所取得任何名字都可能与类的某个成员名称相冲突;Q2:调用构造器是编译器的责任,所以必须让编译器知道应该调用哪个方法
- 解决方法:构造器采用与类相同的名称
- 如何使用构造器?
- 老早就已经开始使用了,例如:
Person p = new Person();
- 上述步骤会为对象分配存储空间[new],并调用相应的构造器[Person()]。这就确保了你在能操作对象之前,它已经被恰当地初始化了
- 从概念上讲,"初始化" 和 "创建" 是彼此独立的,但在Java中,"初始化"和"创建"捆绑在一起,两者不能分离
- 老早就已经开始使用了,例如:
- 构造器是一种特殊类型的方法,因为它没有返回值,这与返回值为void明显不同;构造器不会返回任何东西 (new表达式确实返回了对新建对象的引用,但构造器本身并没有任何返回值)
特征
- 它具有与类相同的名称
- 它不声明返回值类型(与声明为void不同)
- 可以有参数,也可以没有参数
- 不能有
return _____;
分类
- 不接受任何参数的构造器叫做【默认构造器(无参构造器)】
- 如果没有给出构造方法,则编译器会自动帮你创建一个默认构造器
public Person() {}
- 但和其他方法一样,构造器也能带有形式参数,以便指定如何创建对象
- 如果已经定义了一个或多个构造器(无论是否有参数),编译器就不会帮你自动创建默认构造器
public Person(String name, int age) {...}
public Person(String name) {...}
public Person(int age) {...}
public Person() {...}
注意
- Java语言中,每个类都至少有一个构造器
- 默认构造器的修饰符 与 所属类的修饰符 一致
- 一个类可以创建多个重载的构造器
- 定义一个有返回值且方法名与类名同名的方法,OK,程序不会报错
属性的赋值过程
- 赋值的位置
- 默认初始化
- 显式初始化
- 构造器初始化
- 通过 "对象.属性" 或 "对象.方法" 的方式赋值
- 赋值的先后顺序:① → ② → ③ → ④
JavaBean
- JavaBean是一种Java语言写成的可重用组件
- 所谓JavaBean,是指符合如下标准的Java类
- 类是公共的
- 有一个无参的公共的构造器
- 有属性,且有对应的get、set方法
- UML
this
引入
- 为了能用简便、面向对象的语法来编写代码,编译器做了一些幕后工作。它暗自把 "所操作对象的引用" 作为第一个参数传递给show()。所以上述两个方法调用变成了:
a1.show(a1); a2.show(a2);
- 而每个 !static方法的形参列表中都隐含一个指向当前正在调用该方法的对象形参
概述
- 假设你希望在方法的内部获得对当前对象的引用。由于这个引用是编译器"偷偷"传入的,所以没有标识符可用。但是,为此有个专门的关键词:this,它是一个系统隐含的指针,被自动附加在非静态的成员方法参数列表中
- this只能在方法内部使用,表示对 "调用方法的那个对象" 的引用;this的用法和其他对象引用并无不同
- 注意,如果在方法内部调用同一个类的另一个方法,就不必使用this,直接调用即可。当前方法中的this引用会自动应用于同一类中的其他方法
- 特殊情况,如果方法的形参和类的属性同名时,必须显式的使用"this.属性"的方式,表明此变量是属性,而非形参
- this 可以调用类的属性、方法和构造器
- this根据使用环境不同,具体可分为2种情况
- 在成员方法中:代表调用了该方法的对象
- 在构造器中:代表该构造器正在初始化的对象
在构造器中调用构造器
- 可能为一个类写了多个构造器,有时可能想在一个构造器中调用另一个构造器,以避免重复代码。可用this做到这一点
- 通常写this的时候,都是指"当前对象",而且它本身表示对当前对象的引用。在构造器中,如果为this添加了参数列表,那么就有了不同的含义。这将产生对符合此参数列表的某个构造器的明确调用(除构造器外,编译器禁止在其他任何方法中调用构造器)
- 注意,尽管可以用this调用一个构造器,但却不能调用两个。此外,必须将构造器调用置于最起始处,否则编译器会报错
package
- 为了更好的实现项目中类的管理,提供了"包"的概念
- package语句作为Java源文件的第一条语句,指明该文件中定义的类所在的包
- 包对应于文件系统的目录,package语句中,用 "." 来指明包(目录)的层次
- 格式:
package 顶层包名.子包名;
- MVC设计模式
- JDK中主要包介绍
import
- 为使用定义在不同包中的Java类,需用import语句来引入指定包层次下所需要的类或全部类(.*) // import语句告诉编译器到哪里去寻找类
- 语法格式:
import 包名.类名;
- 应用举例
import java.util.*;
import cn.edu.nuist.test.Demo;
- 如果导入的类或接口是java.lang包下的,或者是当前包下的,则可以省略此import语句
- 如果在代码中使用不同包下的同名的类,那么至少有一个类需要使用类的全类名的方式指明调用的是哪个类
import java.util.*; ... Date date = new Date();
java.sql.Date date1 = new java.sql.Date(1064603372);
- 已经默认导入java.lang包下的类,那么如果还需要使用lang包下的子包中的类的话,仍然需要导入
- import static 组合的使用:调用指定类或接口下的静态的属性或方法(注意!落脚点是类中的结构)
import static java.lang.System.*; ... [System.(省略)] out.println("Hello");
import static java.lang.Math.*; ... [Math.(省略)] round(10.24);
以上是关于10-面向对象3的主要内容,如果未能解决你的问题,请参考以下文章