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

模块七_面向对象

文章目录

  • 模块七_面向对象
    • 模块六回顾&&模块七重点
  • 第一章.类和对象
    • 1.面向对象的介绍
    • 2.类和对象
      • 2.1类(实体类)_class
      • 2.2对象
      • 3.练习
    • 3.匿名对象的使用
    • 4.一个对象的内存图
    • 5.两个对象的内存图
    • 6.两个对象指向同一片空间内存图
  • 第二章.成员变量和局部变量的区别
  • 第三章.练习

模块七_面向对象

模块六回顾&&模块七重点

模块六回顾:1.概述:拥有功能性代码的代码块将来干开发一个功能就应该对应一个方法2.方法的通用定义格式:修饰符 返回值类型 方法名(参数){方法体return 结果}a.修饰符:public staticb.返回值类型:方法最终返回的结果的数据类型c.方法名:给方法取的名字,见名知意,小驼峰式d.参数:进入到方法内部参与执行的数据e.方法体:具体实现该方法的具体代码f.return 结果:该方法操作完参数之后,最终返回的一个数据3.无参无返回值方法:a.定义:public static void 方法名(){方法体}b.调用:方法名()4.有参无返回值方法:a.定义:public static void 方法名(形参){方法体}b.调用:方法名(实参)5.无参有返回值方法:a.定义:public static 返回值类型 方法名(){方法体return 结果}b.调用:数据类型 变量名 = 方法名()6.有参有返回值方法:a.定义:public static 返回值类型 方法名(形参){方法体return 结果}b.调用:数据类型 变量名 = 方法名(实参)7.注意事项:a.方法不调用不执行,main方法是jvm调用的b.方法之间不能互相嵌套c.方法的执行顺序只和调用顺序有关d.void不能和return 结果共存,但是能和return共存void:代表没有返回值return 结果:代表有返回值,先将结果返回,再结束方法return:仅仅代表结束方法e.一个方法中不能连续写多个returnf.调用方法是,需要看有没有此方法8.参数和返回值使用时机:a.参数:当想将一个方法中的数据,传递到另外一个方法中操作,就需要参数了b.返回值:如果调用者需要使用被调用者的结果,被调用者就需要将自己的结果返回9.方法的重载:a.概述:方法名相同,参数列表不同b.什么叫参数列表不同:参数个数不同,类型不同,类型顺序不同c.和什么无关:和参数名无关,和返回值无关模块七重点:1.知道为啥使用面向对象思想编程2.知道怎么使用面向对象思想编程3.知道什么时候使用面向对象思想编程4.会利用代码去描述世间万物的分类5.会在一个类中访问另外一个类中的成员 -> new对象6.成员变量和局部变量的区别

第一章.类和对象

1.面向对象的介绍

1.面向过程:自己的事情自己干,代表语言C语言洗衣服:每一步自己要亲力亲为 -> 找个盆,放点水,找个搓衣板,搓搓搓
2.面向对象:自己的事情别人帮忙去干,代表语言Java语言    洗衣服:自己的事情别人干 -> 全自动洗衣机3.为啥要使用面向对象思想编程:懒很多功能别人都给我们实现好了,我们只需要直接拿过来使用即可,简化了我们自己的编写过程,减少了我们的代码量4.什么时候使用面向对象思想编程:调用别人的功能时在一个类中想使用别的类中的成员时,就使用面向对象思想编程至于我们使用的功能人家怎么实现的,我们不需要关心,我们只需要知道怎么使用即可5.怎么使用面向对象思想编程:a.new,new完点呀-> 点代表的是调用b.特殊:如果调用的成员带static关键字,我们不需要new,我们直接类名点即可
public class Demo01Object {public static void main(String[] args) {/*我们想在Demo01Object类中使用Scanner类中的next方法实现录入字符串那么我们就需要使用面向对象思想编程对象:Scanner-> new出来的对象实现好的功能:next()我们只需要知道找来Scanner这个对象,就可以调用这个对象中实现好的next方法至于next方法怎么实现的,我们不需要关心*/Scanner sc = new Scanner(System.in);String data = sc.next();System.out.println("data = " + data);System.out.println("===================================");/*我们想在Demo01Object类中使用Random类中的nextInt方法实现随机整数那么我们就需要使用面向对象思想编程对象:Random -> new出来的对象实现好的功能:nextInt()我们只需要知道找来Random这个对象,就可以调用Random中的nextInt方法至于nextInt怎么实现的,我们不需要关心*/Random rd = new Random();int data2 = rd.nextInt();System.out.println("data2 = " + data2);System.out.println("====================================");int[] arr = {1,2,3,4};//[1,2,3,4]/* System.out.print("[");for (int i = 0; i < arr.length; i++) {if (i== arr.length-1){System.out.print(arr[i]+"]");}else{System.out.print(arr[i]+",");}}*//*Arrays就是我们找来的对象toStrig就是此对象中实现好的功能我们只需要调用,怎么实现我们不关心*/System.out.println(Arrays.toString(arr));}
}

2.类和对象

2.1类(实体类)_class

1.测试类:带main方法的类,主要是运行代码的
2.实体类:是一类事物的抽象表示形式世间万物的分类:比如: 人类   狗类   猫类   鼠标类
组成部分:1.属性(成员变量):这一类事物有啥a.定义位置:类中方法外  b.作用范围:作用于当前类c.定义格式: 数据类型 变量名d.默认值:整数:0小数:0.0字符:'\u0000'布尔:false引用:null2.行为(成员方法):这一类事物都能干啥只需要将模块六所学的方法中的static干掉,其他的都一样

在这里插入图片描述

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

描述动物类

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

描述手机类

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

2.2对象

1.概述:一类事物的具体体现
2.使用:a.导包: import 包名.类名如果两个类在同一个包下,想要使用对方的成员不需要导包如果两个类不在同一个包下,想要使用对方的成员需要导包特殊包:java.lang -> 使用lang包下的类不需要导包 -> String友情提示:在学四种权限修饰符之前,尽量让两个类在同一个包下b.创建对象:想要使用哪个类中的成员,new哪个类的对象类名 对象名 = new 类名() -> 比如: Person person = new Person()c.调用成员(成员变量,成员方法) -> 想要使用哪个类中的成员,就用哪个类的对象去点哪个成员对象名.成员变量名 = 值对象名.方法名() -> 调用的是无参无返回值方法对象名.方法名(实参) -> 调用的是有参无返回值方法数据类型 变量名 = 对象名.方法名() -> 调用的是无参有返回值方法数据类型 变量名 = 对象名.方法名(实参) -> 调用的是有参有返回值方法
public class Person {//属性-> 成员变量String name;int age;//行为 -> 成员方法public void eat(){System.out.println("人要干饭");}public void drink(){System.out.println("人要喝水");}
}
public class Demo01Person {public static void main(String[] args) {Person person = new Person();System.out.println(person.name);System.out.println(person.age);person.name = "金莲";person.age = 26;System.out.println(person.name);System.out.println(person.age);person.eat();person.drink();}
}

3.练习

需求:用代码去描述一个手机类,在测试类中为手机类中的属性赋值,并且调用手机类中的功能
public class Phone {//属性String brand;//品牌String color;//颜色int price;//价格//行为public void call(String name){System.out.println("给"+name+"打电话");}public String message(){return "给金莲发短信";}
}================================================================public class Demo02Phone {public static void main(String[] args) {Phone phone = new Phone();phone.brand = "苹果";phone.color = "黑色";phone.price = 7999;System.out.println(phone.brand);System.out.println(phone.color);System.out.println(phone.price);phone.call("金莲");String mess = phone.message();System.out.println(mess);}
}

在这里插入图片描述

3.匿名对象的使用

1.int i = 10
a.int:是数据类型
b.i:变量名
c.等号右边的10:真正的数据2.Person p = new Person()
a.等号左边的Person:对象的类型,好比是int   
b.p:对象名
c.等号右边的new Person():真正的数据,是一个Person对象,将这个对象真正创建出来了    
1.所谓的匿名对象:其实就是没有等号左边的部分,只有等号右边的部分(对象)
2.使用:new 对象().成员3.注意:a.如果我们只想单纯的调用一个方法,让方法执行,我们可以考虑使用匿名对象b.但是如果涉及到赋值,千万不要用匿名对象    
public class Person {String name;public void eat(){System.out.println("人要吃饭");}
}
public class Demo01Person {public static void main(String[] args) {//原始方式Person p = new Person();p.name = "金莲";System.out.println(p.name);p.eat();System.out.println("=================");//匿名对象new Person().eat();new Person().name = "大郎";System.out.println(new Person().name);//null}
}

在这里插入图片描述

4.一个对象的内存图

在这里插入图片描述

5.两个对象的内存图

在这里插入图片描述

phone1和phone2都是new出来的,所以在堆内存中产生了两个不同的空间,所以改变一个空间的数据不会 影响另外一个空间中的数据

6.两个对象指向同一片空间内存图

在这里插入图片描述

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

第二章.成员变量和局部变量的区别

1.定义位置不同(重点)a.成员变量:类中方法外b.局部变量:定义在方法之中或者参数位置2.初始化值不同(重点)a.成员变量:有默认值的,所以不用先手动赋值,就可以直接使用b.局部变量:是没有默认值的,所以需要先手动赋值,再使用3.作用范围不同(重点)a.成员变量:作用于整个类b.局部变量:只作用于自己所在的方法,其他方法使用不了4.内存位置不同(了解)a.成员变量:在堆中,跟着对象走b.局部变量:在栈中,跟着方法走5.生命周期不同(了解)a.成员变量:随着对象的创建而产生,随着对象的消失而消失b.局部变量:随着方法的调用而产生,随着方法的调用完毕而消失    
public class Person {String name;//成员变量public void eat(){int i = 10;//局部变量System.out.println(i);System.out.println(name);//成员变量不用手动赋值可以直接使用,因为有默认值}public void drink(){int j;//System.out.println(j);//局部变量没有默认值,所以需要手动赋值再使用System.out.println(name);//System.out.println(i);//i是eat方法的局部变量,在drink中使用不了}
}

第三章.练习

需求:定义一个类MyDate,属性有 year  month  day再定义一个类Citizen(公民类),属性有 name(String类型)  birthday(MyDate类型)  idCard(String),为这三个属性赋值,然后将值取出来
public class MyDate {int year;int month;int day;
}
public class Citizen {//姓名String name;  //默认值 null/*生日  MyDate类型MyDate属于自定义类型(引用数据类型)这种类型要操作之前必须要赋值怎么赋值?  需要new对象赋值*/MyDate birthday = new MyDate(); // 默认值 null//身份证String idCard;  //默认值null
}
public class Test01 {public static void main(String[] args) {Citizen citizen = new Citizen();citizen.name = "涛哥";citizen.idCard = "111111111";/*citizen.birthday获取的是MyDate对象再去点year获取的是MyDate对象中的year链式调用*/citizen.birthday.year = 2000;citizen.birthday.month = 10;citizen.birthday.day = 10;System.out.println(citizen.name+","+citizen.birthday.year+","+citizen.idCard);}
}

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


http://www.mrgr.cn/news/92825.html

相关文章:

