首页 > 其他分享 >9.面向对象(1)

9.面向对象(1)

时间:2024-09-05 19:48:01浏览次数:10  
标签:调用 静态 成员 面向对象 参数 数组 static

MODULE 9 面向对象

1.会定义静态成员以及会调用静态成员

2.会使用可变参数(会给可变参数传参)

3.会二分查找(手撕)

4.会冒泡排序(手撕)

5.会debug的使用

一、static关键字

(一)static的介绍以及基本使用

1.概述:static是一个静态关键字

2.使用:

(1)修饰一个成员变量:

static 数据类型 变量名

(2)修饰一个方法:

修饰符 static 返回值类型 方法名(形参){

方法体

Return 结果

}

(3)调用静态成员方法:

类名直接调用(不用new对象)

(4)静态成员特点:

A.静态成员属于类成员,不属于对象成员(非静态的成员属于对象 成员)

B.静态成员会随着类的加载而加载

C.静态成员优先于非静态成员存在内存中

D.凡是根据静态成员所在的类创建出来的对象,都可以共享这个静 态成员

(二)static修饰成员的访问特点

1.在静态方法中能直接访问非静态成员嘛?不能

想要调用:new对象调用

2.在非静态方法中能直接访问静态成员嘛?能

(1)同类:

直接调用

类名调用

(2)不同类:

类名调用

3.在静态方法中能直接访问静态成员嘛?能

(1)同类:

直接调用

类名调用

(2)不同类:

类名调用

4.在非静态方法中能直接访问非静态成员嘛?能

(1)同类:

直接调用

new对象调用

(2)不同类:

new对象调用

总结:

(1)不管在不在同一个类中,非静态成员都可以new对象调用

(2)不管在不在同一个类中,静态成员都可以类名调用

问题一:既然static成员那么好使(类名直接调用),那么我们在实际开发中, 能不能将所有的成员都定义成静态

不能

由于静态成员会随着类的加载而加载,如果将所有的成员都变成静态 的,那么类一加载,静态成员都会进内存,会大量占用内存空间

问题二:那么静态成员啥时候定义呢?

一般情况下,我们在抽取工作类的时候可以将工具中的所有成员都定 义成静态的

问题三:啥时候定义工具类?

比如我们在写代码的过程中,发现有的功能在反复实现,代码,功能 一样,此时就可以抽取出来,形成工具类

二、可变参数

1.需求:

定义一个方法,实现n个整数相加

2.分析:

方法参数位置,只明确了参数类型,但是不明确参数个数,此时就可以定义成 可变参数

(一)介绍和基本使用

1.定义格式:

数据类型...变量名

2.注意:

(1)可变参数的本质是一个数组

(2)参数位置不能写多个可变参数,而且当可变参数和其他普通参数一起使 用时,可变参数需要放到列表最后

三、递归

1.概述:方法内部自己调用自己

2.分类:

(1)直接递归:

public static void method(){

method()

}

(2)间接递归:

A(){

B()

}

B(){

A()

}

(3)注意:

A.递归必须要有出口,否则会出现“栈内存溢出”

B.递归即使有出口,递归次数不要太多

3.练习:

输出3到1

计算n的阶乘

斐波那契数例

四、数组常见算法

(一)数组翻转

1.概述:数组对称索引位置上的元素互换

(二)冒泡排序

数组的排序,是将数组中的元素按照大小进行排序,默认都是以升序的形式进行排序,数组排序的方法很多,比如冒泡排序

排序都是要进行数组元素大小的比较,再进行位置的交换,冒泡排序是采用数组中相邻元素进行比较换位

(三)二分查找

1.前提:数组中的数据必须是有序的

2.查询思想:

A.老式查询:遍历数组,一个一个比较 -> 查询效率慢

B.二分查找:每次找中间索引对应的元素进行比较查询(每一次查询少一半数据)

五、对象数组

(一)对象数组

1.需求:定义一个长度为3的数组,存储3个Person对象,遍历数组,将三个Person对象中的属性值获取出来

六、方法参数

(一)基本数据类型作为方法参数传递

基本类型做方法参数传递,传递的是值,不是变量本身

方法运行:压栈

方法运行完毕:弹栈 -> 释放栈内存

(二)引用数据类型作为方法参数传递

引用数据类型做方法参数传递时,传递的是地址值

七、命令行参数

八、其他操作

(一)快速生成方法

1.要求先定义再调用,可以先调用

