重学Java 10 面向对象

正是风雨欲来的时候,火却越烧越旺了     

                                          ——24.1.20

重点

1.为何使用面向对象思想编程

2.如何使用面向对象思想编程

3.何时使用面向对象思想编程

4.利用代码去描述世间万物的分类

5.在一个类中访问另外一个类中的成员 -> new对象

6.成员变量和局部变量的区别

一、面向对象的介绍

1.面向过程:自己的事情自己干,代表语言:C语言

                eg、洗衣服:每一步都自己干 -> 找个盆,加水,放洗衣粉,找搓衣板,开始洗衣

2.面向对象:自己的事情别人帮忙去做,代表语言:Java语言

                eg、洗衣服:自己的事情别人干 -> 全自动洗衣机

3.使用面向对象思想编程:方便快捷

                很多功能都已经实现好了,只需要将其拿来使用即可,简化了我们自己的编写过程,减少了代码量

4.什么时候使用面向对象思想编程:

                调用别人的功能时

                在一个类中想使用别的类中的思想时,就使用面向对象思想编程

                至于使用的代码功能细节,我们不关心,我们只需要知道如何使用即可

5.如何使用面向对象思想编程:

        ①new,new. -> 点代表的是调用

        ②特殊:如果调用的成员带static关键字,我们直接使用类名点即可

二、类和对象

2.1  类(实体类)_class

1.测试类:带main方法的类,主要是运行代码的

2.实体类:是一类事物的抽象表示形式

                 世间万物的分类:比如:犬类、人类、猫类、鼠标类

        组成部分:

                1.属性(成员变量):这一类事物有什么

                        ①定义位置:类中方法外

                        ②作用范围:作用于当前类

                        ③定义格式:数据类型 变量名

                        ④默认值:

                                整数:0        小数:0.0        字符:'\U0000‘        布尔:false        引用:null

                2.行为(成员方法):这一类的事物能干嘛

                        只需要将方法中所学的static干掉,其他的都一样

只需要将某个分类的属性和行为描述出来,就可以描述这个类

案例

人类

public class Demo65Object02Person {//属性 -> 成员变量String name;int age;//行为 -> 成员方法public void eat(){System.out.println("人要吃饭");}public void drink(){System.out.println("人要喝水");}
}

动物类

public class Demo66Object03Animal {String kind;//品种String color;//颜色public void eat(){System.out.println("动物要吃东西");}public void sleep(){System.out.println("动物要睡觉");}

小明类

public class Demo67Object04Phone {//属性String brand;String color;int price;//行为public void call(String name){System.out.println("给"+name+"打电话");}public String message(){return "给小明发短信";}

2.2 对象

1.概述:一类事物的具体体现

2.使用:

        ①导包

                如果两个类在同一个包下,想要使用对方的成员不需要导包

                如果两个类不在同一个包下,想要使用对方的成员需要导包

                特殊包:java.lang -> 使用lang包下的类,不需要导包 -> String

                注:在学习四种权限修饰符前,尽量让两个类在同一个包下

        ②创建对象:想要使用哪个类中的成员,就new哪个类的对象

                类名 对象名 = new 类名() -> 如:Person person = new Person();

                                                                         Animal animal = new Animal();

        ③调用成员(成员变量、成员方法) -> 想要使用哪个类中的成员,便用哪个类的对象去点哪个成员

                对象名.成员变量名 = 值

                对象名.方法名() -> 调用的是无参无返回值的方法

                对象名.方法名(实参)-> 调用的是无参有返回值的方法

                数据类型 变量名 = 对象名.方法名() -> 调用的是无参有返回值的方法

