初识面向对象(类和对象)

news2024/11/22 15:40:39

目录

1. 面向对象的初步认知

2.面向对象与面向过程

3.类定义和使用

4.类的定义格式

练习 

5.类的实例化

 什么是实例化

 6.this引用

为什么要有this引用 

什么是this引用

this引用的特性

7.对象的初始化 

默认初始化  

 就地初始化

 使用构造方法初始化

1. 面向对象的初步认知

        Java是一门纯面向对象的语言(Object Oriented Program,简称OOP),在面向对象的世界里,一切皆为对象。面向对象是解决问题的一种思想,主要依靠对象之间的交互完成一件事情。用面向对象的思想来涉及程序,更符合人们对事物的认知,对于大型程序的设计、扩展以及维护都非常友好。

2.面向对象与面向过程

如果说我想要把一头大象放进冰箱里面。

传统的思想:会去研究到底该用什么方法去放,而这就是在面向过程。

现在的思想:总共有三个对象:大象,冰箱,人,我们只需要将冰箱门打开放进去即可。整个过程是三个对象之间交互完成的,人是不需要去关注过程的,这就是面向对象。

以面向对象的方式来进行处理,就不会去关注过程,通过对象之间的交互完成即可。

3.类定义和使用

 类是用来对一个实体(对象)来进行描述的。主要描述该实体(对象)具有哪些属性。
比如说我今天在路上看到一个美女,我回宿舍会和我室友分享一下,她是一个什么样的发型,什么样的妆容,身材怎么样啊,穿的什么样的衣服。这个过程就是在描述实体(对象)。

在java语言中,如何对类进行定义呢?

4.类的定义格式

 在java中定义类时需要用到class关键字,具体语法如下

 //创建类

class ClassNsme{

        field;       //成员变量

        method:   //成员方法

}

class为定义类的关键字,ClassName为类的名字,{}中为类的主体。

采用Java语言将洗衣机类在计算机中定义完成,经过javac编译之后形成.class文件,在JVM的基础上计算机就可以识别了。

注意事项:

  • 1.类名注意采用大驼峰
  • 2.成员前写法统一为public

练习 

1.定义一个狗类

成员变量有:名字,颜色     成员方法有:汪汪叫,摇尾巴

class dog{
    public String name;  //名字
    public String color; //颜色
    public void barks(){  //狗的属性
        System.out.println(name+"在汪汪叫");
    }
    public void wag(){   //狗的行为
        System.out.println(name+"在摇尾巴");
    }
}

注意事项:

  • 1.一般一个文件中只定义一个类
  • 2.main方法所在的类一般使用public修饰
  • 3.public修饰的类必须和文件名相同

5.类的实例化

 什么是实例化

     定义了一个类,就相当于在计算机中定义了一种新的类型, 与int,double类似,只不过这是java语言自带的内置类型,而类是用户自定义了一个新的类型。比如上述的dog类,有了这些自定义的类型之后,就可以使用这些类来定义实例。

 用类类型创建对象的过程,称为类的实例化,在java中采用new关键字,配合类名来实例化对象。

class dog{
    public String name;  //名字
    public String color; //颜色
    public void barks(){  //狗的属性
        System.out.println(name+"在汪汪叫");
    }
    public void wag(){   //狗的行为
        System.out.println(name+"在摇尾巴");
    }
}
public class test {
    public static void main(String[] args) {
        dog dog1 = new dog();   //通过new去实例化一个对象
        dog1.name = "阿黄";
        dog1.color = "黄色";
        dog1.barks();
        dog1.wag();

        dog dog2 = new dog();//通过new去实例化一个对象
        dog2.name = "赛虎";
        dog2.color = "棕色";
        dog2.barks();
        dog2.wag();
    }
}

 运行结果:

 注意事项:

  • 1.new关键字用于创建一个对象的实例
  • 2.使用 . 来访问对象中的属性和方法
  • 3.同一个类可以创建多个实例

