| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> Java知识库 -> JavaSE之类和对象的总结 -> 正文阅读 |
|
[Java知识库]JavaSE之类和对象的总结 |
目录 一、初步认识类和对象1.C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题
JAVA
是
基于面向对象
的,
关注
的是
对象,将一件事情拆分成不同的对象,靠对象之间的交互完成。面向过程注重的是过程,在整个过程中所涉及的行为,就是功能。面向对象
注重的是对象,也就是参与过程所涉及到的主体。是通过逻辑将一个个功能实现连接起来
打个比方:以洗衣服为例
面向过程:人将衣服放进洗衣机,倒入洗衣粉,启动洗衣机,洗衣机就会完成洗衣过程并且甩干
面向对象:人、衣服、洗衣粉、洗衣机四个对象之间交互完成,人不需要关注洗衣机具体是如何洗衣服的,如何甩干的
?面向对象是思考问题的一种思考方式,是一种思想。比如:概念与实例。理论与实践。名和实等等。它的好处是将复杂的事情变简单了,只要面对一个对象就行。面向对象设计把握一个重要的经验:谁拥有数据,谁对外提供操作这些数据(私有)的方法(被动的一方是数据的拥有者,主动的一方是执行者)。开发时:找对象,建对象,用对象,并维护对象之间的关系
2.
类就是一类对象的统称。对象就是这一类具体化的一个实例。类相当于一个模板,对象是由模板产生的样本。一个类,可以产生无数的对象。声明一个类就是创建一个新的数据类型,而类在
Java
中属于
引用类型
,
Java
使用关键字
class
来声明类。
声明一个类的基本语法:
class
为
定义类的关键字,
ClassName
为类的名字,
{}
中为类的主体。类中的元素称为:成员属性。类中的函数称为:成员方法
3.类的实例化
用类类型创建对象的过程,称为类的实例化
(1)
类只是
一个
模型
一样的东西,限定了类有哪些成员
(2)一个类可以实例化出多个对象,
实例化出的对象 占用实际的物理空间,存储类成员变量。打
个比方。
类实例化出对象就像现实中使用建筑设计图建造出房子,类就像是设计图
,只设计出需要什么东
西,但是并没有实体的建筑存在,同样类也只是一个设计,实例化出的对象才能实际存储数据,占用物理空间
(3)new
关键字用于创建一个对象的实例
(4)同一个类可以创建多个实例
如下代码:
二、类的成员类的成员可以包含以下:字段、方法、代码块、内部类和接口等。但是本笔记重点总结前3种 ?1.字段
在类中
,
但是方法外部定义的变量
.
这样的变量我们称为
"
字段
"
或
"
属性
"
或
"
成员变量
"(
三种称呼都可以
,
一般不会严格区分)
成员变量又分为普通成员变量和静态成员变量,以下类中的是普通成员,笔记的后面会遇到静态成员变量
?(1)使用 . 访问对象的字段,"访问" 既包含读, 也包含写
(2)对于一个对象的字段如果没有显式设置初始值
,
那么会被设置一个默认的初值。
默认规则:
①
对于各种数字类型, 默认值为 0
②对于 boolean 类型, 默认值为 false
③
对于引用类型(String, Array, 以及自定制类), 默认值为 null
很多时候我们不希望字段使用默认值
,
而是需要我们显式设定初值:
其实也可以在Person内部初始化,但是我们并不建议这么做,因为当我们new多个对象时,不见得每个对象都叫张三,都是18岁 2.方法?用于描述一个对象的行为 方法又分为普通方法和静态方法,以下类中的是普通方法,笔记的后面会遇到静态方法
此处的
show
方法
,
表示
Person
这个对象具有一个
"
展示自我
"
的行为
. 这样的 show
方法是和
person
实例相关联的
.
如果创建了其他实例
,
那么
show
的行为就会发生变化
方法中还有一种特殊的方法称为
构造方法,这个在笔记的后面再总结。
3.static 关键字?它可以修饰属性,修饰方法,修饰代码块,修饰类 (1)修饰属性(Java静态属性和类相关, 和具体的实例无关. 换句话说, 同一个类的不同实例共用同一个静态属性)
注意:count被static所修饰,所有类共享。且不属于对象,访问方式为:类名 . 属性? 内存解析如下: ?(2)修饰方法
如果在任何方法上应用
static
关键字,此方法称为静态方法
①静态方法属于类,而不属于类的对象
②可以直接调用静态方法,而无需创建类的实例
③静态方法可以访问静态数据成员,并可以更改静态数据成员的值
注意:
(i)
静态方法和实例无关
,
而是和类相关
. 因此这导致了两个情况:a.静态方法不能直接使用非静态数据成员或调用非静态方法
(
非静态数据成员和方法都是和实例相关的)b.
this
和
super
两个关键字不能在静态上下文中使用
(this
是当前实例的引用
, super
是当前实例父类实例的引用
,
也
是和当前实例相关
)
(ii)一个方法具体要不要带
static,
都需要是情形而定
(iii)main是不是静态方法都可以,这取决于我们的JVM
三、封装1.什么是封装
在我们写代码的时候经常会涉及两种角色: 类的实现者和类的调用者. 封装的本质就是让类的调用者不必太多的了解类的实现者是如何实现类的, 只要知道如何使用类就行了. 这样就降低了类使用者的学习和使用成本, 从而降低了复杂程度
2.private实现封装
private/ public
这两个关键字表示
"
访问权限控制
"
(1)被
public
修饰的成员变量或者成员方法
,
可以直接被类的调用者使用
(2)被
private
修饰的成员变量或者成员方法
, 不能被类的调用者使用(
类的使用者根本不需要知道, 也不需要关注一个类都有哪些 private 的成员. 从而让类调用者以更低的成本来使用类)
如果类的实现者修改了字段的名字
,
类的调用者不需要做出任何修改
(
类的调用者根本访问不到 name, age这样的字段).但是
类的实现者万一修改了 public 方法 show 的名字, 岂不是类的调用者仍然需要大量修改代码吗?这件事情确实如此, 但是一般很少会发生. 一般类的设计都要求类提供的 public 方法能比较稳定, 不应该频繁发生大的改变. 尤其是对于一些基础库中的类, 更是如此. 每次接口的变动都要仔细考虑兼容性问题
3.getter和setter方法
当我们使用
private
来修饰字段的时候
, 就无法直接使用这个字段了。此时如果需要获取或者修改这个
private
属性
,
就需要使用
getter / setter
方法
(1)getName
即为
getter
方法
,
表示获取这个成员的值
(2)setName
即为
setter
方法
,
表示设置这个成员的值
四、构造方法
1.构造方法是一种特殊方法,
使用关键字
new
实例化新对象时会被自动调用
,
用于完成初始化操作
2.new的执行过程:①为对象分配内存空间? ? ?②调用对象的构造方法
3.语法规则:
(1)方法名称必须与类名称相同
(2)构造方法没有返回值类型声明
(3)
每一个类中一定至少存在一个构造方法(没有明确定义,则系统自动生成一个无参构造)
4.注意:
(1)如果类中没有提供任何的构造函数,那么编译器会默认生成一个不带有参数的构造
(2)若类中定义了构造方法,则默认的无参构造将不再生成
(3)构造方法支持重载
.
规则和普通方法的重载一致
5.this关键字:
this
表示当前对象引用
(
注意不是当前对象
).
可以借助
this 来访问对象的字段和方法。
我们在构造函数的内部,我们可以使用this关键字,构造函数是用来构造对象的,对象还没有构造好,
我们就使用了this,那this还代表当前对象吗?当然不是,this代表的是当前对象的引用
this一般可以这样用:
(1)this.data? ? ? 调用当前对象的属性
(2)this.func()? ? ? ?调用当前对象的方法
(3)this()? ? ? 调用当前对象的其他构造方法
五、代码块1.字段的初始化方式有: (1)就地初始化 (2)使用构造方法初始化 (3)使用代码块初始化。前两种方式前面已经总结过了, 接下来我们介绍第三种方式, 使用代码块初始化 2.根据代码块定义的位置以及关键字,又可分为四种:本地代码块(普通代码块)、静态代码块、构造代码块、同步代码块 (1)本地代码块:定义在方法中的代码块
这种用法比较少见? (2)构造代码块
构造块:定义在类中的代码块
(
不加修饰符
)
。也叫:
实例代码块
。构造代码块一般用于初始化实例成员变量
注意:实例代码块优先于构造函数执行
(3)静态代码块
使用
static
定义的代码块。
一般用于初始化静态成员属性
注意:
静态代码块不管生成多少个对象,其只会执行一次,且是最先执行的。静态代码块执行完毕后
,
实例代码块(构造块)执行,再然后是构造函数执行
(4)同步代码块
后续笔记中将会总结
六、补充1.toString方法:(1)toString 方法会在 println 的时候被自动调用. (2)将对象转成字符串这样的操作我们称为 序列化 (3)toString 是 Object 类提供的方法, 我们自己创建的 Person 类默认继承自 Object 类, 可以重写 toString 方法实现我们自己版本的转换字符串方法 (4)IDEA快速生成Object的toString方法快捷键:alt+f12(insert) 不用快捷键也行,右键找到generate,然后找到toString(),最后点ok即可
我们可以看一下println的源码:
?重写toString方法:
?2.匿名对象(1)没有引用的对象称为匿名对象 (2)匿名对象只能在创建对象时使用 (3)如果一个对象只是用一次, 后面不需要用了, 可以考虑使用匿名对象
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 10:56:49- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |