Java初识:类和对象(上)

news2024/11/25 14:56:47

文章目录

  • 学习目标
  • 1.面向对象的初步认识
    • 1.1认识面向对象
    • 1.2 区分面向对象和面向过程
  • 2.类当定义与使用
    • 2.1认识简单类
    • 2.2 类的定义格式
    • 2.3 小试身手-定义类的小练习
  • 3.类的实例化
    • 3.1 什么是实例化
    • 3.2 实例化注意事项:
    • 3.3 类和对象说明
  • 4. this 引用
    • 4.1为什么要用this
    • 4.2 this引用的特性
  • 5. 对象的构造及初始化
    • 5. 1 如何初始化对象
    • 5.2 构造方法
      • 5.2.1构造方法特性
      • 5.2.2this 调用构造方法
    • 5.3 默认初始化
  • 总结

✨✨✨学习的道路很枯燥,希望我们能并肩走下来!

编程真是一件很奇妙的东西。你只是浅尝辄止,那么只会觉得枯燥乏味,像对待任务似的应付它。但你如果深入探索,就会发现其中的奇妙,了解许多所不知道的原理。知识的力量让你沉醉,甘愿深陷其中并发现宝藏。


学习目标

本篇我们来了解Java中的类和对象,这里与C语言会有区别,我们不再注重过程,而倾向于对象。本篇将认识面向对象,类的定义,对象的实例化,成员方法和变量的使用,对象初始化过程等。文章可能有错误,如有发现,请在评论区指正,让我们一起交流,共同进步!


本文开始

1.面向对象的初步认识

1.1认识面向对象

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

1.2 区分面向对象和面向过程

面向过程:关注的是过程
对于实现一个程序,我们需要思考,怎么实现,需要准备变量,实现选择或者循环等操作。
例如冒泡排序,我们需要考虑一共需要交换几趟排序,每趟我们需要实现几次交换,在这之前还需要考虑设几个变量等等细节操作,与思考过程。
示例:洗衣过程,考虑过程,细节操作。

在这里插入图片描述

面向对象: 实体(对象)之间协作完成的
我们只需要对象之间的交互完成即可。不需要关系如何具体实现操作的过程,我们只需要调用对象方法即可;
例如:我们需要实现排序,我们只需要知道Arrays这个类里面有sort(排序)方法即可;排序方法直接使用,而不是像C语言一样一步步考虑细节,与过程;
示例:直接把衣服洗衣粉放入洗衣机即可,不用考虑过程。

在这里插入图片描述

2.类当定义与使用

2.1认识简单类

类是用来对一个实体(对象)来进行描述的,主要描述该实体(对象)具有哪些属性(外观尺寸等),哪些功能(用来干啥)。

例如:电脑
属性:产品品牌,型号,产品重量,外观尺寸,颜色等
功能:上网,视频等

2.2 类的定义格式

在Java中定义类是需要用到class关键字,语法格式:

class: 为定义类的关键字,Test为类的名字,{ }中为了的主体
属性:描述类的成员
方法:类具有哪些功能

class Test {
   filed;// 字段、属性、成员变量
   method; // 行为 、成员方法
}

【注】类名采用大驼峰
面向对象第一步,学会定义类。

2.3 小试身手-定义类的小练习

定义一个学生类:

public class Student {
    public String name;//学生的属性(成员变量)
    public String gender;
    public short age;

    public void DoHomeWork() {//学生的行为(成员方法)
        System.out.println("写作业!");
    }
}

【注】
1.一般我们在一个文件中只定义一个类
2.mian方法所在的类一般使用public修饰(public class)
3.public 修饰的类必须与文件名相同
4.不用轻易修改public 修饰的类

3.类的实例化

3.1 什么是实例化

我们想要实例化对象,就需要获取对象,而获取对象就需要得到类,通过类来定义实例化。而用类类型创建对象的过程,称为类的实例化。
在java中采用new关键字,配合类名来实例化对象。
new Person =>new 的对象

在这里插入图片描述

【注】
1.new关键字用于创建一个对象的实例(每个对象都有自己的成员,通过引用访问成员)
2.使用点(.)来访问对象中的属性和方法
3.同一个类可以创建多个实例
4.类不占内存,代码片段先存放在方法区中(以后的文章会介绍)

3.2 实例化注意事项:

1.实例化对象赋值为null=>不指向任何对象

public static void main(String[] args) {
        Person person = null;
        //代表person 不指向任何对象
        person.name = "zhang";//err
        person.age = 12;//err
        //person不指向任何对象无法引用
    }

报错:

在这里插入图片描述

2.引用能不能指向引用?=》不能
引用只能 指向引用的对象,而不是指向引用

