【Java SE】类和对象(上)

目录

一. 面向对象的初步认知

1.1 什么是面向对象

1.2 面向对象与面向过程

二. 类定义和使用

2.1 简单认识类

 2.2 类的定义格式

三. 类的实例化 

3.1 什么是实例化 

3.2 实例化对象 

四. this引用(重点)

 4.1 为什么要有this引用

 4.2 this的使用

4.3 this引用的特性

五.对象的构造及初始化 

5.1 默认初始化

5.2 就地初始化

​编辑

5.3 构造方法(重点)

总结:  


本篇文章为JavaSE中的重点内容 希望大家好好看看


 一. 面向对象的初步认知

1.1 什么是面向对象

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

1.2 面向对象与面向过程

举例说明面向对象与面向过程的区别:

面向过程:

传统洗衣服过程

传统的方式:注重的是洗衣服的过程,少了一个环节可能都不行。 这就是面向过程 

C语言就是面向过程的语言

 面向对象:

现代洗衣服过程:

整个洗衣服过程:人把衣服放进洗衣机,倒入洗衣粉到洗衣机,启动洗衣机。衣服便总动洗好

总共分为四步,整个过程都是由这四个对象交互完成,不需要管它如何实现洗衣服这些过程,更注重结果

总共四个对象:人,衣服,洗衣机,洗衣服

面向对象方式来进行处理,就不关注洗衣服的过程,具体洗衣机是怎么来洗衣服,如何来甩干的,用户不用去关心,只需要将衣服放进洗衣机,倒入洗衣粉,启动开关即可,通过对象之间的交互来完成的。
注意:面向过程和面相对象并不是一门语言,而是解决问题的方法,没有那个好坏之分,都有其专门的应用场景。


二. 类定义和使用

2.1 简单认识类

类是用来对一个实体(对象)来进行描述的,主要描述该实体(对象)具有哪些属性(外观尺寸等),哪些功能(用来干啥),描述完成后计算机就可以识别了。

 例如:

比如:洗衣机,它是一个品牌,在Java中可以将其看成是一个类别。
属性:产品品牌,型号,产品重量,外观尺寸,颜色...
功能:洗衣,烘干、定时....

 2.2 类的定义格式

在java中定义类时需要用到class关键字
 

// 创建类
class ClassName{ field;    // 字段(属性) 或者 成员变量method;    // 行为 或者 成员方法
}
  • class为定义类的关键字
  • ClassName为类的名字
  • {}中为类的主体

类中包含的内容称为类的成员。属性主要是用来描述类的,称之为类的成员属性或者类成员变量。方法主要说明类具有哪些功能,称为类的成员方法。

例如刚才的洗衣机我们可以给它描述:

class WashMachine{public String brand;  // 品牌public String type;   // 型号public double weight;  // 重量public double length;  // 长public double width;  // 宽public double height;  // 高public String color;  // 颜色public void washClothes(){  // 洗衣服System.out.println("洗衣功能");}public void dryClothes(){   // 脱水System.out.println("脱水功能");}public void setTime(){    // 定时System.out.println("定时功能");}
}

再定义一个狗类:

class Dog {public String name;public String color;public int age;public void eat() {System.out.println(name + "吃东西");}public void wag() {System.out.println(name + "摇尾巴");}
}

注意事项:

  • 类名注意采用大驼峰定义
  • 成员前写法统一为public
  • 此处写的方法不带 static 关键字
  • 一般一个文件当中只定义一个类
  • public修饰的类必须要和文件名相同
  • public修饰的类必须要和文件名相同

三. 类的实例化 

3.1 什么是实例化 

定义了一个类,就相当于在计算机中定义了一种新的类型,与int,double类似 ,只不过int和double是java语言自带的内置类型,而类是用户自定义了一个新的类型;

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

3.2 实例化对象 

拿上处狗的例子来举例:

 

这样我们就通过new 来创建了一个dog对象,并且对它可以实例化对象

通过. 可以通过类对象访问到它里面的对象 ,并且可以对它初始化

 

注意事项:

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

类和对象的说明:

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

 习题:

