java核心技术卷1---第4章 对象与类

面向对象程序设计概述

类之间的关系

  • 依赖 (use - a)

一个类的方法使用或操纵另一个类的对象,我们就说一个类依赖另一个类

应该尽量相互依赖的类减至最少,减少类之间的耦合

  • 聚合 (has - a)

一个对象包含另一个对象

包容关系,关联关系

  • 继承 (is - a)

更特殊的类和一般的类之间的关系

扩展了类的方法

使用预定义类

例如Math类

调用这种预定义静态类中的方法,直接类名.方法名就行啦

对象和对象变量

构造器(构造方法):构造对象,指定初始状态

java类库中的LocalDate类

调用:用静态工厂而不是用构造器

LocalDate date = LocalDate.now();
        int month = date.getMonthValue();
        int today = date.getDayOfMonth();
        date = date.minusDays(today - 1);//当前today-1天的日期,本月第一天
        DayOfWeek weekday = date.getDayOfWeek();
        int value = weekday.getValue();
        System.out.println(value + "------");
        System.out.println("Mon Tue Wed Thu Fri Sat Sun");
        for (int i = 1; i < value; i++)
            System.out.print("    ");
        while(date.getMonthValue() == month){
            System.out.printf("%3d",date.getDayOfMonth());
            
            if (date.getDayOfMonth() == today)
                System.out.print("*");
            else
                System.out.print(" ");
            date = date.plusDays(1);
            if (date.getDayOfWeek().getValue() == 1) System.out.println();
        }
        if (date.getDayOfWeek().getValue() != 1) System.out.println();
    }
}
Mon Tue Wed Thu Fri Sat Sun
                      1   2 
  3   4   5   6   7   8   9 
 10  11  12* 13  14  15  16 
 17  18  19  20  21  22  23 
 24  25  26  27  28  29  30 
 31 

1月12日

用户自定义类

用null引用

引用对象时问问自己是否希望接受一个可有可无的值,如果是,宽容型,不是,严格型

//宽容型方法把null参数转换为一个适当的非null值
String birthday = null;
if (birthday == null){
    birthday = "unknown";
}
else birthday = birthday;
String s = birthday;
System.out.println(s);
//严格型拒绝null参数,报错:NullPointerException
System.out.println("The birthday cannot be null!");

隐式参数和显示参数

Demo02 d = new Demo02();
d.sou("I love java!");
//d: 隐式参数(目标,接收者)
//"I love java!": 显式参数

封装的优点

私有的数据字段

公共的字段访问器方法
公共的字段更改器方法

类的访问权限

方法可以访问调用方法的对象的私有数据

方法是私有的,则他不会在别处使用,使用者可以将他删除

方法是公共的,不能简单把他删除,可能会有其他代码依赖这个方法

final实例字段(属性)的特殊性

构造对象之后,final值不变

public class Demo03 {
    public static void main(String[] args) {
        Car bmw = new Car("bmw");
        //这辆车确定就是宝马,不能改名字
    }
}
class Car{
    private final String name;
    Car(String name) {
        this.name = name;
    }
}

静态字段和静态方法

静态字段

每个类只有一个static字段

private static int nextId = 1;
private int id;
//每个Tiger对象都有自己的id,这个类的所有实例共享一个nextId字段,只有一个
//静态字段nextId,属于类不属于对象

静态常量

尽量不要有公共字段,公共常量没问题,有final字段

private static final double PI =3.14159265358979323846;

静态方法

使用情况:

  • 方法不需要对象状态,需要所有参数通过显示参数提供 举例:Math中的pow方法

  • 方法只需要访问静态字段 举例:

    Employee.getNextId();
    

工厂方法

静态工厂方法构造对象 举例:Localdate.now

方法参数

  • 按值调用:方法接受的是调用者提供的值
  • 按引用调用:方法接受的是调用者提供的地址

java是前者,方法不能修改传给他的任何参数变量的内容,只能通过实现一个改变对象参数状态的方法来创建不同参数值

java对方法参数能做什么不能做什么:
  • 方法不能修改基本数据类型的参数
  • 方法能改变对象参数的状态
  • 方法不能让一个对象参数引用一个新的对象

对象构造

方法重载

多个方法有相同的名字,不同的参数

方法签名:方法名和参数类型

默认字段初始化

数值0
布尔值false
对象null

无参构造器

一个类没有编写构造器,默认存在一个无参构造器

显式字段初始化

每个实例字段都应该有一个有意义的初值

参数名

一个字母

参数前加a : aName aAge

this.name = name ( √ )

public Demo05(String name, int age) {    this.name = name;    this.age = age;}

初始化块(代码块)

只要构建个类的对象,这些块就会被首先执行

对象析构和finalize方法

析构器:回收存储空间 (垃圾gc)

finalize方法原来是清理垃圾的,已经废弃

将类组织在一个集合中,用包方便组织自己的代码,自己和别人的代码库分开管理

包名

因特网域名的逆序作为包名

实例:com.horstmann.corejava

导入类

简化类中代码的书写

实例:import java.time.*;

静态导入

import static java.lang.System.*;

class{

main{

​ out.println(“Hello,world.”);

}

}

包访问

默认情况包不是封闭实体,可见性

模块封装包:防止第三方修改

类路径

类路径和包路径匹配

设置classpath变量 java9

JAR文件

创建jar文件

在jdk/bin目录下

清单文件

每个jar文件包含一个清单文件

描述归档文件的特殊特性

可执行JAR文件

第三方工具把 .jar 文件 -> .exe 应用文件

文档注释

/**

中间可以写HTML语言 <> <> <> <> <> <>

*/

类注释

方法注释

字段注释

通用注释

包注释

注释抽取

类设计技巧

1. 数据私有
2. 对数据初始化
3. 不要在类中使用过多基本类型
4. 分解有过多职责的类
5. 类名和方法名见知意
6. 不是所有字段都要字段访问器和字段修改器(get set)
7. 有限使用不可变的类  例如:java.time包  
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值