6.类和对象的说明

  •  1. 类只是一个模型一样的东西,用来对一个实体进行描述,限定了类有哪些成员.
  •  2. 类是一种自定义的类型,可以用来定义变量.
  •  3. 一个类可以实例化出多个对象,实例化出的对象 占用实际的物理空间,存储类成员变量
  •  4. 做个比方。类实例化出对象就像现实中使用建筑设计图建造出房子,类就像是设计图,只设计出需要什么东西,但是并没有实体的建筑存在,同样类也只是一个设计,实例化出的对象才能实际存储数据,占用物理空间

 

 6.this引用

为什么要有this引用 

先看一个小栗子

public class Date {
    public int year;
    public int month;
    public int day;
    public void setDatr(int y ,int m , int d){
        year = y;
        month = m;
        day = d;
    }
    public void print(){
        System.out.println(year+"年"+month+"月"+day+"日");
    }
    public static void main(String[] args) {
        Date date1 = new Date();
        date1.setDatr(1945,10,1);
        date1.print();
    }
}

以上代码整体逻辑非常简单,没有任何问题,一定会打印1945年10月1日

如果不小心形参名和成员变量名相同呢?

这个代码不会打印,因为它采用的是局部变量进行赋值的(局部变量优先使用)。 

 这个时候编译器都紊乱了,不知道该给谁赋值,成员变量给成员变量?参数给参数?参数给成员变量?成员变量参数?

 一切让this引用来揭开这层神秘的面纱。


什么是this引用

this引用指向当前对象(成员方法运行时调用该成员方法的对象),在成员方法中所有成员变量的操作,都是通过该引用去访问。只不过所有的操作对用户是透明的,即用户不需要来传递,编译器自动完成。

这时候给我们的代码加上一个this就不会出错

 

this引用的特性

  • 1. this的类型:对应类类型引用,即哪个对象调用就是哪个对象的引用类型
  • 2. this只能在"成员方法"中使用
  • 3. 在"成员方法"中,this只能引用当前对象,不能再引用其他对象
  •  4. this是“成员方法”第一个隐藏的参数,编译器会自动传递,在成员方法执行时,编译器会负责将调用成员方法对象的引用传递给该成员方法,this负责来接收

 

this一共有三种使用方法: 

  • 1 this.成员变量    用于访问成员变量
  • 2  this.func    用于访问当前的成员方法
  • 3  this()  用于调用当前类的成员方法 

7.对象的初始化 

在java方法内部定义一个局部变量时,必须初始化,否则会报错。

 成员变量不初始化是不会报错的,因为会有一个默认值,那成员变量该怎么去初始化呢?

对象初始化的几种方式

默认初始化  

在创建成员变量的时候不对它进行初始化,这就是默认初始化,系统会根据数据类型给一个默认值。

 就地初始化

在声明成员变量时,就直接给了初始值。 

public class Date {
    public int year = 1900;
    public int month = 1;
    public int day = 1;
    public Date(){
    }

    public Date(int year, int month, int day) {
    }

    public static void main(String[] args) {
        Date d1 = new Date(2021,6,9);
        Date d2 = new Date();
    }
}

 使用构造方法初始化

 构造方法(也称为构造器)是一个特殊的成员方法,名字必须与类名相同,在创建对象时,由编译器自动调用,并且在整个对象的生命周期内只调用一次。

public class Date {
    public int year;
    public int month;
    public int day;
    public Date(int year ,int month ,int day){
        this.year = year;
        this.month = month;
        this.day = day;
        System.out.println("这个构造方法被调用了");
    }
    public void print(){
        System.out.println(year+"年"+month+"月"+day+"日");
    }
    public static void main(String[] args) {
         Date date1 = new Date(1945,9,1);  //在执行这条语句的时候,调用构造方法
    }
}

 构造方法的特性:

  1. 名字与类名相同,没有返回值类型,设置成void也不行
  2. 一般情况下使用public修饰
  3. 在创建对象的时由编译器自动调用,并且在对象的生命周期内只调用一次

