最后
这种编程思想强调的是过程,凡事亲力亲为
2. 面向对象:
这种思想强调的是结果,Java就是一门面向对象的语言
不在意完成的过程,在意的是有对象可以帮我干活
比如:我们想吃饭,不在意是哪个厨师做的,也不在意是哪个骑手送的,只要有厨师做,有骑手派送就好了
我们可以把OOP的思维理解成一种行为习惯 思维方式
比如衣服,没有办法给出一个明确的定义,但是,只要我们看到任何一件衣服,我们就自动把它归类到衣服这个分类中,因为你在过去的生活经验中已经见过太多的衣服,积累经验
3.类
类指的是类型Type,是指一类事物,使用Java中的class关键字来描述
类是抽象的,要提取这一类事物的特征与功能
可以把类理解成设计图纸,模板
注意:类在现实世界中不是真实存在,它只是一种对象的数据类型
4.对象
对象就是根据类创建出来的一个个独立且具体的实例
一个类可以创建出多个对象,我们通过对象唯一的地址值区分不同的对象
对象具有各种特征,并且每个对象的每个特征都可以有自己特定的值
对象具有各种行为,每个对象可以执行的操作
5.对象创建过程分析
Phone p = new Phone();创建对象时,内存发生了什么?
-
在栈内存中开辟一块空间,Phone类型的引用类型变量p,把p压入栈底,此时p只有一个默认值null
-
在堆内存中开辟一块空间用于存放Phone类型的对象
-
要给这个对象进行初始化,比如:String brand = null;
-
此对象已经准备好,所以会生成一个唯一的地址值,并将这个地址值交给栈内存中的变量p来保存
-
如果后续想要对对象做操作,比如:p.price=88.8;先会找到栈中p变量保存的地址值,根据这个地址找到堆中的对象再做进一步的操作
3.1为啥要用封装?
-
封装可以提高程序的安全性
-
封装可以让资源按照我们预先规定的方式来操作
3.2属性的封装
用private修饰属性,一旦属性被private修饰,就只能在本类中使用,外界无法访问
所以为了让外界能够按照我们提供的方式来调用,需要根据属性生成公共的getXxx()与setXxx()方法
3.2 方法的封装
方法的封装也是使用private来修饰方法
如果想要调用私有方法的功能,就需要在本类的公共方法里调用这个私有方法
===============================================================================
-
定义汽车类Car
-
定义汽车类的属性:颜色 品牌 价格 车长
-
定义汽车类的方法:启动功能start() 停止功能stop(),stop()要封装,先启动再停止
-
创建Car类的对象c,给c对象的属性赋值并查看:“暗夜紫” “BMW” 200 0.2
-
封装定义好的4个属性,并提供属性对应的get与set方法
-
使用set()与get()重新给c对象赋值并查看赋值结果 “特斯拉” “black” 200.02 3
package cn.tedu.review;
/本类用于OOP的知识回顾/
public class TestCar {
public static void main(String[] args) {
//4.创建汽车类的对象c
Car c = new Car();
//5.给c对象的属性赋值,并打印查看赋值的结果"宝马" “活力橙” 200000.98 3.1
// c.brand = “宝马”;
// c.color = “活力橙”;
// c.price = 200000.98;
// c.length = 3.1;
// System.out.println(c.length);
// System.out.println(c.price);
// System.out.println(c.brand);
// System.out.println(c.color);
//6.通过c对象调用汽车类的方法
c.start();
//c.stop();
//8.通过set方法给c对象重新赋值 “特斯拉” “石墨绿” 210000.99 2.9
c.setBrand(“特斯拉”);
c.setColor(“石墨绿”);
c.setPrice(210000.99);
c.setLength(2.9);
//9.通过get方法查看c对象的属性是否赋值成功
System.out.println(c.getBrand());
System.out.println(c.getColor());
System.out.println(c.getPrice());
System.out.println(c.getLength());
}
}
最后
ActiveMQ消息中间件面试专题
- 什么是ActiveMQ?
- ActiveMQ服务器宕机怎么办?
- 丢消息怎么办?
- 持久化消息非常慢怎么办?
- 消息的不均匀消费怎么办?
- 死信队列怎么办?
- ActiveMQ中的消息重发时间间隔和重发次数吗?
ActiveMQ消息中间件面试专题解析拓展:
redis面试专题及答案
- 支持一致性哈希的客户端有哪些?
- Redis与其他key-value存储有什么不同?
- Redis的内存占用情况怎么样?
- 都有哪些办法可以降低Redis的内存使用情况呢?
- 查看Redis使用情况及状态信息用什么命令?
- Redis的内存用完了会发生什么?
- Redis是单线程的,如何提高多核CPU的利用率?
Spring面试专题及答案
- 谈谈你对 Spring 的理解
- Spring 有哪些优点?
- Spring 中的设计模式
- 怎样开启注解装配以及常用注解
- 简单介绍下 Spring bean 的生命周期
Spring面试答案解析拓展
高并发多线程面试专题
- 现在有线程 T1、T2 和 T3。你如何确保 T2 线程在 T1 之后执行,并且 T3 线程在 T2 之后执行?
- Java 中新的 Lock 接口相对于同步代码块(synchronized block)有什么优势?如果让你实现一个高性能缓存,支持并发读取和单一写入,你如何保证数据完整性。
- Java 中 wait 和 sleep 方法有什么区别?
- 如何在 Java 中实现一个阻塞队列?
- 如何在 Java 中编写代码解决生产者消费者问题?
- 写一段死锁代码。你在 Java 中如何解决死锁?
高并发多线程面试解析与拓展
jvm面试专题与解析
- JVM 由哪些部分组成?
- JVM 内存划分?
- Java 的内存模型?
- 引用的分类?
- GC什么时候开始?
JVM面试专题解析与拓展!
内存模型?
- 引用的分类?
- GC什么时候开始?
JVM面试专题解析与拓展!
[外链图片转存中…(img-tm1lb8jG-1714850270533)]