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

目录

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. 不能形成环

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

完全零基础,教你创建数码配件小程序商城

现如今,随着数码产品的普及,数码配件市场也越来越火爆。如果你有兴趣进入这个行业,并且想要开设一家数码配件小程序商城,那么不要担心,即使你完全零基础也可以轻松实现。 首先,登录【乔拓云】网后台&#x…

武汉某母婴用品公司 - 集简云连接ERP和营销系统,实现库存管理的自动化

品牌介绍与关怀理念 武汉某母婴用品公司是一家专注于高端孕婴童护理用品的企业,积极响应和关怀孕产人群,全方位提供从待产用品到产后护理用品,再到婴童洗护用品和初生婴儿用品等一系列全面的母婴产品。我们的使命是满足客户的需求&#xff0…

Python语法基础(字符串 列表 元组 字典 集合)

目录 字符串(str)字符串的创建特殊情况字符串的转义字符字符串的运算符字符串常用方法求字符串长度去掉多余空格是否包含某子串分割字符串合并字符串替换字符串统计统计字符串出现的次数 练习:判断字符串是否为回文串 列表(list)列表的创建列表常用方法遍历列表列表…

高校教务系统登录页面JS分析——长沙理工大学教务系统

高校教务系统密码加密逻辑及JS逆向 本文将介绍高校教务系统的密码加密逻辑以及使用JavaScript进行逆向分析的过程。通过本文,你将了解到密码加密的基本概念、常用加密算法以及如何通过逆向分析来破解密码。 本文将是本专栏最后一篇文章,我看了绝大多数高…

计算机毕设 基于情感分析的网络舆情热点分析系统

文章目录 0 前言1 课题背景2 数据处理3 文本情感分析3.1 情感分析-词库搭建3.2 文本情感分析实现3.3 建立情感倾向性分析模型 4 数据可视化工具4.1 django框架介绍4.2 ECharts 5 Django使用echarts进行可视化展示5.1 修改setting.py连接mysql数据库5.2 导入数据5.3 使用echarts…

【前端】TypeScript核心知识点讲解

1.TypeScript简介及入门案例 (1)什么是TypeScript? TypeScript 是 JavaScript 的一个超集,支持 ECMAScript 6 (ES6)标准。 TypeScript 由微软开发的自由和开源的编程语言。 TypeScript 设计目标是开发大…

基于SSM的软考系统设计实现

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:Vue 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目:是 目录…

Ubuntu 安装常见问题

1. 安装oh my zsh 搜狗输入法不能用 vim /etc/environmentexport XIM_PROGRAMfcitx export XIMfcitx export GTK_IM_MODULEfcitx export QT_IM_MODULEfcitx export XMODIFIERS“imfcitx” export LANG“zh_CN.UTF-8”配置完后重启,稍等一会,右上角会有个…

判断子序列

给定字符串 s 和 t ,判断 s 是否为 t 的子序列。 字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace"是"abcde"的一个子序列&#…

RT-Thread 组件学习

FinSH控制台 在计算机发展的早期,图形系统出现之前,没有鼠标,甚至没有键盘。那时候人们如何与计算机交互呢?最早期的计算机使用打孔的纸条向计算机输入命令,编写程序。 后来随着计算机的不断发展,显示器、…

使用Java语言实现基本RS触发器

使用Java语言实现计算机程序来模拟基本RS触发器的工作过程,通过本账号2023年10月17日所发布博客“使用Java语言实现数字电路模拟器”中模拟基本逻辑门组成半加器电路的方法来模拟基本触发器的组成和时间延迟。 1 基本RS触发器电路结构 基本RS触发器(又…

Linux软件包(源码包和二进制包)

Linux下的软件包众多,且几乎都是经 GPL 授权、免费开源(无偿公开源代码)的。这意味着如果你具备修改软件源代码的能力,只要你愿意,可以随意修改。 GPL,全称 General Public License,中文名称“通…

C++学习贴---C++预处理器

文章目录 前言预处理器#define预处理条件编译#ifdef#ifndef#if、#elif、#else 和 #endif #和##运算符 预定义宏 前言 预处理器 预处理器是指一些指示编译器在实际编译之前所需要完成的指令。 预处理器负责处理以**井号(#)**开头的预处理指令&#xff0…

【Git】Gui图形化管理、SSH协议私库集成IDEA使用

一、Gui图形化界面使用 1、根据自己需求打开管理器 2、克隆现有的库 3、图形化界面介绍 1、首先在本地仓库更新一个代码文件,进行使用: 2、进入图形管理界面刷新代码资源: 3、点击Stage changed 跟踪文件,将文件处于暂存区 4、通过…

C语言实现给出一位数不大于7位的整型数字,取整数从右端开始的4~7位数字

完整代码: // 给出一位数不大于7位的整型数字,取整数从右端开始的4~7位数字 //就是一个数为abcdefg,取它从右端开始的4~7位数字,就为dcba //如果位数不足7位时,会在数字高位补0 //例如一个数为…

【Vue】【uni-app】工单管理页面实现

用的是uni-app的uni-ui拓展组件实现的 功能是对工单进行一个展示,并对工单根据一些筛选条件进行搜索 目前是实现了除了日期之外的搜索功能,测试数据是下面这个tableData.js,都是我自己手写的,后端请求也稍微写了一些,…

让你认识C++中的模板

目录 一. 泛型编程1、定义 二、函数模板1、定义2、格式3、函数模板的实例化(1)、强制转化(2)、显式实例化 三、类模板1、 类模板的定义格式2、实例3、 类模板的实例化 一. 泛型编程 1、定义 泛型编程:编写与类型无关…

电大搜题:为湖北开放大学学子提供便捷学习辅助工具

湖北开放大学作为一所具有重要社会影响力的学府,为广大在职人士和学习追求者提供了便利的高等教育机会。然而,在学习过程中,同学们常常会遇到繁重的课业压力和难以解决的学习难题。为了解决这一问题,湖北开放大学与广播电视大学合…

页表和cache

页表基本原理 页表主要用来将虚拟地址映射到物理地址,在使用虚拟地址访问内存时,微处理器首先将虚拟地址拆分成页号和页内偏移量,然后使用页号在页表中查找对应的物理页框号,将物理页地址加上页内偏移量,得到最终的物…

STM32 LED编程 GPIO的初始化(标准库)

实验的电路图介绍 实验的电路图类似于开漏接法 要初始化GPIOC接口 标准库的模板 GPIO的标准库编程接口 GPIO引脚的初始化 GPIO作为片上外设 每一个片上外设使用前一定要使能时钟 为什么要使能时钟?时钟是啥 时钟的使能 stm32的每一个片上外设都是时序电路 时序…