面向对象(上)③

面向对象(上)③,第1张

面向对象(上)③

个人笔记③

这里写目录标题

面向对象的概念类和对象对象创建与使用类的封装构造方法的定义构造方法重载this关键字的使用垃圾回收机制静态变量静态方法静态代码块

面向对象的概念

Java 是面向对象的编程语言,对象就是面向对象程序设计的核心。所谓对象就是真实世界中的实体,对象与实体是一一对应的,也就是说现实世界中每一个实体都是一个对象,它是一种具体的概念。
对象的特点:

对象具有属性和行为。
对象具有变化的状态。
对象具有唯一性。
对象都是某个类别的实例。
一切皆为对象,真实世界中的所有事物都可以视为对象。

例:男孩(boy)、女孩(girl)为类(class),而具体的每个人为该类的对象(object)。
汽车为类(class),而具体的每辆车为该汽车类的对象(object),对象包含了汽车的颜色、品牌、名称等。

面向对象的三大核心特性

面向对象开发模式更有利于人们开拓思维,在具体的开发过程中便于程序的划分,方便程序员分工合作,提高开发效率。面向对象程序设计有以下优点。
可重用性:代码重复使用,减少代码量,提高开发效率。下面介绍的面向对象的三大核心特性(继承、封装和多态)都围绕这个核心。
可扩展性:指新的功能可以很容易地加入到系统中来,便于软件的修改。
可管理性:能够将功能与数据结合,方便管理。

面向对象具有继承、封装和多态 3 个核心特性。

继承性
如同生活中的子女继承父母拥有的所有财产,程序中的继承性是指子类拥有父类的全部特征和行为,这是类之间的一种关系。Java 只支持单继承。
封装性
封装是将代码及其处理的数据绑定在一起的一种编程机制,该机制保证了程序和数据都不受外部干扰且不被误用。封装的目的在于保护信息
多态性
面向对象的多态性,即“一个接口,多个方法”。多态性体现在父类中定义的属性和方法被子类继承后,可以具有不同的属性或表现方式。多态性允许一个接口被多个同类使用,弥补了单继承的不足。

题目

1、下面选项中,不是面向对象的特征的是( )。
A、封装
B、继承
C、多态
D、重构
2、下列选项中,不属于面向对象特征的是( )。
A、继承性
B、封装性
C、跨平台性
D、多态性
3、“隐藏对象的属性和实现细节,仅对外提供公有的方法”描述的是面向对象的哪个特征( )
A、封装
B、继承
C、多态
D、以上都不是

类和对象

在面向对象中,类和对象是最基本、最重要的组成单元。类实际上是表示一个客观世界某类群体的一些基本特征抽象。对象就是表示一个个具体的东西。所以说类是对象的抽象,对象是类的具体。
举例描述

对于人类,每个人都有身高、体重、年龄、血型等属性,人会劳动、会直立行走等方法。人区别于其他的动物,是因为每个人都具有“人”这个群体的属性与方法。
“人类”只是一个抽象的概念,它仅仅是一个概念,是不存在的实体!但是所有具备“人类”这个群体的属性与方法的对象都叫人!这个对象“人” 是实际存在的实体!每个人都是“人”这个群体的一个对象。

类是描述了一组有相同特性(属性)和相同行为(方法)的一组对象的集合。对象或实体所拥有的特征在类中表示时称为类的属性。
简而言之,类就是对象的集合,是一个抽象的概念。对象是类具体的体现。

题目

1、下列关于类与对象的说法中,正确的是( )
A、类可以看做是一个具体的实例
B、没有类,也可以创建对象
C、类是对某一类事物的抽象描述,而对象用于表示现实中该类事物的个体
D、以上说法都不对
2、下面哪一个是正确的类的声明?
A、public void HH{…}
B、public class Move(){…}
C、public class void number{}
D、public class Car{…}
3、下列关于类和对象的描述,错误的是( )
A、对象是类的实例
B、一个类只能有一个实例化对象
C、类是对象的抽象
D、类用于描述一组对象的共同特征和行为