//引用指向引用的例子;
    public static void main3(String[] args) {
        Person person1 = new Person();
        Person person2 = new Person();
        //引用不能指向引用=》说法错误
        //引用person1可以指向引用person2所指向的对象 =>正确(引用一定指向对象,而不是指向引用)
        person1 = person2;
    }

3.一个引用能同时指向多个对象?=》不能
一个引用能指向多个对象?=》err;可以换对象但不能有多个对象

    public static void main4(String[] args) {
        Person person1 = new Person();//引用的地址
//        Person person1 = new Person();
//        Person person1 = new Person();
//        Person person1 = new Person();
    }

【注】
1.属性(成员变量)没有赋值不会报错,编译器会给他们默认值
引用类型:默认null;浮点型:0;Boolean:默认false
字符型:‘\u0000’
2.局部变量必须赋值,不负责编译器报错

3.3 类和对象说明

  1. 类只是一个模板,用来对一个实体进行描述,限定了类有哪些成员。
  2. 类是一种自定义的类型,可以用来定义变量 =》自己定义
  3. 一个类可以实例化出多个对象,实例化出的对象占用实际的物理空间,存储类成员变量。
  4. 类实例化出对象:现实中使用建筑设计图建造出房子。
    类就像是设计图,但是并没有实体存在,类也只是一个设计。
    实例化出的对象才能实际存储数据,占用物理空间如:盖好的房子。

4. this 引用

4.1为什么要用this

我们实例化对象,可能需要创建多个对象,例如创建三个对象,代码里面是如何区分而找到正确的对象呢? =》根据this,我们来看一下!

public class DateUtil {
    public int year;
    public int month;
    public int day;

    public void setDate(int y, int m, int d) {//利用方法,多个赋值,
        // 如果new对象,给对象里面一个个赋值太麻烦
        year = y;
        month = m;
        day = d;
    }
    public void show() {
        System.out.println("年:" + year + " 月:" + month + " 日" + day);
    }
    
        //方法前面是那个引用,就调用那个对象的方法
        public static void main(String[] args) {
            DateUtil dateUtil = new DateUtil();
            dateUtil.setDate(2022,11,9);
            dateUtil.show();

            DateUtil dateUtil2 = new DateUtil();
            dateUtil2.setDate(2022,11,9);
            dateUtil2.show();

            DateUtil dateUtil3 = new DateUtil();
            dateUtil3.setDate(2022,11,9);
            dateUtil3.show();
        }
}

上述代码看似正确,但存在问题!

问题1:出现形参名与成员变量名相同的情况
函数体中是谁给谁赋值?参数谁给谁?

//错误代码:
public void setDate1( int year, int month, int day) {//利用方法,多个赋值
 //这里的year,month,day都是形参, 等号左边是局部变量 优先使用
//实例变量int默认0,相当于形参被默认的值赋值为0;(形参被默认值覆盖)
        year = year;
        month = month;
        day = day;
    }

在这里插入图片描述

为了防止这种情况出现,我们使用this关键字
代码改正:加上this:给当前对象的属性赋值

 //this:访问成员变量
    public void setDate1( int year, int month, int day) {//利用方法,多个赋值
        //这里的year,month,day都是形参,加上this:来表示给当前的对象的属性赋值
        this.year = year;
        this.month = month;
        this.day = day;
    }

问题2:为什么this能精准找到对应的对象呢?

每个成员方法的第一参数默认是this => 隐藏的参数,可不写;this可根据谁引用方法,就会找到对应的引用对象

 public void setDate(DateUtil this, int y, int m, int d) {//利用方法,多个赋值,
        // 如果new对象,给对象里面一个个赋值太麻烦
        year = y;
        month = m;
        day = d;
    }

4.2 this引用的特性

this作用:this引用指向当前对象(成员方法运行时调用该成员方法的对象),在成员方法中所有成员变量的操作,都是通过该引用去访问。

一般this的三种用法:
①this.成员变量
②this.成员方法
③this(…)访问构造方法:且必须是构造方法的第一句

this引用的特性:
1.this的类型:当前对象的引用。谁(对象)调用就是谁对象的引用类型
2.在"成员方法"中,this只能引用当前对象,不能再引用其他对象(this只能在成员方法中使用)
3. this是“成员方法”第一个隐藏的参数,编译器会自动传递,在成员方法执行时,编译器会负责将调用成员方法对象的引用传递给该成员方法,this负责来接收(例如:public void setDate(DateUtil this, int y, int m, int d))

5. 对象的构造及初始化

5. 1 如何初始化对象

通过引用给变量赋值的方式对变量个数多的情况下就不适用了,此时我们可以使用构造方法,为多个变量赋值。

构造方法的作用就是对对象中的成员进行初始化,并不负责给对象开辟空间。

实例化对象时,会调用 构造方法(下面介绍),此时我们可以直接在new 的对象中直接赋值。
例如:

