当前位置: 首页 > news >正文

day10_面向对象基础

今日内容

零、 复习昨日
一、面向对象的概念
二、面向对象编程
三、内存图

image-20230210100057175

image-20230210100147071

image-20230210101311328

零、 复习昨日

见晨考题

每日一数组题

写一个方法 用于合并两个int类型的数组 合并法则如下
{1,2,5,8,9}{1,3,0}---->{1,2,5,8,9,1,3,0}

package com.qf.array;import java.util.Arrays;/*** --- 天道酬勤 ---** @author QiuShiju* @desc*/
public class Homework {/*** 写一个方法 用于合并两个int类型的数组  合并法则如下*    {1,2,5,8,9}{1,3,0}---->{1,2,5,8,9,1,3,0}*/public static void main(String[] args) {concat();}// 合并public static void concat() {int[] arr1 = {1,2,5,8,9};int[] arr2 = {1,3,0};// 创建新数组int[] arr3 = new int[arr1.length + arr2.length];System.out.println(Arrays.toString(arr3 ) );// 手动拷贝// for (int i = 0; i < arr3.length; i++) {////     if(i < arr1.length) {//         // 取出arr1中的元素//         arr3[i] = arr1[i];//     } else {//         arr3[i] = arr2[i - arr1.length];//     }// }// 工具拷贝System.arraycopy(arr1,0,arr3,0,arr1.length);System.arraycopy(arr2,0,arr3,arr1.length,arr2.length);System.out.println(Arrays.toString(arr3 ) );}
}

一、面向对象的概念

Java是一门面向对象的编程语言.

补充: c语言面向过程 c++ 半面向对象半面向过程

面向过程编程

开发过程中的所有细节都要编写.

假设: 使用一台电脑敲代码. 其中所有零件都需要自己去造.

面向对象编程

假设: 使用一台电脑敲代码. 找到卖电脑的人,告诉我需要一台电脑,商家就给我一台电脑,可以直接使用. (学会当老板,使唤人)

把大象装进冰箱怎么实现?



什么是类?

类: 人以类聚,一类商品

类: 类一组具有相同属性和行为的对象的集合.

神仙类;;;;;手机类

什么是对象?

对象: 将类实例化的一个具体体现.

对象能将属性和行为具体表现出来.

太上老君;;;;;手里正在拿的那个手机

什么是属性?

属性: 类的一些特点/特征

年龄非常大,不会死 ;;;; 品牌,重量,价钱,颜色等

什么是行为?

行为:就是方法,对象能做的动作

炼丹;;;; 发短信,打电话,玩游戏,聊天


总结

以上四个是什么关系?

  1. 类中有属性和方法
  2. 对象由类创建出来,对象内部有它自己具体的属性和方法
  3. 对象可以将属性和行为表现出来

二、面向对象编程

利用上面这些知识,完成面向对象编程(OOP)

2.1 类的定义

以手机为例,完成编程

package com.qf.oop;/*** --- 天道酬勤 ---** @author QiuShiju* @desc 手机类*/
public class Phone {// 属性定义:// [访问修饰符] 数据类型 变量名;// 访问修饰符,可写可不写String brand;  // 品牌double price;  // 价钱String color;  // 颜色int memory;    // 内存/** String brand; 属性后要不要设置值?* 不加值String brand; 这个手机类的这个属性不固定* 加值 String brand = "华为"; 这个手机类型品牌属性固定,*  意味着后面通过手机类创建出的手机对象的品牌属性直接就是"华为"* ----------------------------------* 其实属性设置不设置值,就是一个变量默认值的问题*/// 方法(今天往后类中的方法不要加static)// (自己写练习题时加static)public void call() {System.out.println("打电话" );}public void play() {System.out.println("打游戏");}
}

练习: 车类

package com.qf.oop;/*** --- 天道酬勤 ---** @author QiuShiju* @desc 类中包含属性和方法*       类的成员有属性和方法**       类就将相当于模板*       对象就是根据模板创建出的实例*/
public class Car {// 成员属性String brand;double price;String color;String num;// 成员方法public void run(){System.out.println("跑" );}public void takePeople() {System.out.println("载人" );}public void didi() {System.out.println("滴滴" );}
}

2.2 创建对象

创建对象又叫实例化

    public static void main(String[] args) {// 创建对象的语法// 类名 对象名 = new 类名();Phone phone = new Phone();// 数据类型 变量名 = 值;// int[] arr = new int[3];}

2.3 使用对象

使用对象就是创建对象,使用对象内部的属性和方法

package com.qf.oop;/*** --- 天道酬勤 ---** @author QiuShiju* @desc*/
public class TestOOP {/*** 主方法中测试*/public static void main(String[] args) {// 创建对象的语法// 类名 对象名 = new 类名();Phone phone = new Phone();// 数据类型 变量名 = 值;// int[] arr = new int[3];// 使用对象,即使用属性和使用方法/** 使用属性:* 1 获得属性值*       数据类型 变量名 = 对象名.属性;* (刚创建的对象内的属性都是该数据类型的默认值)* 2 设置属性值*       对象名.属性 = 值;*/// 属性取值double price = phone.price;System.out.println("手机的价格"+price );String brand = phone.brand;System.out.println("手机的品牌:"+brand );String color = phone.color;System.out.println("手机的颜色:"+color );int num = phone.memory;System.out.println("手机内存"+num+"G" );// 属性赋值phone.brand = "HUAWEI";phone.price = 2999.0;phone.color = "黑曜石";phone.memory = 128;// 再次取值看效果double price2 = phone.price;System.out.println("手机的价格"+price2 );String brand2 = phone.brand;System.out.println("手机的品牌:"+brand2 );String color2 = phone.color;System.out.println("手机的颜色:"+color2 );int num2 = phone.memory;System.out.println("手机内存"+num2+"G" );// =================================================// 使用方法,就是对象调用方法,让方法执行// 对象名.方法名();phone.call();phone.play();}
}

练习: 创建车的对象,调用属性,调用方法

    public static void main(String[] args) {// 对象创建Car car = new Car( );// 取出属性System.out.println(car.price );System.out.println(car.color );System.out.println(car.brand );System.out.println(car.num );// 属性赋值car.price = 190000;car.brand = "BYD";car.color = "玫瑰红";car.num = "豫A66666";System.out.println(car.price );System.out.println(car.color );System.out.println(car.brand );System.out.println(car.num );// 调用方法car.run();car.takePeople();car.didi();}

三、内存图

以创建对象过程画图.

凡是new,都会在内存开辟空间,创建对象,会有地址值
在这同时,对象内部的属性和方法会初始化,赋默认值
完成对象创建,将地址值赋值给对象名
后续通过对象.属性找到堆中的对象的属性给其赋值
后续通过对象方法找到堆中对象的方法让其进栈执行

一个对象的内存图

image-20230210160640794


一个类创建多个对象

 /*** 一个类可以创建出多个对象* 每个对象内部都有属于自己的属性和方法,对象之间互不影响*/public static void main(String[] args) {// 创建1个对象Car car = new Car();car.brand = "玛莎";System.out.println(car.brand );// 再创建1个Car car2 = new Car();car2.brand = "劳斯莱斯";System.out.println(car2.brand );// 再创建Car car3 = new Car();car3.brand = "宾利";System.out.println(car3.brand );}

image-20230210162213576


多个引用(对象名)指向同一个对象

   public static void main(String[] args) {// 对象1Car car1 = new Car( );// 对象2Car car2 = new Car();car2.num = "豫A66666";// car2被car1赋值,其实是被背后的地址赋值// 赋值后,car2和car1执行同一个内存对象car2 = car1;car1.num = "豫A88888";System.out.println(car1 );System.out.println(car1.num );System.out.println("--------" );System.out.println(car2 );System.out.println(car2.num );}

image-20230210163939688

作业

写12生肖类
完成作业pdfT10,T11
复习(看每天笔记大纲,每天昨天题抽1-2题再重复)
预习(下一周全是面向对象(构造方法,局部变量成员变量,this super static, 封装,继承,多态,抽象,接口))
http://www.lryc.cn/news/3050.html

相关文章:

  • 电影订票网站的设计与开发
  • seata【SAGA模式】代码实践(细节未必完全符合saga的配置,仅参考)
  • 面试题:Java锁机制
  • Springboot Web开发
  • 分布式事务 | 使用DTM 的Saga 模式
  • 错误代码0xc0000001要怎么解决?如何修复错误
  • 为什么 HTTP PATCH 方法不是幂等的及其延伸
  • 13 Day:实现内核线程
  • GPU服务器安装显卡驱动、CUDA和cuDNN
  • 结构体变量
  • Java 多态
  • 九龙证券|一夜暴跌36%,美股走势分化,标普指数创近2月最差周度表现
  • 【数据库】 mysql用户授权详解
  • 【性能】性能测试理论篇_学习笔记_2023/2/11
  • C语言(输入printf()函数)
  • Zabbix 构建监控告警平台(四)
  • 2004-2019年285个地级市实际GDP与名义GDP
  • Node.js笔记-Express(基于Node.js的web开发框架)
  • 力扣sql简单篇练习(十五)
  • 浅谈动态代理
  • Idea超好用的管理工具ToolBox(附带idea工具)
  • Spring 中 ApplicationContext 和 BeanFactory 的区别
  • 情人节有哪些数码好物值得送礼?情人节实用性强的数码好物推荐
  • java中flatMap用法
  • 【MySQL Shell】8.9.2 InnoDB ClusterSet 集群中的不一致事务集(GTID集)
  • logstash毫秒时间戳转日期以及使用业务日志时间戳替换原始@timestamp
  • 【C语言】qsort——回调函数
  • 8年软件测试工程师经验感悟
  • 腾讯云安全组配置参考版
  • 代码覆盖率工具OpenCppCoverage在Windows上的使用