搜索
查看
编辑修改
首页
UNITY
NODEJS
PYTHON
AI
GIT
PHP
GO
CEF3
JAVA
HTML
CSS
搜索
我家自动化
这个屌丝很懒,什么也没留下!
关注作者
热门标签
jquery
HTML
CSS
PHP
ASP
PYTHON
GO
AI
C
C++
C#
PHOTOSHOP
UNITY
iOS
android
vue
xml
爬虫
SEO
LINUX
WINDOWS
JAVA
MFC
CEF3
CAD
NODEJS
GIT
Pyppeteer
article
热门文章
1
idea git 过滤target_IDEA + maven 零基础构建 java agent 项目
2
安装IK分词器_ik分词器不能直接解压
3
使用docker安装SQL审计工具archery_sql语法检查工具 docker
4
IBM MQ部分知识点梳理
5
微信小程序获取手机号报错getPhoneNumber:fail no permission
6
FLP不可能原理
7
信息论在机器学习中的实际应用
8
脱胎于 S 语言的R语言,Ross Ihaka 和 Robert Gentleman 和社区的力量让 R 在学术界与研究机构放光彩
9
【AI】本地部署可以与文件沟通的GPT:Llama 2 + GPT4All + Chroma_ollama gpt4all
10
Redis精通系列——LFU算法详述(Least Frequently Used - 最不经常使用)_redis lfu算法
当前位置:
article
> 正文
类方法、实例方法、静态方法详细讲解_有关于实例方法 类方法 静态方法的描述
作者:我家自动化 | 2024-07-30 11:48:56
赞
踩
有关于实例方法 类方法 静态方法的描述
objective-c中非常重要的语法知识,在此归纳总结一下。
类方法,也称静态方法,指的是用static关键字修饰的方法。此方法属类本身的方法,不属于类的某一个实例(对象)。类方法中不可直接使用实例变量。其调用方式有三种:可直接调用、类名.方法名、对象名.方法名。实例方法指的是不用static关键字修饰的方法。每个实例对象都有自身的实例方法,互相独立,不共享一个。其调用方式只能是对象名.方法名。
用修饰符static声明的方法为静态方法,不用修饰符static声明的方法为实例方法。不管类生成或未生成对象,类的静态方法都可以被使用,使用格式为:类名.静态方法名。静态方法只能使用该静态方法所在类的静态数据成员和静态方法。这是因为使用静态方法时,该静态方法所在类可能还没有对象,即使有对象,由于用类名.静态方法名方式调用静态方法,静态方法没有this指针来存放对象的地址,无法判定应访问哪个对象的数据成员。在类创建对象后,实例方法才能被使用,使用格式为:对象名.实例方法名。实例方法可以使用该方法所在类的所有静态成员和实例成员。
何时用静态方法,何时用实例方法?
先说实例方法,当你给一个类写一个方法,如果该方法需要访问某个实例的成员变量时,那么就将该方法定义成实例方法。一类的实例通常有一些成员变量,其中含有该实例的状态信息。而该方法需要改变这些状态。那么该方法需要声明成实例方法。
静态方法正好相反,它不需要访问某个实例的成员变量,它不需要去改变某个实例的状态。我们把该方法定义成静态方法。
关于静态方法和实例方法的一些误区。
一、静态方法常驻内存,实例方法不是,所以静态方法效率高但占内存。
事实上,方法都是一样的,在加载时机和占用内存上,静态方法和实例方法是一样的,在类型第一次被使用时加载。调用的速度基本上没有差别。
二、静态方法在堆上分配内存,实例方法在堆栈上。
事实上所有的方法都不可能在堆或者堆栈上分配内存,方法作为代码是被加载到特殊的代码内存区域,这个内存区域是不可写的。
三、实例方法需要先创建实例才可以调用,比较麻烦,静态方法不用,比较简单。
事实上如果一个方法与他所在类型的实例无关,那么它就应该是静态的,决不会有人把它写成实例方法。所以所有的实例方法都与实例有关,既然与实例有关,那么创建实例就是必然的步骤,没有麻烦简单一说。实际上上你可以把所有的实例方法都写成静态的,将实例作为参数传入即可。
有些方法看似与所在的实例无关,如IComparer.Compare方法,但实际上每一个实现这个接口的类都只会负责自己类型实例的比较,这是C#1.x规范中没有泛型所带来的历史遗留问题。
大部分静态方法是与类的实例有关的,如各种Parse方法,他做成静态的原因是他没有实例作为参数。其他的大多是出于语义或者其他目的的考虑。
第一种方式, 声明实例,调用实例方法
当一个类有多个实例,例如学生这个类,实例可以有学生甲,学生乙,学生丙,等等,我们就用第一种方式。在多线程的情况下,只要每个线程都创建自己的实例,那么第一种方法通常是线程安全的。
第二种方式,通过一个静态的实例,去调用实例方法
这种情况比较特殊,通常是整个程序里该类唯一的一个实例,我们通过调用该实例的实例方法来改变该实例的某些状态。这一个实例在多线程的情况下,通常是线程不安全的。除非我们给这个实例加锁。防止其他线程访问该实例。
第三种方式,直接调用静态方法
这种情况下静态方法不需要去改变某个实例的状态。只要得到少量的参数就可完成既定事情。比如判断一个文件是否存在,只要给个文件路径和文件名,就能知道该文件是否存在。
函数又叫方法(Methods)
方法Methods又可称为函数。在Objective-C 里的类可以定义两种方法。一种是实例的方法,一种是类的方法。实例的方法局限于某个类的实例,也就是必须定义这个类的实例之后,才能被调用执行的方法。类的方法不需要创建实例,直接通过类的名称就可以被调用执行的方法。
定义一个方法需要:方法名(一个或者多个关键字),返回值类型,参数类型和参数名。下面这的图详细的说明了如何定义一个实例的方法,其中负号[-]表示该方法为实例的方法,该方法的名称加上各个关键字包括冒号即为[insertValue:atIndex:]。
Objective-C 调用方法是通过发送消息给对应的实例对象。发送消息的方式其实是和一般的
编程
语言一样就是调用实例对象的方法,Objective-C独特的地方就是方法的调用是通过一个方法名+零个或多个标示符+零个或多个参数,然而一般的编程语言只需要一个方法名+零个或多个参数就可以了。Objective-C 里面之所以把调用方法称为发送消息,大概是因为所有的消息发送之后都是动态传递给实例对象的。并且,如果一个子类定义了一个和父类相同方法名+标示符的方法之后,子类会先收到该消息,然后选择性的是否继续将该消息传递给父类。
发送消息是通过一对方括号[]来实现的。在括号的里面,实例对象在左边,消息以及参数等的定义在右边。例如:
[anObject insertValue:anObj atIndex:1];
[anObject insertValue:anObj atIndex:1];
为了避免生成多余的临时变量,Objective-C 容许直接使用消息的结果。如下例:
[[anObject getArray] insertValue:[anObject getValueToInsert] atIndex:0];
[[anObject getArray] insertValue:[anObject getValueToInsert] atIndex:0];
类的方法,类似于静态方法(Static Function),常用于作为工厂模式中用来生成新的实例。定义的时候和实例的方法有区别的地方就是开头的符号为加号[+]。调用的类的方法和调用(Static Function)基本相同,直接通过类名就可以。
objective-c中非常重要的语法知识,在此归纳总结一下。
类方法,也称静态方法,指的是用static关键字修饰的方法。此方法属类本身的方法,不属于类的某一个实例(对象)。类方法中不可直接使用实例变量。其调用方式有三种:可直接调用、类名.方法名、对象名.方法名。实例方法指的是不用static关键字修饰的方法。每个实例对象都有自身的实例方法,互相独立,不共享一个。其调用方式只能是对象名.方法名。
用修饰符static声明的方法为静态方法,不用修饰符static声明的方法为实例方法。不管类生成或未生成对象,类的静态方法都可以被使用,使用格式为:类名.静态方法名。静态方法只能使用该静态方法所在类的静态数据成员和静态方法。这是因为使用静态方法时,该静态方法所在类可能还没有对象,即使有对象,由于用类名.静态方法名方式调用静态方法,静态方法没有this指针来存放对象的地址,无法判定应访问哪个对象的数据成员。在类创建对象后,实例方法才能被使用,使用格式为:对象名.实例方法名。实例方法可以使用该方法所在类的所有静态成员和实例成员。
何时用静态方法,何时用实例方法?
声明:
本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:
https://www.wpsshop.cn/w/我家自动化/article/detail/903624
推荐阅读
article
【
python
高级编程教程】笔记
(
python
教程、
python
进阶)第三节:
(
6)
实例
方法
、静态方...
在Python中,类
方法
(
Class Methods)、
静态
方法
(
Static Methods)和
实例
方法
(
Instan...
赞
踩
article
Python
:类(
class
)
静态
方法
(
staticmethod
)和类
方法
(
class
method)...
本文详细介绍了
Python
中
静态
方法
(
staticmethod
)和类
方法
(
class
method)的概念、特点,以及通过...
赞
踩
article
静态方法
--...
静态方法
在类加载的时候就存在了,它不依赖于任何实例。所有
静态方法
必须有实现,也就是说它不能是抽象方法。
静态方法
只能访问所...
赞
踩
article
Java
笔记整理 ——
静态
变量、
静态
方法
、
main
方法_
java
static
类型的数据存在...
静态
变量简介
静态
变量也叫类变量或
静态
属性,是该类的所有对象共享的变量,任何一个该类的对象去访问它时,取到的都是相同的值...
赞
踩
article
[
Java
]
静态方法
...
class Person { public static int v = 10; public static void ...
赞
踩
article
类
方法
,
静态
方法
,
实例
方法
_常用的
实例
方法
和
静态
方法
...
静态
方法
:
静态
方法
是定义在类内部的
方法
,
只能借助于该类访问
静态
方法
需要用 @staticmethod装饰器定义
静态
方法
写...
赞
踩
article
python
实例
方法
、类
方法
、
静态
方法
、
私有
方法
详解_
python
类
私有
方法
的
使用
场景...
前言:在上vip课的时候,每次讲到
实例
方法
、类
方法
、
静态
方法
、
私有
方法
的时候,很多同学而虽然上课能听懂,但是在实践的时候...
赞
踩
article
Java-
静态
方法
、
实例
方法
、
构造
方法
总结_
java
实例
方法
和
静态
方法
和
构造
方法
...
一、
静态
方法
和
实例
方法
的区别1.在外部调用
静态
方法
时(比如main()就是一个典型的
静态
方法
),可以使用"类名.
方法
名"...
赞
踩
article
Python
的类方法、
静态方法
、实例方法_
python
class
里
static
method
...
本文详细介绍了
Python
中的实例方法、类方法和
静态方法
的区别,包括它们的特性和使用场景。实例方法用于操作实例属性,类方...
赞
踩
article
Python
类的
实例
方法
、
静态
方法
和类
方法
_
python
编写
个人信息
类的
实例
方法
、类
方法
、
静态
方法
。...
Python
类语法中支持三种
方法
:
实例
方法
,
静态
方法
,类
方法
。class Foo(object): """类三种
方法
语法...
赞
踩
相关标签
python
笔记
开发语言
java
jvm
后端
类方法,静态方法,实例方法
前端