DateUtil dateUtil = new DateUtil(2022,11,10);

5.2 构造方法

构造方法:特殊的成员方法:①没有返回值(不能设置void)②方法名和类名一样

5.2.1构造方法特性

构造方法:无参构造与有参构造

  //构造方法可以重载
  //无参数的构造方法
    public DateUtil(){
        //如果没有构造方法,java默认空构造方法
        //可以写this.year =year;
    }
    //有3个参的构造方法,参数是任意的个数
    public DateUtil( int y, int m, int d) {
        this.year = year;
        this.month = month;
        this.day = day;
    }
  1. 创建对象时由编译器自动调用,并且在对象的生命周期内只调用一次
  2. 构造方法可以重载(根据自己的需求提供不同参数的构造方法);重载:名字相同,参数列表不同
  3. 用户没有定义有参的构造方法,编译器会默认生成无参构造方法;如果设置有参构造,编译器就不会有无参构造,想要再次使用必须自己构造无参方法。

5.2.2this 调用构造方法

this(…)必须是构造方法中第一条语句
this 不能调用静态的成员方法和属性

 public DateUtil(){
        this(2000,11,10);//调用当前对象的构造方法
        //可以写this.year =year;
    }
     public void setDate( int year, int month, int day) {
        this.year = year ;
        this.month = month;
        this.day = day;//访问当前对象的成员变量
        this.show();//访问成员方法
 }

this()调用构造方法:循环调用的错误示范

在这里插入图片描述

5.3 默认初始化

1.初始化分配空间:对象空间被申请好之后,对象中包含的成员已经设置好了初始值。
2.调用构造方法,给对象各个成员赋值。
3.声明变量是,直接给出初始值


总结

✨✨✨各位读友,本篇分享到内容是否让你认识了JAVA的类和对象,如果对你有帮助给个👍赞鼓励一下吧!!
感谢每一位一起走到这的伙伴,我们可以一起交流进步!!!一起加油吧!!!

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

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

相关文章

小程序意见反馈界面(简洁版代码)

在开发个人中心页面时,意见反馈功能是必不可少的,下面介绍该功能的具体开发流程 1、首先看一下效果图: 2、WXML代码,分为三个部分,文本域(TextArea)、输入框(Input)、按钮&#xff…

程序员日常|为什么我在开发工作中偏爱这款键盘?

前言 最近一直不断地有粉丝朋友们私信我,问我该如何给自己挑选一款适合程序员工作的键盘,于是今天来给大家介绍下我用的键盘。 文章目录前言我的键盘亲身经历使用体验视频展示我的键盘 程序员作为一个需要长时间敲代码的职业,没有一个趁手的…

html静态网页设计制作 HTML我的家乡沧州网页代码 dw静态网页成品模板素材网页 web前端网页设计与制作 div静态网页设计

家乡旅游景点网页作业制作 网页代码运用了DIV盒子的使用方法,如盒子的嵌套、浮动、margin、border、background等属性的使用,外部大盒子设定居中,内部左中右布局,下方横向浮动排列,大学学习的前端知识点和布局方式都有…

uint 与 int 相加,事与愿违?

#include <iostream> using namespace std; int main() { uint32_t uint_data -22; int int_data 0; if (uint_data int_data < 0) { cout <<"uint int负数小于0: "; } else { cout <<"…

ARM编程环境搭建教程

随着移动互联网的繁荣发展&#xff0c;物联网人工智能的兴起&#xff0c;嵌入式开发成为了越来越多IT人必须学习的内容&#xff0c;而在嵌入式芯片领域&#xff0c;ARM具有无可撼动的市场占有率&#xff0c;所以说&#xff0c;学习嵌入式不学ARM&#xff0c;不如回家卖红薯。 接…

C++ Reference: Standard C++ Library reference: C Library: cwctype: iswblank

C官网参考链接&#xff1a;https://cplusplus.com/reference/cwctype/iswblank/ 函数 <cwctype> iswblank int iswblank (wint_t c); 检查宽字符是否为空白 检查c是否为空字符。 空白字符是用于分隔一行文本中的单词的空格&#xff08;space character&#xff09;字符…

用色彩活出彩,能率Color Run上海之旅圆满结束

11月8日&#xff0c;以“用色彩&#xff0c;活出彩”为主题的能率|苏宁 Color Run活动&#xff0c;于上海圆满结束。此次活动由燃热领域代表品牌能率与苏宁易购集团联合举办&#xff0c;旨在通过有效户外运动&#xff0c;提倡健康快乐的生活方式&#xff0c;悦享多彩人生。 能率…

摄影网页设计制作 简单静态HTML网页作品 WEB静态摄影网站作业成品 学生DW摄影网站模板

&#x1f389;精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业…