                数据类型 变量名 = 对象名.方法名(实参) -> 调用的是有参有返回值的方法

示例

public class Demo65Object02Person {//属性 -> 成员变量String name;int age;//行为 -> 成员方法public void eat(){System.out.println("人要吃饭");}public void drink(){System.out.println("人要喝水");}
}public class Demo66Object03Animal {String kind;//品种String color;//颜色public void eat(){System.out.println("动物要吃东西");}public void sleep(){System.out.println("动物要睡觉");}
}public class Demo67Object04Phone {//属性String brand;String color;int price;//行为public void call(String name){System.out.println("给"+name+"打电话");}public String message(){return "给小明发短信";}
}public static void main(String[] args) {Demo65Object02Person p = new Demo65Object02Person();p.age = 21;p.name = "小明";p.drink();p.eat();System.out.println(p.age);System.out.println(p.name);System.out.println("—————————————————————————————————————————————");Demo66Object03Animal a = new Demo66Object03Animal();a.color = "白色";a.kind = "金毛巡回犬";a.sleep();a.eat();System.out.println(a.color);System.out.println(a.kind);System.out.println("————————————————————————————————————————————");Demo67Object04Phone ph = new Demo67Object04Phone();ph.brand = "oppo findx3pro";ph.color = "white";ph.price = 5799;ph.message();ph.call("张三");System.out.println(ph.brand);System.out.println(ph.color);System.out.println(ph.price);ph.call("小明");ph.message();}

练习

用代码描述一个手机类,在测试类中为手机类中的属性赋值,并且调用手机类中的功能

public class Demo67Object04Phone {//属性String brand;String color;int price;//行为public void call(String name){System.out.println("给"+name+"打电话");}public String message(){return "给小明发短信";}
}public static void main(String[] args) {Demo67Object04Phone phone = new Demo67Object04Phone();//手机类类名phone.brand = "OPPO Findx3Pro";phone.price = 5599;phone.color = "白色";System.out.println(phone.brand);System.out.println(phone.price);System.out.println(phone.color);phone.call("小明");phone.message();
}

2.3.匿名对象的使用

1.int i = 10;

        ①int:是数据的类型

        ②i:变量名

        ③等号右边的10:真正的数据

2.Person p = new Person()

        ①等号左边的Person:对象的类型,好比是int

        ②p:对象名

        ③等号右边的new Person:真正的数据,是一个Person对象,将这个对象真正创建出来了

1.所谓的匿名对象,其实就是没有等号左边的部分,只有等号右边的部分(对象)

2.使用:

        new 对象().成员

3.注意:

        ①如果只想单纯的调用一个方法,让方法执行,我们可以考虑匿名对象

