• 10-面向对象3


    1. 构造器

    1.1 用构造器确保初始化

    • 可以假想为编写的每一个类都定义一个 initialize() 方法
      • 该方法的名称提醒你在使用其对象之前,应首先调用 initialize()。然而,这同时意味着用户必须记得自己去调用此方法
      • 在 Java 中,通过给定【构造器】,类的设计者可确保每个对象都会得到初始化
      • 创建对象时,如果其类具有构造器,Java 就会在用户有能力操作对象之前自动调用相应的构造器,从而确保了初始化的进行。
    • 如何命名这个方法?
      • Q1:所取得任何名字都可能与类的某个成员名称相冲突;Q2:调用构造器是编译器的责任,所以必须让编译器知道应该调用哪个方法
      • 解决方法:构造器采用与类相同的名称
    • 如何使用构造器?
      • 老早就已经开始使用了,如:Person p = new Person(); 该语句会为对象分配存储空间[new],并调用相应的构造器[Person()]。这就确保了你在能操作对象之前,它已经被恰当地初始化了。
      • 从概念上讲,"初始化" 和 "创建" 是彼此独立的,但在 Java 中,"初始化"和"创建"捆绑在一起,两者不能分离
      • 构造器是一种特殊类型的方法,因为它没有返回值,这与返回值为 void 明显不同;构造器不会返回任何东西 (new 表达式确实返回了对新建对象的引用,但构造器本身并没有任何返回值)

    1.2 特征

    • 它具有与类相同的名称
    • 它不声明返回值类型(与声明为void不同)
    • 可以有参数,也可以没有参数
    • 不能有return _____;

    1.3 分类

    • 不接受任何参数的构造器叫做【默认构造器(无参构造器)】
      • 如果没有给出构造方法,则编译器会自动帮你创建一个默认构造器
      • public Person() {}
    • 但和其他方法一样,构造器也能带有形式参数,以便指定如何创建对象
      • 如果已经定义了一个或多个构造器(无论是否有参数),编译器就不会帮你自动创建默认构造器
      • public Person(String name, int age) {...}
      • public Person(String name) {...}
      • public Person(int age) {...}
      • public Person() {...}

    1.4 注意

    • Java 语言中,每个类都至少有一个构造器
    • 默认构造器的修饰符 与 所属类的修饰符 一致
    • 一个类可以创建多个重载的构造器
    • 定义一个有返回值且方法名与类名同名的方法是 OK 的,程序不会报错。

    2. 属性的赋值过程

    赋值的位置:

    1. 默认初始化
    2. 显式初始化
    3. 构造器初始化
    4. 通过 "对象.属性" 或 "对象.方法" 的方式赋值

    赋值的先后顺序:① → ② → ③ → ④

    3. JavaBean

    JavaBean 是一种 Java 语言写成的可重用组件,所谓 JavaBean,是指符合如下标准的 Java 类:

    • 类是公共的
    • 有一个无参的公共的构造器
    • 有属性,且有对应的 get、set 方法

    统一建模语言(Unified Modeling Language, UML)

    4. this

    4.1 引入

    为了能用简便、面向对象的语法来编写代码,编译器做了一些幕后工作。它暗自把 “所操作对象的引用” 作为第一个参数传递给 show()。所以上述两个方法调用变成了:a1.show(a1); a2.show(a2);

    每个 !static 方法的形参列表中都隐含一个指向当前正在调用该方法的对象形参

    4.2 概述

    假设你希望在方法的内部获得对当前对象的引用。由于这个引用是编译器“偷偷”传入的,所以没有标识符可用。但是,为此有个专门的关键词:this,它是一个系统隐含的指针,被自动附加在非静态的成员方法参数列表中

    this 只能在方法内部使用,表示对“调用方法的那个对象”的引用;this 的用法和其他对象引用并无不同。注意,如果在方法内部调用同一个类的另一个方法,就不必使用 this,直接调用即可。当前方法中的 this 引用会自动应用于同一类中的其他方法

    特殊情况,如果方法的形参和类的属性同名时,必须显式的使用“this.属性”的方式,表明此变量是属性,而非形参。

    this 可以调用类的属性、方法和构造器。根据使用环境不同,具体可分为 2 种情况:

    • 在成员方法中:代表调用了该方法的对象
    • 在构造器中:代表该构造器正在初始化的对象

    4.3 在构造器中调用构造器

    可能为一个类写了多个构造器,有时可能想在一个构造器中调用另一个构造器,以避免重复代码。可用 this 做到这一点。

    通常写 this 的时候,都是指“当前对象”,而且它本身表示对当前对象的引用。在构造器中,如果为 this 添加了参数列表,那么就有了不同的含义。这将产生对符合此参数列表的某个构造器的明确调用(除构造器外,编译器禁止在其他任何方法中调用构造器)

    注意,尽管可以用 this 调用一个构造器,但却不能调用两个。此外,必须将构造器调用置于最起始处,否则编译器会报错。

    5. package

    • 为了更好的实现项目中类的管理,提供了“包”的概念
    • package 语句作为 Java 源文件的第一条语句,指明该文件中定义的类所在的包
    • 包对应于文件系统的目录,package 语句中,用“.”来指明包(目录)的层次
    • 格式:package 顶层包名.子包名;

    MVC 设计模式

    JDK 中主要包介绍:

    6. 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);
  • 相关阅读:
    从.NET到Mono-记Kooboo CMS对Mono的兼容历程:二、大小写敏感问题,到处都是地雷
    发布NBear.Mapping 开源通用映射组件 V1.0.1.8 beta
    发布支持代理,以及解决登录可能出现异常的DotMSN(强烈建议改用MSNPSharp来开发)
    LumaQQ.NET 2008 更新
    从.NET到Mono-记Kooboo CMS对Mono的兼容历程:三、平台的兼容性
    网站架构资料收集整理 Virus
    项目团队技术个人(提拔篇) Virus
    [翻译].NET框架中的缓存 Virus
    培养我们的目标感 Virus
    使用Django来处理对于静态文件的请求 Virus
  • 原文地址:https://www.cnblogs.com/liujiaqi1101/p/12997016.html
Copyright © 2020-2023  润新知