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

admin 2025-11-02 00:58:41 编程 来源:ZONE.CI 全球网 0 阅读模式
  • 1、昨日复习
  • 2、面向过程与面向对象
    • 2.1 Java语言基本元素:类和对象
    • 2.2 内存解析
    • 2.3 类中属性的使用
    • 2.4 类中方法的使用

    1、昨日复习

    1.使用冒泡排序,实现如下的数组从小到大排序。 int[] arr = new int[]{34,5,22,-98,6,-76,0,-3};

    for(int i = 0;i < arr.length - 1;i++){ for(int j = 0;j < arr.length - 1 - i;j++){ if(arr[j] > arr[j + 1]){ int temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } }}

    快排时间复杂度:O(nlogn)冒泡时间复杂度:O(n^2)堆排序、归并排序

    2.如何反转上面的数组。请代码实现略

    1. 复制上述数组,得到一个新的数组vs 赋值操作array2 = array1;

    int[] arr1 = new int[arr.length];for(;;)…

    1. 使用线性查找,从上述数组中查找22是否存在。存在,返回所在位置的索引。不存在,输出提示信息。int dest = 22;boolean isFlag = true;for(int i = 0;i < arr.length;i++){ if(dest == arr[i]){ sysout(i); isFlag = false; break; }}

    if(isFlag){ sysout(“未找到”);}

    int dest = 22;for(int i = 0;i < arr.length;i++){ if(dest == arr[i]){ sysout(i); break; }}

    if(i == arr.length){ sysout(“未找到”);}

    1. 数组中常见的异常有哪些?请举例说明ArrayIndexOutOfBoundsException:数组角标越界异常:合理范围:[0,arr.length -1]越界:arr[-1],arr[arr.length]

    NullPointerException:空指针异常int[] arr = null;arr[0];

    2、面向过程与面向对象

    学习面向对象内容的三条主线 1.Java类及类的成员 :属性、方法、构造器;代码块、内部类2.面向对象的三大特征 :封装性、继承性、多态性、(抽象性)3.其它关键字:this、super、static、final、abstract、interface、package、import面向过程(POP) 与 面向对象(OOP) 二者都是一种思想,面向对象是相对于面向过程而言的。面向过程,强调的是功能行为,以函数为最小单位,考虑怎么做。面向对象,将功能封装进对象,强调具备了功能的对象,以类/对象为最小单位,考虑谁来做。面向对象更加强调运用人类在日常的思维逻辑中采用的思想方法与原则,如抽象、分类、继承、聚合、多态等。

    2.1 Java语言基本元素:类和对象

    类(Class)和对象(Object)是面向对象的核心概念。 类是对一类事物的描述,是抽象的、概念上的定义 。对象是实际存在的该类事物的每个个体,因而也称为实例(instance)。 属 性:对应类中的成员变量 行 为:对应类中的成员方法java类的实例化,即创建类的对象创建对象语法: 类名 对象名 = new 类名(); 使用“对象名.对象成员”的方式访问对象成员(包括属性和方法)

    2.2 内存解析

    QQ截图20211208162128.pngQQ截图20211208162506.png

    2.3 类中属性的使用

    属性(成员变量) VS 局部变量1、相同点:1.1 定义变量的格式:数据类型 变量名 = 变量值1.2 先声明,后使用1.3 变量都有其对应的作用域


    2、不同点:2.1 在类中声明的位置不同属性:直接定义在类的一对{}内局部变量:声明在方法内、方法形参、代码块内、构造器形参、构造器内部的变量2.2 关于权限修饰符属性:可以在声明属性时,指明其权限,使用权限修饰符常用的权限修饰符:public、private、缺省、protected局部变量:不可以使用权限修饰符QQ截图20211208165248.png2.3 默认初始化值的情况属性:类的属性,根据其类型,都有默认初始化值。QQ截图20211208165715.png局部变量:没有默认初始化值意味着我们在调用局部变量之前,一定要显示赋值特别的:形式参数在调用时,我们赋值即可。

    2.4在内存中加载的位置:属性:加载到堆空间(非static修饰)局部变量:加载到栈空间QQ截图20211208165503.png

    2.4 类中方法的使用

    QQ截图20211208220538.pngQQ截图20211208221340.png关于权限修饰符:private、public、缺省、protected———封装性细说返回值类型:有返回值 没有返回值如果方法有返回值,必须在方法声明时,指定返回值的类型,同时,方法中,需要使用return关键字来返回指定类型的变量或常量。如果方法没有返回值,则方法声明时,使用void来表示;通常,没有返回值的方法中,就不使用return,但是如果使用的话,只能“return;”表示结束此方法的意思。我们定义方法该不该有返回值?题目要求凭经验,具体问题具体分析方法名:属于标识符,遵循标识符对的规则和规范,见名知意形参列表:方法可以声明0个、1个、或多个形参。格式:数据类型1 形参1,数据类型2 形参2,。。。。我们定义方法时,该不该定义形参?题目要求凭经验,具体问题具体分析return关键字的作用:适用范围:使用在方法体中作用:结束方法 针对于有返回值的方法,使用“return 数据”方法返回所要的数据注意点:return关键字后面不可以声明执行语句方法的使用中,可以调用当前类的属性或方法;特殊的:方法1中又调用了方法1,这称为方法的递归;方法中不可以再定义别的方法。

    1. package com.atguigu.text;
    2. /*
    3. * 4. 对象数组题目:
    4. 定义类Student,包含三个属性:学号number(int),年级state(int),成绩
    5. score(int)。 创建20个学生对象,学号为1到20,年级和成绩都由随机数确定。
    6. 问题一:打印出3年级(state值为3)的学生信息。
    7. 问题二:使用冒泡排序按学生成绩排序,并遍历所有学生信息
    8. 提示:
    9. 1) 生成随机数:Math.random(),返回值类型double;
    10. 2) 四舍五入取整:Math.round(double d),返回值类型long。
    11. */
    12. public class Exer4 {
    13. public static void main(String[] args) {
    14. // 创建20个学生对象
    15. Student[] arr = new Student[20];
    16. // 学号为1到20,年级和成绩都由随机数确定。
    17. for (int i = 0; i < arr.length; i++) {
    18. arr[i] = new Student();
    19. arr[i].number = i + 1;
    20. arr[i].state = (int) (Math.random() * 12 + 1);
    21. arr[i].score = (int) (Math.random() * 100);
    22. }
    23. // 打印出3年级(state值为3)的学生信息。
    24. System.out.println("打印出3年级(state值为3)的学生信息。");
    25. for (int i = 0; i < arr.length; i++) {
    26. if (arr[i].state == 3) {
    27. System.out.print("学号:" + arr[i].number + " ");
    28. System.out.println("分数:" + arr[i].score);
    29. }
    30. }
    31. // 使用冒泡排序按学生成绩排序,并遍历所有学生信息
    32. for (int i = 0; i < arr.length - 1; i++) {
    33. for (int j = 0; j < arr.length - 1 - i; j++) {
    34. if (arr[j].score > arr[j + 1].score) {
    35. Student temp = arr[j + 1];
    36. arr[j + 1] = arr[j];
    37. arr[j] = temp;
    38. }
    39. }
    40. }
    41. for (int i = 0; i < arr.length; i++) {
    42. System.out.print("学号:" + arr[i].number + " ");
    43. System.out.print("年级:" + arr[i].state + " ");
    44. System.out.println("成绩:" + arr[i].number);
    45. }
    46. }
    47. }
    48. class Student {
    49. /**
    50. * 学号
    51. */
    52. int number;
    53. /**
    54. * 年级
    55. */
    56. int state;
    57. /**
    58. * 成绩
    59. */
    60. int score;
    61. }

    尚硅谷宋红康第4章_面向对象编程(上).pdf

    以太坊cppgolang区别 编程

    以太坊cppgolang区别

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

    progolang

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

    golangn个发送者

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

    golang技能图谱

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