C++语言基础篇

✅作者简介&#xff1a;CSDN内容合伙人&#xff0c;全栈领域新星创作者&#xff0c;阿里云专家博主&#xff0c;华为云云享专家博主&#xff0c;掘金后端评审团成员 &#x1f495;前言&#xff1a; 学长出的这一系列专栏适合有⼀点 C 基础&#xff0c…

PPT的“限制编辑”模式如何设置?

我们知道&#xff0c;Word文档和Excel表格都可以设置限制编辑&#xff0c;防止文件被随意改动&#xff0c;可是PPT文件里并没有“限制编辑”的选项&#xff0c;那要怎么设置呢&#xff1f; 其实&#xff0c;PPT的“只读模式”就等同于“限制编辑”模式&#xff0c;因为PPT文件…

【网页设计】期末大作业:化妆品主题——绿色大气的html5响应式化妆品护肤品肌肤网页设计(11页)

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

Python解决图文验证码登录识别(1)

前言 本文是该专栏的第22篇,后面会持续分享python的干货知识,记得关注。 在信息爆炸的年代,爬虫对于在工作中进行信息的抽取,获取重要的数据源是一项非常不错的技能,可以说很久之前的爬虫几乎没什么难度,直到互联网的持续发展,陆陆续续出现了一大堆的反爬措施,给爬虫也…

【css 动画】css实现奔跑的北极熊

&#x1f4cb; 个人简介 &#x1f496; 作者简介&#xff1a;大家好&#xff0c;我是阿牛&#xff0c;全栈领域优质创作者&#x1f61c;&#x1f4dd; 个人主页&#xff1a;馆主阿牛&#x1f525;&#x1f389; 支持我&#xff1a;点赞&#x1f44d;收藏⭐️留言&#x1f4dd;…

Verilog功能模块——Uart收发

摘要本文分享了一种通用的Uart收发模块&#xff0c;可实现Uart协议所支持的任意波特率&#xff0c;任意位宽数据&#xff08;5~8&#xff09;&#xff0c;任意校验位&#xff08;无校验、奇校验、偶校验、1校验、0校验&#xff09;&#xff0c;任意停止位&#xff08;1、1.5、2…

《机器学习实战》7.AdaBoost元算法提高分类性能

目录 1 基于数据集多重抽样的分类器 1.1 bagging&#xff1a;基于数据随机重抽样的分类器构建方法 1.2 boosting 2 训练算法&#xff1a;基于错误提升分类器的性能 3 基于单层决策树后见弱分类器 4 完整AdaBoost算法的实现 5 测试算法&#xff1a;基于AdaBoost的分类 6…

数据结构 - 二叉搜索树

目录 一、概念 二、实现 非递归删除 递归删除 三、总结 一、概念 二叉搜索树&#xff08;BST&#xff0c;Binary Search Tree&#xff09; 也称二叉排序树&#xff0c;二叉查找树 二叉搜索树&#xff1a;一棵二叉树&#xff0c;可以为空&#xff0c;如果不为空&#xf…

内网工具viper的介绍与配置简介

文章目录0x01 介绍0x02 安装步骤一、首次安装二、更新版本三、修改密码四、反溯源配置五、关闭/重启六、安装目录介绍摘抄0x01 介绍 Viper(炫彩蛇)是提供图形化的操作界面,用户使用浏览器即可进行内网渗透. 0x02 安装步骤 一、首次安装 安装docker apt upodate apt instal…

Qt编写ffmpeg本地摄像头显示(16路本地摄像头占用3.2%CPU)

一、前言 内核ffmpeg除了支持本地文件、网络文件、各种视频流播放以外&#xff0c;还支持打开本地摄像头&#xff0c;和正常的解析流程一致&#xff0c;唯一的区别就是在avformat_open_input第三个参数传入个AVInputFormat参数&#xff0c;这个参数用于指定输入设备的格式&…

疯了!全网居然有人一次性把Java虚拟机HotSpot 给讲透彻了

Java虚拟机HotSpot HotSpot VM&#xff0c;相信大家多多少少都有所了解&#xff0c;它是目前使用范围最广的Java虚拟机&#xff0c;有着最终状态语言解释器的模板解释器。以及一直在不断迭代更新的垃圾回收器&#xff0c;还有极其超凡且精湛的即时编译器。 我认为&#xff0c…

迈动互联IBMS产品一项技术获国家专利

近日&#xff0c;迈动互联获得国家知识产权局颁发的专利证书。该专利为迈动IBMS产品应用领域的视频监控装置。近年来&#xff0c;迈动互联在IBMS可视运维平台产品持续加大研发投入&#xff0c;在IBMS领域新增9项专利&#xff0c;其中发明专利7项、实用新型2项。 迈动IBMS产品是…