首页 > 编程语言 >模块2 面向对象编程初级 --- 第六章:创建对象

模块2 面向对象编程初级 --- 第六章:创建对象

时间:2024-07-24 12:40:48浏览次数:11  
标签:构造方法 对象 创建对象 --- Person 实例 引用 面向对象编程 new

第六章 创建对象

主要知识点:

  1、类的实例化

  2、构造方法

  3、对象的使用

  4、对象的清除

学习目标:

  根据定义的类进行实例化,并且运用对象编写代码完成一定的功能。本章对类进行实例化,生成类的对象,利用对象开始软件的设计过程,掌握对象的使用方法。

6.1 创建对象概述

  对类进行实例化,就是产生类的一个对象,一个类可以产生多个不同的对象。同一个类的对象只是在内部状态的表现形式上相同,但是它们所分配的存储空间却是不同的。一个对象的生命周期包括三个阶段:生成、使用和消失。

6.1.1 类的实例化

  将类实例化的命令格式如下:

  类名 对象名 = new 类名([参数列表]);

  其中,“类名”表示对象的类型,必须是复合数据类型,包括类,字符串等。“对象名”是一个合法的标识符。“参数列表”要根据本类的构造方法的形式参数确定,与构造方法匹配,以便自己调用构造方法。

public class Person{
    String name;
    int age;
    float salary;
    public void work(){
        System.out.println("I am an engineer!");
    }
}    

  生成一个对象teacher的方法是:Person teacher = new Person();

  每一条语句只实例化一个对象,通过运算符new为对象分配存储空间。这时Java自动执行类对应的构造方法进行初始化。当然了构造方法可以是系统默认的,也可以是用户通过重载实现的。

6.1.2 对象的引用

   类的成员(包括成员属性和成员方法)必须在产生对象,也就是实例化之后才能被引用,引用的方法是:对象名.成员;

  1、引用对象的变量

  访问对象的某个变量的属性时,可以是一个已经生成的对象,也可以是能够生成对象引用表达式。主要有两种方法,第一种是:

方法1:
Person teacher = new Person();
teacher.name = "LingLing";

  第二种方法,可以直接生成变量的引用,是方法1中两条语句的合并,但是并没有产生变量teacher,通常用于一次性使用;

方法2:
new Person().name = "LingLing";

  2、引用对象的方法

  格式:对象引用.方法名([参数列表]);

public Person{
    int age;
    void shout(){
        System.out.println("Oo God,my age is " + age);    
    }
}

public class TestPerson{
    public static void main(String args[]){
        Person xiaoli = new Person();
        Person zhangsan = new Person();
        xiaoli.age = 20;
        zhangsan.age = 38;                      //成员属性的引用
        xiaoli.shout();                               //成员方法的引用
        zhangsan.shout();
    }
}

6.1.3 方法的参数传递

  在方法中,如果变量的类型是基本数据类型,则按照值传递,即方法调用前后变量的值不变;如果变量的类型是类或者接口。即引用数据类型,则按照地址传递,变量的值在方法调用后会发生改变;

  1、基本数据类型的参数传递

  (1)基本数据类型的变量作为实参传递,并不能改变这个变量的值;

  (2)方法中的形式参数相当于局部变量,方法调用结束后自行释放,不会影响到主程序中的同名变量;

  2、引用数据类型的参数传递

  (1)引用数据类型的参数传递可以改变对象的内容。

6.1.4 对象的清除

  Java运行时,通过垃圾收集器周期性地释放无用对象所占的内存,来完成对象的清除,但是当不存在对一个对象的引用时,该对象被称为无用对象,当前的代码段不属于对象的作用于或者对线的引用赋值为NULL,就会成为无用对象;

  根据被引用对象所引用的状态,可以分为三种:激活状态、去活状态和死亡状态。三者的关系如图所示。

                    

  此外,程序只能控制一个对象何时不再被任何引用变量引用,但是绝对不能控制它何时被回收。引用系统垃圾回收有如下两个方法:

  (1)调用System类的gc静态方法System.gc();

  (2)调用Runtime对象的gc实例方法:Runtime.getRuntime().gc()。

6.2 构造方法

  构造方法也称为构造函数,是包含在类中的一种特殊的方法,在类实例化时,它会被自动调用。其参数在实例化命令中指定;

6.2.1 构造方法的定义

  首先看一个构造方法的例题

class Person{
    public Person(){
        System.out.println("method person is using!");
    }
    private int age = 18;
    public void shout(){
        System.out.println("age is "+ age);
    }
}

public TestPerson{
    public static void main(String[] args){
        Person p1 = new Person();
        p1.shout();
        Person p2 = new Person();
        p2.shout();
        Person p3 = new Person();
        p3.shout();
    }
}

  构造方法的特殊之处在于,每当new命令生成一个实例时,构造方法都会自动执行一次,而无需编程者手工引用;

  构造方法的特征:

  (1)具有和类相同的名称

  (2)不含返回类型;

  (3)不能在方法中用return语句返回一个值;

  (4)在类实例化时,由系统自动调用

6.2.2 构造方法的重载

  构造方法也可以重载。一个类的构造方法可以有多个,而且还可以进行重载。

  构造方法重载总结:

  (1)每一个类至少有一个构造方法,如果用户没有定义,系统自动产生一个默认构造方法,没有参数,也没有方法体;

  (2)用户可以定义构造方法,如果用户定义了构造方法,则系统不再提供默认构造方法;

  (3)构造方法的访问控制修饰符一般是public,不可以定义为private;