对象创建与使用

创建对象
对象是根据类创建的。在Java中,使用关键字 new 来创建一个新的对象。创建对象需要以下三步:

声明:声明一个对象,包括对象名称和对象类型。
实例化:使用关键字 new 来创建一个对象。
初始化:使用 new 创建对象时,会调用构造方法初始化对象。

创建对象
例如:对于类Puppy创建对象myPuppy

题目

1、下列关于成员变量默认值的描述中,错误的是( )
A、byte类型的数据默认值是0
B、int类型的数据默认值是0
C、long类型的数据默认值是0 (为 0L)
D、float类型的数据默认值是0.0f
2、下列关键字中,用于创建类的实例对象的是( )。
A、class
B、new
C、private
D、void

类的封装

封装的目的在于保护信息,使用它的主要优点如下。

保护类中的信息,它可以阻止在外部定义的代码随意访问内部代码和数据。
隐藏细节信息,一些不需要程序员修改和使用的信息,比如取款机中的键盘,用户只需要知道按哪个键实现什么 *** 作就可以,至于它内部是如何运行的,用户不需要知道。
有助于建立各个系统之间的松耦合关系,提高系统的独立性。当一个系统的实现方式发生变化时,只要它的接口不变,就不会影响其他系统的使用。
提高软件的复用率,降低成本。

封装将类的某些信息隐藏在类内部,不允许外部程序直接访问,只能通过该类提供的方法来实现对隐藏信息的 *** 作和访问。

封装的特点:

只能通过规定的方法访问数据。
隐藏类的实例细节,方便修改和实现。

实现封装的具体步骤如下:

修改属性的可见性来限制对属性的访问,一般设为 private。
为每个属性创建一对赋值(setter)方法和取值(getter)方法,一般设为 public,用于属性的读写。
在赋值和取值方法中,加入属性控制语句(对属性值的合法性进行判断)。
例:


1、为了能让外界访问私有属性,需要提供一些使用( )关键字修饰的公有方法。
A、void
B、default
C、private
D、public
2、下面哪个关键字用于将类中的属性私有化( )
A、default
B、public
C、private
D、protected
3、在Java语言中,封闭是借助于( )实现的
A、对象
B、类
C、数组
D、成员

构造方法的定义

构造方法是类的一种特殊方法,用来初始化类的一个新的对象,在创建对象(new 运算符)之后自动调用加粗样式。
Java 构造方法有以下特点:

1.方法名必须与类名相同
2.可以有 0 个、1 个或多个参数
3.没有任何返回值,包括 void
4.默认返回类型就是对象类型本身
5.只能与 new 运算符结合使用
注意:构造方法不能被 static、final、synchronized、abstract 和 native(类似于 abstract)修饰。

格式

class class_name {
public class_name(){} // 默认无参构造方法
public ciass_name([paramList]){} // 定义构造方法

// 类主体
}

带参构造函数

题目

1、在以下什么情况下,构造方法会被调用?
A、类定义时
B、创建对象时
C、 调用对象方法时
D、使用对象的变量时

构造方法重载

要在不同的条件下使用不同的初始化行为创建类的对象,这时候就需要在一个类中创建多个构造方法。
重载实现


题目

1、下列关于构造方法的描述,错误的是( )。
A、一个类中只能定义一个空参数的构造方法
B、一个类中可以定义多个构造方法
C、如果在一个类中定义有参的构造方法,jvm就不会提供默认的无参构造方法
D、构造方法的作用是给属性初始化

this关键字的使用

this 关键字是 Java 常用的关键字,可用于任何实例方法内指向当前对象,也可指向对其调用当前方法的对象,或者在需要当前类型对象引用时使用。
this.属性名

this.方法名

拓展点;没有使用 static 修饰的成员变量和方法都必须使用对象来调用。

this( )访问构造方法

题目