1.引用可以指向-引用吗?

解析:不能。引用只能指向对象

只能这样说,dog2指向了dog1所指向的对象

2.一个引用 能不能同时指向 多个对象吗?

解析:不行的 dog1这个引用,只能存储一个对象 

3.dog1指向了null对象?

解析:错误 ,dog1不指向任何对象 

实现俩个数字的交换(重点)

class myValue1 {public int val;
}
class myValue2 {public int val;
}public class Test {public static void swap(myValue1 val1,myValue2 val2) {int tmp = val1.val;val1.val = val2.val;;val2.val = tmp;}public static void main(String[] args) {myValue1 val1 = new myValue1();val1.val = 10;myValue2 val2 = new myValue2();val2.val = 20;System.out.println("交换前");System.out.println(val1.val);System.out.println(val2.val);swap(val1,val2);System.out.println("交换后");System.out.println(val1.val);System.out.println(val2.val);}
}

  

注意基本类型一定不能进行交换,一定要通过引用访问它们中的对象,从地址上改变了它们的对象


四. this引用(重点)

 4.1 为什么要有this引用

引用一个例子就明白了:

public class Date {public int year;public int month;public int day;public void setDate(int y,int m,int d) {year = y;month = m;day = d;}public void printDate() {System.out.println( year + "年" + month + "月" + day + "日 ");}public static void main(String[] args) {Date date = new Date();date.setDate(2023,11,11);date.printDate();}
}

这里是成功打印出来了,而现在我稍作一点改变 ,就会发生错误


 原来:

 现在:形参名不小心与成员变量名相同

 再来看看打印结果

只是修改了变量名字,为什么就打印不出来

原因是

这里都使用了局部变量,并没有赋值到

局部变量优先使用

接下来就可以使用this 这个方法


 4.2 this的使用

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

 

 


即使写了很多个,系统都可以自动识别出 :

this引用的是调用成员方法的对象。


4.3 this引用的特性

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

五.对象的构造及初始化 

5.1 默认初始化

为什么局部变量在使用时必须要初始化,而成员变量可以不用呢?

在程序层面只是简单的一条语句,在JVM层面需要做好多事情,下面简单介绍下:
1. 检测对象对应的类是否加载了,如果没有加载则加载
2. 为对象分配内存空间
3. 处理并发安全问题
比如:多个线程同时申请对象,JVM要保证给对象分配的空间不冲突

4. 初始化所分配的空间
即:对象空间被申请好之后,对象中包含的成员已经设置好了初始值

 

 所以它们都有默认值

5.2 就地初始化

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


5.3 构造方法(重点)

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

 

构造方法的调用 是在实例化对象的时候

之前没有构造的方法,也会被执行,只不过是不带任何参数的

构造方法至少有一个,Java会自带一个不带任何参数的


名字相同,参数列表不同,因此构成了方法重载。 

这里就可以对成员变量进行初始化


假如只写了一个构造方法:

假如你创建了一个带参数的构造方法,但这里却调用不带参数的构造方法,就会报错,因为必须使用你创建了那个构造方法,如果没写构造方法,才可以写不带参数的。 

 这里由一个编写构造方法的快捷方法,就不用一个一个输入:

或者直接用快捷键alt+insert 想创建几个就可以创建几个

总结:  

明天更新 【Java SE】封装

如有不足之处欢迎补充交流

看到这里的友友们,支持一下博主,来个免费三连,感谢! ! !

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Rust 语言常见的一些概念(上)

目录 1、变量的可变性 常量 隐藏 2、数据类型 2.1 标量类型 整型 浮点型 数值运算 布尔型 字符类型 复合类型 元组类型 数组类型 1、变量的可变性 变量默认是不可改变的(immutable)。这是 Rust 提供给你的众多优势之一,让你得以…

大数据分析与应用实验任务九

大数据分析与应用实验任务九 实验目的 进一步熟悉pyspark程序运行方式; 熟练掌握pysaprkRDD基本操作相关的方法、函数,解决基本问题。 实验任务 进入pyspark实验环境,打开命令行窗口,输入pyspark,完成下列任务&am…

