我在codegym学Java(level5)

level5 类简介-编写你自己的类、构造函数 

经典的类

 1、Java 类

解释 1。程序由各种类型的对象(类)组成。同样,不同的类包含不同的内部结构(变量和方法)。如果我们将程序看作一个整体,那么组成它的构造块就是对象。类是构造块的类型。换句话说,不同类型的构造块是不同类的对象。

解释 2。需要新的对象类型时,我们将创建一个新类并定义其内部对象的行为方式。就内部结构而言,类由执行某些操作的方法及其用于存储数据的变量组成。

2、类基本上是按以下流程创建的:

1)程序员确定需要哪些其他对象。

2)程序员根据对象要执行的操作将其分为不同的类型。

3)程序员为每种类型编写单独的类。

4)在类中,程序员声明所需的方法和变量。

5)在每种方法中,程序员编写命令以使该方法执行所需的操作。

6)类已完成。现在你可以创建该类的对象。

需要将程序划分为对象的编程原理称为面向对象的编程 (OOP)。

总而言之,我们可以说类是一个微型程序:一些数据和使用该数据执行某些操作的函数。类用于创建类的实例,也称为对象。

3、对象有两个有趣的属性:

第一个属性。每个对象都存储自己的实例变量副本。这意味着,如果在一个类中声明了实例变量 x 和 y,并创建了该类的 10 个对象,则每个对象都有自己的变量。更改一个对象中的变量不会影响其他对象中的变量。

第二个属性。创建对象时,你可以传递不同的参数。这些值用于初始化对象。这有点像给新生儿起名字。许多类都需要这些参数来创建类的实例(对象)。

包对应于硬盘驱动器上的文件夹。

类的唯一全名由其包名加上类名组成。类的全名始终是唯一的。

最好始终将类放入包内,而不要放在 src 根文件夹中。如果你的类不是很多,那没有问题,但是如果你有很多类,则很容易将它们弄混。应始终在包内创建类。”

创建对象

在 Java 中,普遍做法是对其他类隐藏变量。通常,在类的内部声明的变量具有 private 修饰符。

要允许其他类更改这些变量的值,可为每个变量创建一对方法:get 和 setget 方法返回变量的当前值。set 方法为变量设置新值。

如果不希望任何人更改实例变量的值,可以不为它创建 set 方法,或者将该变量声明为 private。此外,还可以向该方法添加附加数据检查。如果传递的新值无效,则不会进行任何更改。

初始化对象

创建对象时,你需要为其变量指定初始值,以免出现访问对象不包含正常运行所需信息的情况。

向类中添加 initialize() 方法,以便通过调用该方法来处理对象。我们可以在调用 initialize 方法之后立即调用对象的方法。如果无法处理对象,则称该对象无效;否则,则称该对象有效。initialize 方法的主要任务是接收使对象有效所需的所有数据。

什么时候必须调用 initialize 方法?

——创建对象后立即调用,以使对象生效。

构造方法

在类中声明构造方法很容易。构造方法类似于 initialize 方法,只是有两点不同:

1.构造方法的名称与类名相同(而不是 initialize)。

2.构造方法没有类型(不指定类型)。

不需要用户调用,而是在创建对象时自动执行。

小结:

1、为什么需要构造函数?

创建对象时初始化必要的成员变量,确保对象始终具有有效状态

构造函数里不要有业务逻辑,有可能会引入隐藏的未知风险

2、基类构造方法

基类:多个子类可以有一个共同的祖先

当一个对象被创建时,它的基类的构造函数首先被调用。 只有在构造函数完成后,程序才会执行我们正在创建的对象对应的类的构造函数。当创建子类的对象时,首先调用基类构造函数。

继承类可以访问基类的字段(和方法),不用自己再创建

我们可以在子类构造函数中显式调用基类构造函数。 基类也称为“超类”。 这就是 Java 使用关键字 super 来指示基类的原因。

 创建新对象时变量初始化和构造函数调用的顺序:(记住)

1、基类的静态变量被初始化。

2、子类的静态变量被初始化。

3、初始化基类的非静态变量。

4、基类构造函数启动。

5、初始化子类的非静态字段。

6、子类的构造函数被调用

3、getter 和 setter

我们没有正确声明我们的类! 为什么?

-我们公开了类的数据,会造成任意无效的数据

成员变量字段是公开的。 它们可以在程序的任何地方访问:只需创建一个 Cat 对象,任何程序员都可以通过点 (.) 运算符直接访问其数据

如何解决?

-首先,所有实例变量(字段)都必须用 private 修饰符标记。但是这样类将基本无法使用,理想情况下应该程序员可以创建对象,能够从对象读取数据,并且可以分配字段值。

-getter和setter方法可以访问成员变量,也可以为其赋值。它们的名称通常由“get”/“set”加上相关字段的名称组成。

但是,这样仍然可以为字段分配无效的字段,那么有getter和setter方法只有有什么不同呢?

-与字段不同的是,setter 是一种成熟的方法,方法允许您编写必要的验证逻辑,以防止出现不可接受的值。

 一个类限制对数据的访问,公开对方法的访问,以保证类不会被破坏。

4、三元运算符Ternary operator

它是您已经遇到过的 if-else 控制流语句的替代方法。

这种情况(“一种条件 - 两种可能的结果”)在编程中极为常见。

这就是创建三元运算符的原因。

if (person.getAge() >= 18) {
           usherResponse = "Everything is in order. Come in!";
       } else {
           usherResponse = "This film is not suitable for your age!";
       }
String usherResponse = (person.getAge() > 18) ? "Everything is in order. Come in!" : "This film is not suitable for your age!";

三元运算符的工作方式:

  • One condition (person.getAge() > 18)
  • Two possible outcomes ("Everything is in order. Come in!" and "This film is not suitable for your age!")

condition ? outcome 1 : outcome 2

 if-else 语句or三元运算符?

就性能而言,没有区别。更准确地说,也许有,但微不足道。

这里最大的考虑是代码的可读性。你编写的代码不仅必须正确运行,而且还必须易于阅读。

一般建议是:如果条件简单且易于验证,则可以使用三元运算符而不会造成伤害。这使您可以减少代码量和 if-else 语句的数量(可能已经有很多了)。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值