构造方法是可以构成方法的重载的 

public class Date {
    public int year;
    public int month;
    public int day;
    public Date(){
        System.out.println("调用了带两个参数的构造方法");
    }
    public Date(int year ,int month ,int day){
        this.year = year;
        this.month = month;
        this.day = day;
        System.out.println("这个构造方法被调用了");
    }
    public void print(){
        System.out.println(year+"年"+month+"月"+day+"日");
    }
    public static void main(String[] args) {
         Date date1 = new Date(1945,9,1);
    }
}

这些构造方法都可以通过编译器生成

右击屏幕会有一个生成

点击生成会有一个构造方法

 

 注意事项:

如果用户没有自定义构造方法,编译器会生成一份默认的构造方法(不带参数)

如果用户定义了,编译器不在生成。

 构造方法还可以通过this来调用其他的构造方法

 注意:

  1. this()必须是第一条语句
  2. 不能形成环

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1180362.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

大数据毕业设计选题推荐-营业厅营业效能监控平台-Hadoop-Spark-Hive

✨作者主页:IT毕设梦工厂✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Py…

Logstash与FileBeat详解以及ELK整合详解

背景 日志管理的挑战: 关注点很多,任何一个点都有可能引起问题日志分散在很多机器,出了问题时,才发现日志被删了很多运维人员是消防员,哪里有问题去哪里 集中化日志管理思路: 日志收集》格式化分析》检索…

一种以RGB颜色登录的密码实现

当用户点击了某些密码之后,就可以登录成功,主要用于安全码,辅助安全手段。 颜色密码虽然不方便用键盘输入,只能用鼠标点击,但是容易记忆,也不容易被黑客攻陷。

PC9502双节锂电池充电管理芯片高精度外围元件少SOP8封装

■ 产品概述 PC9502 系列是一款双节锂电池充电管理芯片。 该芯片 包含了充电状态检测、充电过程、温度检测等,内部还集成 一个高精度的基准电压模块,此芯片采用 SOP-8 封装。 PC9502 充电包含三种模式:预充电,恒流充电&#x…

【REST API】什么是REST API?

参考: 什么是 REST API 一文读懂 (RESTful API)_哔哩哔哩_bilibili -------------------------------------------------------------------------------------------------------------------------------- REST API,又被称作RESTful API&#xff0c…

国内私募机构出海或成趋势?| A+CLUB深圳沙龙圆桌论坛

上篇国君国际、华锐技术、亚马逊云科技和彭博的四位专家对私募出海涉及到的业务和技术领域做了专业分享,本篇将为大家带来干货满满的圆桌论坛内容。此次圆桌由华锐技术机构业务总监-葛云娟主持,国君国际跨境业务销售主管-毛哲、清华大学教授-林健武、衍盛…

微服务之Nacos配置管理

文章目录 一、统一配置管理Nacos操作二、统一配置管理java操作1.引入依赖2.创建配置文件3.测试4.总结 三、Nacos配置自动更新1.添加注解RefreshScope2.使用ConfigurationProperties注解3.总结 四、Nacos多环境配置共享1.配置文件2.多种配置的优先级3.总结 一、统一配置管理Naco…

Spire.Office for .NET 8.10.2 同步更新-Crk

Spire.Office for .NET是 E-iceblue 提供的企业级 Office .NET API 的组合。它包括Spire.Doc、Spire.XLS、Spire.Spreadsheet、Spire.Presentation、Spire.PDF、Spire.DataExport、Spire.OfficeViewer、Spire.PDFViewer、Spire.DocViewer、Spire.Barcode和Spire.Email。Spire.O…

二.831(KMP)字符串详解