1、当一个类中成员变量和局部变量重名时,可以使用哪个关键字进行区分( )
A、super
B、this
C、public
D、true
2、以下代码执行后的结果是:( )
public class Person {
String name = “小芳”;
public Person(String name) {
name = “小兰”;
}
public void show() {
this.name = “小翠”;
}
public static void main(String[] args) {
Person p = new Person(“小凤”);
System.out.print(p.name);
p.show();
System.out.print(p.name);
}
}
A、小兰小翠
B、小凤小翠
C、小芳小翠
D、程序编译失败

垃圾回收机制

什么是垃圾回收?

垃圾回收(Garbage Collection)是Java虚拟机(JVM)垃圾回收器提供的一种用于在空闲时间不定时回收无任何对象引用的对象占据的内存空间的一种机制。
垃圾:无任何对象引用的对象(怎么通过算法找到这些对象呢?)。
回收:清理“垃圾”占用的内存空间而非对象本身

垃圾回收
调用方法去通知java虚拟机去执行自动回收:
System.gc()
当一个对象被释放时,它的finalize()会被自动调用

我们可以重载finalize()方法,举例


静态变量

在类中,使用 static 修饰符修饰的属性(成员变量)称为静态变量,也可以称为类变量,常量称为静态常量,方法称为静态方法或类方法,它们统称为静态成员,归整个类所有。

静态成员不依赖于类的特定实例,被类的所有实例共享,就是说 static 修饰的方法或者变量不需要依赖于对象来进行访问,只要这个类被加载,Java 虚拟机就可以根据类名找到它们。(相对于上面的this来调用本类中方法,可以使用static修饰,再调用类中的静态变量方法)
调用静态成员的语法形式如下:

类名.静态成员

类的成员变量可以分为以下两种:

静态变量(或称为类变量),指被 static 修饰的成员变量。
实例变量,指没有被 static 修饰的成员变量。

静态变量与实例变量的区别如下:

1)静态变量
运行时,Java 虚拟机只为静态变量分配一次内存,在加载类的过程中完成静态变量的内存分配。
在类的内部,可以在任何方法内直接访问静态变量。
在其他类中,可以通过类名访问该类中的静态变量。
2)实例变量
每创建一个实例,Java 虚拟机就会为实例变量分配一次内存。
在类的内部,可以在非静态方法中直接访问实例变量。
在本类的静态方法或其他类中则需要通过类的实例对象进行访问。

题目

1、
请阅读下面的程序,选择正确的运行结果。
class Demo{
private static int x ;
public static void main(String[] args){
System.out.println(x++);
}
}
A、0
B、1
C、无结果
D、编译失败

静态方法

与成员变量类似,成员方法也可以分为以下两种:

静态方法(或称为类方法),指被 static 修饰的成员方法。
实例方法,指没有被 static 修饰的成员方法。

静态方法与实例方法的区别如下:

静态方法不需要通过它所属的类的任何实例就可以被调用,因此在静态方法中不能使用 this 关键字,也不能直接访问所属类的实例变量和实例方法,但是可以直接访问所属类的静态变量和静态方法。另外,和 this 关键字一样,super 关键字也与类的特定实例相关,所以在静态方法中也不能使用 super 关键字。
在实例方法中可以直接访问所属类的静态变量、静态方法、实例变量和实例方法。

在访问非静态方法时,需要通过实例对象来访问,而在访问静态方法时,可以直接访问,也可以通过类名来访问,还可以通过实例化对象来访问。


注意:

静态方法不能访问非静态成员
静态方法不能使用this,super

静态代码块

静态代码块
执行

题目

1、
阅读下面的程序
class Person{
static{
System.out.println(“static”);
}
Person(){
System.out.println(“构造”);
}
}
class Demo{
public static void main(String[] args){
Person p = new Person();
}
}

下列关于程序运行结果的描述中,正确的是
A、输出:构造
B、输出:static 构造
C、输出:static
D、没有输出结果
2、
阅读下列的程序
class Person{
static{
System.out.println(name);
}
private static String name = “hello”;
}
class Demo{
public static void main(String[] args){
Person p = null;
}
}
下列关于程序运行结果的描述中,正确的是()
A、无结果输出
B、输出 null
C、输出 hello
D、编译失败

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5713217.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-18
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存