习题

一、简单题

  1、什么是类的实例化?

  2、类的初始化有哪几种方法?

  3、如何引用一个对象?

  4、基本数据类型参数和引用数据类型在方法中的传递有哪些不同?

  5、什么是构造方法?构造方法有什么特点?

  6、字符串类有哪两种?各有什么特点?

  7、在一个类中,如果几个构造方法同名,则参数不能相同,参数指的是什么?

二、操作题

  1、定义一个日期类,包括年、月、日三个属性和一个方法,用于判断是不是闰年。然后实例化两个对象:今天和明天,并分别给它们赋值;

  2、编写一个程序实现构造方法的重载;

  3、编写一个类BankCard,表示银行卡,属性自定,给它建立一个构造方法,功能是在实例化时,输出信息“您的卡上余额是:XXXX”。

标签:构造方法,对象,创建对象,---,Person,实例,引用,面向对象编程,new
From: https://www.cnblogs.com/kuangmeng/p/18318981

相关文章

  • 单目三维内容生成系列—Zero-1-to-3: Zero-shot One Image to 3D Object
    文章目录1.概述2.背景介绍3.方法3.1学习控制相机视角3.2视角条件扩散3.33D重建3.4数据集4.实验评测4.1任务4.2基线4.3基准和指标4.4新视角合成结果4.53D重建结果4.6从文本到图像到3D5.讨论1.概述我们介绍了Zero-1-to-3框架,该框架仅需一张RGB图像即......
  • 如何免费提取PDF里的图片-pdfimages使用教程
    写在前面本随笔是非常菜的菜鸡写的。如有问题请及时提出。可以联系:[email protected]:https://github.com/WindDevil(目前啥也没有动机由于WPS的提取图片需要收费,作为穷鬼的我直接在bing,键入opensourcesoftwaregetpictureformpdf.找到这个项目:VR51/Batch-PDF......
  • 超强mysql灾难恢复工具--ibd2sql
    超强mysql灾难恢复工具--ibd2sql小董学编程 DBA札记  2024年07月19日16:51 上海 1人听过DBA札记dba数据库知识科普踩坑指南经验分享原理解读88篇原创内容公众号前言昨晚23:00,刚躺到床上准备刷会儿抖音睡了。好友微信视频求救,说他的mysql......
  • Druid出现DruidDataSource - recyle error - recyle error java.lang.InterruptedExce
    原文链接: https://www.cnblogs.com/zhoading/p/14040939.htmlhttps://www.cnblogs.com/lingyejun/p/9064114.html 一、问题回顾线上的代码之前运行的都很平稳,突然就出现了一个很奇怪的问题,看错误信息是第三方框架Druid报出来了,连接池回收连接时出现的问题。1234......
  • JS实现一个发布-订阅模式(观察者模式)
    //创建一个简单的事件中心,允许对象订阅事件、发布事件并取消订阅。//创建一个事件中心对象,IIFE,返回一个包含订阅、取消订阅和发布方法的对象constEventCenter=(function(){//存储事件及其对应的订阅者,存储事件及其对应的监听器数组constevents={}......
  • 搭建基于 ChatGPT 的问答系统第三章-评估输入分类
    需要学习提示词工程的同学请看面向开发者的提示词工程这是搭建ChatGP问答系统第二章,第一章内容请查看搭建基于ChatGPT的问答系统第一章-综述搭建基于ChatGPT的问答系统第二章-提问范式与Token第三章评估输入——分类在本章中,我们将重点探讨评估输入任务的重要性,这......
  • 面试常考--前端性能优化之大文件上传
    大文件上传是前端开发中常见的需求之一,特别是在需要处理高清图片、视频或其他大型文件时。优化大文件上传不仅可以提升用户体验,还能有效减轻服务器负担。本文将深入探讨大文件上传的几种常见优化技术,包括文件切片与并发上传、断点续传、后台处理优化、安全性考虑和用户体验优化。......
  • 最高法-《执行异议与复议规定》第28条规定的不动产买受人的物权期待权劣后于担保物权
    1. (2022)最高法民终71号  万建明、汪美华等申请执行人执行异议之诉民事二审民事判决书上诉人主张:万建明、汪美华上诉请求:1.原审判决适用法律错误,请求依法改判驳回中铁建设公司的全部诉讼请求或发回重审;2.一、二审诉讼费用由中铁建设公司承担。主要事实和理由:(一)根据最高人民法院......
  • 设计模式-原型模式(Prototype)
    设计模式-原型模式(Prototype)  概要   记忆关键词:原型实例、拷贝  定义:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。    分析:原型模式就是从一个样板对象中复制出一个内部属性一致的对象。它是在内存中拷贝二进制流,比new一个对象的性能好很......
  • 2024-07-24 想法记录,关于 可以准点睡觉 和 拖延寄快递
    2024-07-24     昨天晚上可以及时睡觉,比原来早,12点以前睡下来,11点半闭上的眼。之前的晚睡,怎么突然在这一会就可以变回来了呢? 我思考了一下,最重要的原因,我看见自己下巴和两鬓的白胡子,白发了。我才人到中年而已,年纪不大就已经头发胡子都变白了,不敢再熬夜了。再仔细感受......