ne[3]枚举2次 ne[4],枚举3次 ne[5],枚举4次]b在后面了,就一个b就不可能在前面了]b舍弃 ne[6],枚举i-1次]一眼看最长相等前后缀,就是aab,aab ne[7],aaba,aaba ne[8],枚举i-1次]aabaa,aabaa 同理 怎么快速看呢!我想把b给夹起来]把中间夹的数越多就多 其实 加的有规律,最…

移动硬盘无法识别怎么办?有哪些免费的读写硬盘工具

在日常生活中,我们都习惯于把移动硬盘作为常用的存储介质,用来储存一些文档资料。那么,如果遇上硬盘无法读取的问题,我们又该如何是好呢? 其实硬盘无法读取的问题还是比较常见的,通常有以下几种处理方法&a…

QT 实现两款自定义的温度计/湿度控件

文章目录 0 引入1、带有标尺的温度/湿度计控件1.头文件2.核心代码 2、竖起来的温度/湿度计控件1.头文件2.实现 3、引用 0 引入 QT原生控件没有实现如仪表盘或者温度计的控件,只好自己实现,文章代码部分参考引用的文章。直接上图 图一 带有标尺的温度计…

unity打AB包,AssetBundle预制体与图集(二)

第二步:加载AB包的资源,用于显示 using System.Collections; using System.Collections.Generic; using System.IO; using UnityEngine; using UnityEngine.Networking; using UnityEngine.U2D; using UnityEngine.UI;public class GameLaunch : MonoBe…

B - Little Tiger vs. Deep Monkey

思路: (1)条件:n道单选题,分值不一定相同,选对或者错,A,B分别做题,得分多者胜; (2)问题:A至少做对几道题才能保证获胜概率达到50%&a…

web前端js基础------制作滚动图片

1,要求 通过定时器使其出现滚动的效果 可以通过按键控制图片滚动的方向(设置两个按钮绑定点击事件) 当鼠标悬停时图片停止,鼠标离开时图片继续向前滚动(可以设置鼠标的悬停和离开事件) 参考如下 conten…

【后端速成 Vue】初识指令(下)

前言: 上一篇初识指令(上)文章中,一共讲解了 v-html,v-show,v-if,v-else,v-else-if,v-on,v-bind 这些指令,当然,还剩不少的指令没有讲解,本问将会…

DBeaver Ultimate forMac/Win中文版:掌控数据宇宙的强大工具

在当今的数字化世界中,数据库管理软件在企业和个人的数据处理中扮演着至关重要的角色。在这篇文章中,我们将介绍一款备受赞誉的数据库管理软件——DBeaver Ultimate,它被广泛应用于各种行业和场景,帮助用户高效地管理和利用他们的…

“Redis与Spring整合及缓存优化“

文章目录 引言1. Spring整合Redis1.1. 为什么选择Redis作为缓存解决方案?Redis的特点和优势Redis与传统关系数据库的对比 1.2. Spring与Redis整合的基本步骤 2. Redis注解式缓存2.1. Spring提供的缓存注解介绍2.2. 使用注解实现方法级别的缓存 3. Redis的击穿、穿透…

系统有同类资源m个,供n个进程共享,若每个进程对资源的最大需求量为k,试问:当m,n,k的值分别为下列情况时(见下表),是否会发生死锁?

一.系统有同类资源m个,供n个进程共享,若每个进程对资源的最大需求量为k,试问:当m,n,k的值分别为下列情况时(见下表),是否会发生死锁? (1)m6;n3;k3 &#xf…

shopee买家通系统一款全自动化操作的软件

Shopee买家通系统可以批量注册虾皮买家号、自动加购加心愿单、根据关键词及产品编号搜索下单。 想要注册虾皮买家号,准备好相应国家的手机号及ip即可,准备好之后按照软件所需格式添加后即可运行自动化注册,注册时可以自动输入手机号、自动接…

linux服务器国内源安装nvm,又快又方便

国内安装nvm的话,如果你的服务器不能访问github,那么使用gitee快速安装还是很方便的: # 能方位github的话,使用这条命令 curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.2/install.sh | bash# 不能访问github的话…