        ②但是如果涉及到赋值,千万不要使用匿名对象

示例

public class Demo65Object02Person {//属性 -> 成员变量String name;int age;//行为 -> 成员方法public void eat(){System.out.println("人要吃饭");}public void drink(){System.out.println("人要喝水");}
}public class Demo70Object07PersonNoName {public static void main(String[] args) {//原始方式Demo65Object02Person p = new Demo65Object02Person();p.name = "小明";System.out.println(p.name);p.eat();System.out.println();//匿名对象方式new Demo65Object02Person().eat();}
}

        //匿名对象方式:new Demo65Object02Person().eat();new Demo65Object02Person().name = "小红";System.out.println(new Demo65Object02Person().name);    //null//无法输出

涉及到赋值,千万不要使用匿名对象

三、对象的内存解析

1.一个对象的内存图

2.两个对象的内存图

phone1和phone2都是新new出来的对象,所以在堆内存中开辟了两个不同的空间,修改自己空间中的数据不会影响其他空间中的数据

3.两个对象指向同一个空间的内存图

    

phone2是phone1给的,phone1在内存中保存的是地址值,所以此时phone2和phone1的地址值一样,操作同一片空间中的数据,所以修改一个对象的数据会影响另一个对象

四、成员变量和局部变量的区别

1.定义位置不同*

        成员变量:类中方法外

        局部变量:方法之中或者参数位置

2.初始化值不同*

        成员变量:有默认值,不用手动赋值,可以直接使用

        局部变量:没有默认值,必须手动先赋值,才能使用

3.作用范围不同*

        成员变量:作用于整个类

        局部变量:只作用于自己所在的方法,其他方法用不了

4.内存位置不同

        成员变量:在堆中,跟着对象走

        局部变量:在栈中,跟着方法走

5.生命周期不同

        成员变量:随着对象的产生而产生,随着对象的消失而消失

        局部变量:随着方法的调用而产生,随着方法的调用完毕而消失

五、练习

定义一个类MyDate,属性有year、month、day

        在定义一个Citizen(公民类),属性有name(String类型),birthday(MyDate类型),idcard(string类型),为这三个属性赋值,然后将值取出

自定义生日类型

//自定义生日类型
public class Demo71Object08MyDate {int year;int month;int day;
}

自定义公民类 

//自定义公民类
public class Demo72Object09Citizen {//姓名String name;        //默认值null// 生日 Mydate类型// Mydate属于自定义类型(引用数据类型)// 这种类型要操作之前,必须要赋值// 这种自定义对象,需要new对象赋值Demo71Object08MyDate birthday;      //默认值null//身份证String idcard;      //默认值null
}

主函数

    public static void main(String[] args) {Demo72Object09Citizen citizen = new Demo72Object09Citizen();citizen.name = "张三";citizen.idcard = "04214047";citizen.birthday = new Demo71Object08MyDate();/*Stringbuildercitizen.birthday获取的是Mydate对象再去点year获取的是Mydate对象中的year链式调用*/citizen.birthday.year = 2002;citizen.birthday.month = 11;citizen.birthday.day = 4;System.out.println(citizen.name + "," + citizen.birthday.year + "年"+ citizen.birthday.month + "月" + citizen.birthday.day + "日 " + "学号:" + citizen.idcard);}

 

运行结果

给自定义的类型(引用数据类型)赋值,需要new对象(String比较特殊,可以直接=赋值)

六、总结

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

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

相关文章

力扣刷MySQL-第六弹(详细讲解)

🎉欢迎您来到我的MySQL基础复习专栏 ☆* o(≧▽≦)o *☆哈喽~我是小小恶斯法克🍹 ✨博客主页:小小恶斯法克的博客 🎈该系列文章专栏:力扣刷题讲解-MySQL 🍹文章作者技术和水平很有限,如果文中出…

Maven error in opening zip file?maven源码debug定位问题jar包

文章目录 问题发现调试Maven1. 查看maven版本2. 下载对应版本的maven源码3. 打开maven源码,配置启动选项 启动maven debug模式进入maven 源码,打断点调试找jar包算账 已录制视频 视频连接 问题发现 最近使用maven分析jar包的时候遇到了一个很搞的问题。…

PSoc62™开发板之i2c通信

实验目的 使用模拟i2c接口读取温湿度气压模块BME280数据 实验准备 PSoc62™开发板温湿度气压模块BME280公母头杜邦线 板载资源 本次实验是通过模拟i2c时序的方式来进行通信,理论上可以有非常多的方式配置i2c引脚,不像硬件i2c那样芯片出厂引脚已经固…

Summary for Packaging and Assembly Technologies for Integrated Systems

目录 Introduction Type of Packages: Packaging of integrated devices Question 1: Question 2: Question 3: Question 4: Question 5: Report 1: Front-end and back-end process Question 6: Question 7: Inspection Process Report 2: Prototyping and mas…

【谭浩强C程序设计精讲 chap4】选择结构程序设计

文章目录 第4章 选择结构程序设计一、用 if 语句实现选择结构二、用 switch 语句实现多分支选择结构三、条件运算符和条件表达式 第4章 选择结构程序设计 一、用 if 语句实现选择结构 一般形式: if (表达式)  语句1 [ else  语句2 ] 其他形式,常用的…

web前端项目-3D台球游戏【附源码】

3D台球 【3D台球】这款游戏的操作简洁明了,玩家只需要简单的练习两分钟便能够掌握。玩家需要用鼠标控制击球的方向和力度,将白球打进洞中。每次进球后,玩家需要选择下一个要击打的球,直到所有的球都打进洞中。但要注意避免黑球进…

【Unity】URP报错Object reference not set to an instance of an object

使用URP之后,Unity报错:显示不正常 NullReferenceException: Object reference not set to an instance of an object UnityEngine.Rendering.Universal.UniversalAdditionalCameraData.get_cameraStack () (at Library/PackageCache/com.unity.render-p…

Flink实时数仓同步:拉链表实战详解

一、背景 在大数据领域,业务数据通常最初存储在关系型数据库,例如MySQL。然而,为了满足日常分析和报表等需求,大数据平台会采用多种不同的存储方式来容纳这些业务数据。这些存储方式包括离线仓库、实时仓库等,根据不同…

智能AI写作到底怎么样?这几款AI写作非常好用

近年来,人工智能(AI)技术的快速发展已经渗透到各个领域,包括写作领域。AI写作软件通过模仿指定作家的风格和语言,能够生成高质量的文章。这种技术的出现引发了广泛的讨论和争议。本文将探讨AI写作的优点,并…

Windows给docker设置阿里源

windows环境搭建专栏🔗点击跳转 Windows系统的docker设置阿里源 文章目录 Windows系统的docker设置阿里源1.获得镜像加速器2.配置docker 由于我们生活在中国大陆,所以外网的访问总是那么慢又困难,用docker拉取几兆的小镜象还能忍受&#xff…

单元测试之Stub和Mock

实例 Analyze类会检查filename的长度,如果小于8,我们就会使用一个实现IWebService的类来记录错误. 我们需要给Analyze方法写单元测试。 public class LogAnalyzer {private IWebService service;private IEmailService email;public IWebService Serv…

软考十大管理领域49个过程开展频次总结

1、仅开展一次或仅在预定义时点开展的项目管理过程 序号 过程 过程组 说明 1 制定项目章程 启动 项目章程尽量在整个项目期间保持不变 2 制订项目管理计划 计划 各种管理(程序性)计划和项目基准尽量在整个项目期间保持不变 3 规划范围管理 除规划沟通管…

【微信小程序开发】环境介绍和基本使用

文章目录 前言1. 项目的基本组成结构1.1 JSON 配置文件的作用1.2 如何新建小程序页面1.3 修改项目首页1.4 WXML 模板1.5 WXSS 样式1.6 JS 逻辑交互 2. 宿主环境2.1 什么是宿主环境2.2 通信模型2.3 运行机制2.4 组件2.4.1 view 组件的基本使用:2.4.2 scroll-view 组件…

强网杯2023 crypto

speed up 当时看到这个题目 也是觉得易懂 并且可以解出来的 但是数字实在是过大了兄弟 题目意思是计算2^27的阶乘,并获取得到每一位数的数字之和,flag即为该数字的sha256编码 2^27为134217728 gmpy2包是支持大数运算的,故利用其fac方法进行尝试,在等待一段时间后可以得到对…

2024第十二届中国(上海)国际流体机械展览会(CFME2024)

2024上海流体机械展|泵展|风机展|压缩机展 2024第十二届中国(上海)国际流体机械展览会(CFME2024) 泵阀门风机压缩机减变速机真空干燥设备展 时间:2024年11月25日-27日 地点:国家会展中心(上海虹桥) ◆展会背景: &q…

从 Context 看 Go 设计模式:接口、封装和并发控制

文章目录 Context 的基本结构Context 的实现和传递机制为什么 Context 不直接传递指针案例:DataStore结论 在 Go 语言中, context 包是并发编程的核心,用于传递取消信号和请求范围的值。但其传值机制,特别是为什么不通过指针传递…

智慧工地解决方案及案例:PPT全文26页,附下载

关键词:智慧工地解决方案,智慧工地建设,智慧工地整体架构,数字化工地,智慧工程 一、智慧工地建设对传统建筑业的影响 1、提高了施工效率和质量:智慧工地建设采用了先进的信息技术和管理方法,可…

力扣343. 整数拆分(动态规划)

Problem: 343. 整数拆分 文章目录 题目描述思路解题方法复杂度Code 题目描述 思路 该题目可以抽象成动态规划中的爬楼梯模型,将整数的拆分类比为上台阶: 1.每个阶段可以从整数中划分出1、2、…k的一个整数 2.int dp[n 1] dp[i]表示为i的整数划分的最大…

Next-GPT: Any-to-Any Multimodal LLM

Next-GPT: Any-to-Any Multimodal LLM 最近在调研一些多模态大模型相关的论文,发现Arxiv上出的论文根本看不过来,遂决定开辟一个新坑《一页PPT说清一篇论文》。自己在读论文的过程中会用一页PPT梳理其脉络和重点信息,旨在帮助自己和读者快速了…

线程池的简单介绍及使用

线程池 线程池的参数介绍拒绝策略 线程池的任务处理流程使用Executors创建常见的线程池 线程池的参数介绍 corePoolSize: (核心线程数)这是线程池中始终存在的线程数,即使这些线程处于空闲状态。maximumPoolSize:(最大线程数) 是线程池允许的最大线程数。keepAliveT…