A.快捷键:Alt + 回车

2.快速将一段代码抽取到一个方法中:

A.选中要抽取的方法

B.按ctrl+alt+m

(二)debug测试

1.概述:调试代码的一种操作

2.作用:能清楚的看到每个变量在代码执行过程过中的变化去找错

标签:调用,静态,成员,面向对象,参数,数组,static
From: https://www.cnblogs.com/swh666/p/18395494

相关文章

  • Python 之面向对象
    __slots__限制类的绑定属性__str__:print打印对象,返回用户看到的字符串__repr__:返回程序开发者看到的字符串,如直接输入变量,是为调试服务的classStudent(object):def__str__(self):return'Studentobject(name:%s)'%self.nameprint(Student('hell0'))可以直......
  • 12 Python面向对象编程:运算符重载
    本篇是Python系列教程第12篇,更多内容敬请访问我的Python合集在理解运算符重载之前我们已经知道了什么是方法重载,方法重载就是子类继承父类并且定义了一个和父类一样的方法。知道了什么是重载,也知道了什么是运算符(加减乘除等),那么运算符重载也很好理解了,其实就是在......
  • 13 Python面向对象编程:装饰器
    本篇是Python系列教程第13篇,更多内容敬请访问我的Python合集Python装饰器是一种强大的工具,用于修改或增强函数或方法的行为,而无需更改其源代码。装饰器本质上是一个接收函数作为参数的函数,并返回一个新的函数。装饰器的用途包括日志记录、性能测试、事务处理、缓......
  • PHP8面向对象快速入门四 类的多态 方法重载
    在面向对象编程中,多态是指相同的操作或方法可以作用于不同的对象,从而产生不同的结果。方法重写方法重写是子类提供对从父类继承的方法的特定实现。这是实现多态的一种方式。方法重写允许子类提供具体的实现,而不是使用父类中定义的实现。示例: <?phpclassAnimal{pub......
  • 12 Python面向对象编程:运算符重载
    本篇是Python系列教程第12篇,更多内容敬请访问我的Python合集在理解运算符重载之前我们已经知道了什么是方法重载,方法重载就是子类继承父类并且定义了一个和父类一样的方法。知道了什么是重载,也知道了什么是运算符(加减乘除等),那么运算符重载也很好理解了,其实就是在类里面......
  • 13 Python面向对象编程:装饰器
    本篇是Python系列教程第13篇,更多内容敬请访问我的Python合集Python装饰器是一种强大的工具,用于修改或增强函数或方法的行为,而无需更改其源代码。装饰器本质上是一个接收函数作为参数的函数,并返回一个新的函数。装饰器的用途包括日志记录、性能测试、事务处理、缓存、权......
  • Python中的“类与对象:实例化对象”——掌握面向对象编程的核心技能
    引言面向对象编程不仅是一种编程范式,更是一种思考方式。它允许我们以“对象”为中心来组织代码,每个对象都包含数据(属性)和可以操作这些数据的方法。类则是定义了对象的蓝图或模板,描述了该类型的对象应该具有哪些属性和方法。而实例化对象,则是从这个蓝图中创建具体实例的过程。掌握......
  • 面向对象程序设计之链表 list 的简析(C++)
    简介:链表是一个双向的结构,与string与vector不同的是他不支持[]访问,因为链表是由一个节点一个节点连接而成的,并不连续。我们可以在常数量级内对于链表进行插入与删除数据1.构造函数我们在cplusplus.com中可以查到链表总共有四种构造的方式:1.无参构造(默认构造);2.使用n个va......
  • 12.面向对象(4)
    MODULE12 面向对象知道final修饰成员之后特点会使用静态代码块以及知道静态代码块的使用场景会使用匿名内部类一.权限修饰符(一)概述在Java中提供了四种访问权限,使用不同的访问权限修饰符修饰时,被修饰的内容 会有不同的访问权限(1)public:公共的,最高权限,被public修饰的成......
  • 探秘JavaScript深度领域:精通面向对象编程、虚拟DOM等核心技术
    JaScript作为前端开发的核心技术之一,凭借其强大的灵活性和广泛的应用场景,吸引了大量开发者深入学习。在探秘JaScript的深度领域时,面向对象编程和虚拟DOM等核心技术无疑是两个重要的学习方向。面向对象编程(OOP)在JaScript中扮演着重要角色。虽然JaScript是一种基于原型的语言,而非传......