第四章_面向对象编程(上)-Day09-《Java学习知识库》

admin 2025-11-02 00:58:48 编程 来源:ZONE.CI 全球网 0 阅读模式
  • 1、昨日复习
  • 2、理解“万事万物皆对象”
  • 3、匿名对象的使用
  • 4、再谈方法
    • 4.1 方法的重载
    • 4.2 可变形参的方法
    • 4.3 方法参数的值传递机制
    • 4.4 递归方法

    1、昨日复习

    1. 面向对象思想编程内容的三条主线分别是什么①类及类的成员:属性、方法、构造器;代码块、内部类②面向对象的三大特征:封装、继承、多态③其它关键字:this,super,abstract,interface,static,final,package,import

    面向对象的编程思想?(类、对象;面向对象的三大特征;。。。)2. 谈谈你对面向对象中类和对象的理解,并指出二者的关系?类:抽象的、概念上的内容对象:实实在在存在的一个个体。对象是由类派生出来的。3. 面向对象思想的体现一:类和对象的创建和执行操作有哪三步?①创建类②类的实例化③调用对象的结构:”对象.属性” “对象.方法”4. 画出如下代码在执行时的内存分配情况class Car{String color = “red”;int num = 4; void show(){ int a = 10; System.out.println(“color=”+color+”,num=”+num);}}class CarTest {public static void main(String[] args) {Car c1 = new Car(); Car c2 = new Car(); c1.color = “blue”; c1.show(); c2.show();} }

    1. 类的方法内是否可以定义变量?是否可以调用属性?是否可以定义方法?是否可以调用方法?是;是;否;是

    JVM内存结构编译完源程序以后,生成一个或多个字节码文件。我们使用JVM中的类的加载器和解释器对生成的字节码文件进行解释运行。意味着,需要将字节码文件对应的类加载到内存中,涉及到内存解析。《JVM规范》虚拟机栈,即为平时提到的结构,我们将局部变量存储在栈结构中堆,我们将new出来的结构(比如:数组、对象)加载在堆空间中,补充:对象的属性(非static)加载在堆空间中。方法区:类的加载信息、常量池、静态域。QQ截图20211210143351.png

    2、理解“万事万物皆对象”

    1.JAVA语言范畴中,我们都将功能、结构等封装到类中,通过类的实例化,来调用具体的功能结构2.涉及到java语言与前端HTML、后端的数据库交互时,前后端的结构在java层面交互时,都体现为类、对象。

    3、匿名对象的使用

    没有定义对象名 new 类名().show(); 可以调用类的属性和方法。开发中如何使用匿名对象?

    4、再谈方法

    4.1 方法的重载

    重载的概念:在同一个类中,允许存在一个以上的同名方法,只要它们的参数个数或者参数类型不同即可。(两同一不同:同一类、相同方法名;参数列表不同)跟方法的权限修饰符、返回值类型、形参变量、方法体都没有关系!重载的特点︰与返回值类型无关,只看参数列表,且参数列表必须不同。(参数个数或参数类型)。调用时,根据方法参数列表的不同来区别。

    1. package com.atguigu.java;
    2. /*
    3. * 2.编写程序,定义三个重载方法并调用。方法名为mOL。 三个方法分别接收一个int参数、两个int参数、一个字符串参数。分别
    4. 执行平方运算并输出结果,相乘并输出结果,输出字符串信息。
    5. 在主类的main ()方法中分别用参数区别调用三个方法。
    6. 3.定义三个重载方法max(),第一个方法求两个int值中的最大值,第二个方
    7. 法求两个double值中的最大值,第三个方法求三个double值中的最大值,
    8. 并分别调用三个方法。
    9. */
    10. public class Exerr1 {
    11. public static void main(String[] args) {
    12. Method m = new Method();
    13. m.mOL(5);
    14. m.mOL(8, 5);
    15. m.mOL("我去吃饭了!!!");
    16. System.out.println(m.getMax(5, 9));
    17. System.out.println(m.getMax(5.7, 5.2, 9.6));
    18. }
    19. }
    20. class Method {
    21. public void mOL(int a) {
    22. System.out.println(a * a);
    23. }
    24. public void mOL(int a, int b) {
    25. System.out.println(a * b);
    26. }
    27. public void mOL(String s) {
    28. System.out.println(s);
    29. }
    30. public int getMax(int a, int b) {
    31. return a > b ? a : b;
    32. }
    33. public double getMax(double a, double b) {
    34. return a > b ? a : b;
    35. }
    36. public double getMax(double a, double b, double c) {
    37. return (a > b ? a : b) > c ? (a > b ? a : b) : c;
    38. }
    39. }

    4.2 可变形参的方法

    QQ截图20211210163909.png1.具体使用:1.1声明格式:方法名(参数的类型名 …参数名)1.2可变参数:方法参数部分指定类型的参数个数是可变多个:0个,1个或多个1.3可变个数形参的方法与同名的方法之间,彼此构成重载1.4可变参数方法的使用与方法参数部分使用数组是一致的1.5方法的参数部分有可变形参,需要放在形参声明的最后1.6在一个方法的形参位置,最多只能声明一个可变个数形参注意:可变形参和同一类型的数组不构成重载

    4.3 方法参数的值传递机制

    关于变量的赋值:如果是基本数据类型,此时赋值的是变量所保存的数据值。如果是引用数据类型,此时赋值的是变量所保存的数据的地址值。形参:方法声明时的参数 实参:方法调用时实际传给形参的参数值形参是基本数据类型:将实参基本数据类型变量的“数据值”传递给形参 形参是引用数据类型:将实参引用数据类型变量的“地址值”传递给形参QQ截图20211211165344.png

    4.4 递归方法

    递归方法:一个方法体内调用它自身。方法递归包含了一种隐式的循环,它会重复执行某段代码,但这种重复执行无须循环控制。 递归一定要向已知方向递归,否则这种递归就变成了无穷递归,类似于死循环。

    1. package com.atguigu.java;
    2. public class Practice3 {
    3. public static void main(String[] args) {
    4. // 已知有一个数列:f(0) = 1,f(1) = 4,f(n+2)=2*f(n+1) + f(n),其中n是大于0的整数,求f(10)的值。
    5. Practice3 p = new Practice3();
    6. // p.f(0);
    7. System.out.println(p.f(10));
    8. }
    9. public int f(int n) {
    10. if (n == 0) {
    11. return 1;
    12. } else if (n == 1) {
    13. return 4;
    14. } else if (n > 1) {
    15. return f(n - 2) + 2 * f(n - 1);
    16. } else {
    17. System.out.println("n的范围有误!!!");
    18. return -1;
    19. }
    20. }
    21. }
    1. package com.atguigu.java;
    2. public class Practice4 {
    3. public static void main(String[] args) {
    4. // 已知一个数列:f(20) = 1,f(21) = 4,f(n+2) =
    5. // 2*f(n+1)+f(n),其中n是大于0的整数,求f(10)的值。
    6. Practice4 p = new Practice4();
    7. // p.f(22);
    8. System.out.println(p.f(10));
    9. }
    10. public int f(int n) {
    11. if (n == 20) {
    12. return 1;
    13. } else if (n == 21) {
    14. return 4;
    15. } else {
    16. return f(n + 2) - 2 * f(n + 1);
    17. }
    18. }
    19. }
    1. package com.atguigu.java;
    2. /*
    3. * 输入一个数据n,计算斐波那契数列(Fibonacci)的第n个值
    4. 1 1 2 3 5 8 13 21 34 55
    5. 规律:一个数等于前两个数之和
    6. 要求:计算斐波那契数列(Fibonacci)的第n个值,并将整个数列打印出来
    7. */
    8. public class Practice5 {
    9. public static void main(String[] args) {
    10. Practice5 p = new Practice5();
    11. p.method(10);
    12. }
    13. public void method(int n){
    14. for(int i=1;i<=n;i++){
    15. System.out.print(f(i)+"\t");
    16. }
    17. }
    18. public int f(int n) {
    19. if (n == 1) {
    20. // System.out.print(1 + "\t");
    21. return 1;
    22. } else if (n == 2) {
    23. // System.out.print(1 + "\t");
    24. // f(n-1);
    25. return 1;
    26. } else if (n > 2) {
    27. // System.out.println(f(n-1)+f(n-2));
    28. return f(n - 1) + f(n - 2);
    29. } else {
    30. System.out.println("超出范围");
    31. return -1;
    32. }
    33. }
    34. }
    以太坊cppgolang区别 编程

    以太坊cppgolang区别

    以太坊是一种去中心化的开源平台,它采用智能合约技术,旨在构建和运行不受干扰的分布式应用程序。作为目前最受欢迎的区块链平台之一,以太坊提供了多种编程语言的支持,其
    progolang 编程

    progolang

    Go语言(Golang)是由Google开发的一门静态类型编程语言。作为一名专业的Golang开发者,我深知这门语言的优势和特点。在本文中,我将介绍Golang
    golangn个发送者 编程

    golangn个发送者

    Golang是一种开源的编程语言,由Google团队开发,旨在提高程序的并发性和简化软件开发过程。在Go语言中,有时需要向多个接收者发送信息。本文将介绍如何在G
    golang技能图谱 编程

    golang技能图谱

    从互联网行业的快速发展到人工智能技术的日益成熟,各种编程语言也应运而生。而在这众多的编程语言中,Golang(即Go)作为一门强大且高效的开发语言备受关注。Go
    评论:0   参与:  10