• 重学Java 面向对象 之 封装


    本篇文章更偏向于笔记,是阅读Java核心卷(一)之后的记录:

    1. 一个类可能的组成部分:

    1. 成员变量

    2. 成员函数

    3. 构造函数

    4. 代码块

    5. 静态变量,静态函数,静态代码块

    2. 初始化成员变量的方法:

    1. 声明时直接赋值

    2. 代码块赋值

    3. 构造函数中赋值

    三种初始化方式的顺序:

    构造 > 声明或代码块

    先声明还是先代码块看他们在代码中的顺序

     

    可以在new 的 地方打个断点,调试一下更清楚

    最后输出 “ 构造函数赋值”。

    把构造函数注掉就会输出 “代码块赋值”

    把声明和代码块的顺序变一下就会输出“声明时赋值”

    此处不再演示。

    3. 构造函数

    关于构造函数需要注意的点是:

    1. 只有当类没有提供任何构造器的时候,系统才会默认提供一个空参的构造函数

    2. 可以在构造函数中利用this调用其他的构造函数

     当你已经写过构造函数之后,再调用Employee会报错。

    this构造函数就没什么好说的了

    4. 方法参数(Java 只有值传递)

    Java方法中的参数传递都是值传递,没有引用传递,看起来像引用传递的对象传参也只是把引用复制了一份,然后指向了相同的对象。

    举一个反例:

     最后输出e1.name 还是雇员1。

    如果真的是引用传递的话,e1 应该就指向了雇员2那个对象了。

    所以我们所认为的引用传递实际上也是值传递,只不过传递的是引用。既然指向了同一个对象,那么当对象的内容发生变化的时候,比如你把雇员的名字给改了,那么原来的对象自然也被修改了,这看上去

    很想引用传递,但其实不是。

    5. static

    静态的成员变量和代码块都只会初始化一次。

    static 成员变量: 就是所有对象共享的变量,static常与final合用变成静态常量,例如Math类,有相当多的数学常量在里面,例如PI

    static 代码块: static代码块中当然就不能对成员变量进行初始化了,一般来说就是对static成员变量进行处理的代码块。

     加载顺序:

    强烈建议可以debug看一下,可以发现其实在执行static代码块的时候还并没有id这个成员变量,这里猜测静态变量以及它的初始化是在类加载的时候就执行了

     所以说静态的东西加载都比非静态要早。

    但是这里变量的声明和代码块的初始化的顺序是不能颠倒的:

    6. 静态方法

    静态方法的用途:个人理解就是不需要实例化就能够使用的方法,或者说不涉及到成员变量操作的方法,又或者说涉及到了,但是对于每一个对象来说需要对成员变量进行的操作是一样的。

    例如在Math类中,它的方法基本上都是Math类的,因为Math根本就不让你初始化,它的方法都是涉及到一些数学公式的计算,对于所有想要使用这个方法的人来说都是一样的,并不存在差异化

    还有一些工具类中可能更常见:例如说Arrays中的asList方法。

    静态工厂方法:

    在一些类中,我们会使用静态工厂方法来替代构造方法。在effective-Java 3rd 中 第一条建议就是这个(GitHub上一个自发的翻译项目,所以可能翻译质量无法保证):

    effective - Java 3rd 在线版本

     这里面详述了很多条静态工厂替代构造方法的优点和缺点,大部分暂时还看不太懂,这里只简单小结两点(Java 核心卷上总结的两点):

    1. 使用静态工厂方法相比构造函数更具有语义性,构造函数只能根据参数的不同来产生不同的对象,而如果有一个名字的话,会清晰许多,例如LocalDate.now()  LocalDate.of()

    2. 使用构造函数就只能返回本类型,但是使用静态工厂,返回的类型没有限制了,所以我们可以返回其子类,例如:

    NumberFormat currencyInstance =  NumberFormat.getCurrencyInstance();
  • 相关阅读:
    pythonchallenge10
    线程同步
    查缺补漏
    查看QQ是否在线
    project euler10
    Toon Shading, step 2
    一种简易的卡通渲染方法(上)
    GLSL学习笔记 9.1 Transformation
    Gloss Mapping
    一种简易的卡通渲染方法(下)
  • 原文地址:https://www.cnblogs.com/bax-life/p/11568800.html
Copyright © 2020-2023  润新知