  • 新版的 distrobox 首先需要:设置密码
  • 深度探索推理新境界:DeepSeek-R1如何用“自学”让AI更聪明?
  • 【3天快速入门WPF】11-附加属性
  • DeepSeek行业应用实践报告-智灵动力【112页PPT全】
  • 《动手学习深度学习》的笔记,将会持续更新。
  • LeetCode热题100JS(20/100)第四天|​41. 缺失的第一个正数​|​73. 矩阵置零​|​54. 螺旋矩阵​|​48. 旋转图像​
  • 【华三】从零开始掌握SR技术:原理、架构与应用全解析
  • 使用AoT让.NetFramework4.7.2程序调用.Net8编写的库
  • 神经网络|(十一)|神经元和神经网络
  • windows本地化部署Dify+Deepseek
  • 【零基础C语言】第三节 控制结构
  • 为AI聊天工具添加一个知识系统 之129 详细设计之70 编程 核心技术:Cognitive Protocol Language 之2
  • CSS—背景属性与盒子模型(border、padding、margin)
  • 如何从零开始理解LLM训练理论?预训练范式、模型推理与扩容技巧全解析
  • Linux——基本指令
  • Spring Boot集成Spring Ai框架【详解 搭建Spring Ai项目,以及简单的ai大模型智能体应用,附有图文+示例代码】
  • ue5 创建多列StreeView的方法与理解
  • 【13】智能合约进阶
  • RabbitMQ快速入门
  • 【Python 语法】算法合集