远端WWW服务支持TRACE请求

安全扫描的时候,扫出来的问题,这里不分享如何处理,就只分享下,如何找到有问题的端口。 通过命令 curl -v -X TRACE -I ip:port,这里的ip和端口就是扫描出有问题的服务器地址ip以及开放的服务端口。 观察返回值&#x…

C++语法知识点-vector+子数组

C语法知识点-vector子数组 一维数组定义无参数有参数迭代器扩容操作reserve 二维数组 vector 定义创建m*n的二维vectorvector< vector<int> > v(m, vector<int>(n) ) 初始化定义vector常用函数的实例分析访问操作resize 函数push _back ( )pop_back()函数siz…

杨传辉:从一体化架构,到一体化产品,为关键业务负载打造一体化数据库

在刚刚结束的年度发布会上&#xff0c;OceanBase正式推出一体化数据库的首个长期支持版本 4.2.1 LTS&#xff0c;这是面向 OLTP 核心场景的全功能里程碑版本&#xff0c;相比上一个 3.2.4 LTS 版本&#xff0c;新版本能力全面提升&#xff0c;适应场景更加丰富&#xff0c;有更…

python之pyqt专栏1-环境搭建

#python pyqt# python&#xff1a;3.11.6 pycharm&#xff1a;PyCharm Community Edition 2023.2.5 pyqt6 python安装 官网下载&#xff1a;Python Releases for Windows | Python.org pycharm社区版安装 官网地址&#xff1a;Download PyCharm: Python IDE for Professional…

C/C++小写字母的判断 2022年3月电子学会中小学生软件编程(C/C++)等级考试一级真题答案解析

目录 C/C小写字母的判断 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序编写 四、程序说明 五、运行结果 六、考点分析 C/C小写字母的判断 2022年3月 C/C编程等级考试一级编程题 一、题目要求 1、编程实现 输入一个字符&#xff0c;判断是否是英文小…

SpringBoot + 通义千问 + 自定义React组件,支持EventStream数据解析!

一、前言 大家好&#xff01;我是sum墨&#xff0c;一个一线的底层码农&#xff0c;平时喜欢研究和思考一些技术相关的问题并整理成文&#xff0c;限于本人水平&#xff0c;如果文章和代码有表述不当之处&#xff0c;还请不吝赐教。 最近ChatGPT非常受欢迎&#xff0c;尤其是…

vue + docxtemplater 导出 word 文档

一、痛点 word 导出 这种功能其实之前都是后端实现的&#xff0c;但最近有个项目没得后端。所以研究下前端导出。 ps&#xff1a; 前端还可以导出 pdf&#xff0c;但是其分页问题需要话精力去计算才可能实现&#xff0c;并且都不是很完善。可参考之前的文章&#xff1a;利用 h…

PostgreSQL Patroni 3.0 新功能规划 2023年 纽约PG 大会 (音译)

开头还是介绍一下群&#xff0c;如果感兴趣PolarDB ,MongoDB ,MySQL ,PostgreSQL ,Redis, Oceanbase, Sql Server等有问题&#xff0c;有需求都可以加群群内有各大数据库行业大咖&#xff0c;CTO&#xff0c;可以解决你的问题。加群请联系 liuaustin3 &#xff0c;&#xff08;…

81基于matlab GUI的图像处理

基于matlab GUI的图像处理&#xff0c;功能包括图像颜色处理&#xff08;灰度图像、二值图像、反色变换、直方图、拉伸变换&#xff09;&#xff1b;像素操作&#xff08;读取像素、修改像素&#xff09;、平滑滤波&#xff08;均值平滑、高斯平滑、中值平滑&#xff09;、图像…

在arm 64 环境下使用halcon算法

背景&#xff1a; halcon&#xff0c;机器视觉领域神一样得存在&#xff0c;在windows上&#xff0c;应用得特别多&#xff0c; 但是arm环境下使用得很少。那如何在arm下使用halcon呢。按照官方说明&#xff0c;arm下只提供了运行时环境&#xff0c;并且需要使用价值一万多人民…