Objective-C与Java类的一些区别
Objective-C与Java类的一些区别
OC类和C一样,需要有声明和定义,先上一段OC代码
#import <Foundation/Foundation.h>
/*
* 声明一个People类,继承NSObject
*/
@interface People : NSObject
{
// {}花括号内放成员变量
@public
int age;
}
// {}花括号外面放成员方法(行为)
- (void)write;
@end
/*
* People类的实现
*/
@implementation People
- (void)write
{
NSLog(@"开始写博客");
}
@end
/*
* 主方法
*/
int main()
{
// 创建一个People对象
People *p = [People new];
// 执行*p指针所指对象的write方法
[p write];
return 0;
}
执行效果
类的声明
下面是声明一个类
@interface People : NSObject
{
// {}花括号内放成员变量
@public
int age;
}
// {}花括号外面放成员方法(行为)
- (void)write;
@end
@interface - @end
@interface 用来声明一个类,和java里的class关键字类似
@end 使用@interface声明一个类,必须以@end结尾,表示类声明结束People
People是类名
NSObject
NSObject是父类,People类要继承NSObject类,继承使用冒号“:”
{}
在类声明的模块
花括号里面 用来声明 成员变量
花括号外面 用来声明 成员方法@public
共有类型,和java类型,不必多说了,只不过在OC里边,要在前面加上“@”
并且,我们设置一个类型以后,后面的成员如果没有再给出类型,则都默认是设置前面的类型。-
- (void)write;
成员方法前面加一个“-”(减号),是OC的语法,没有为什么,只要是OC对象的方法,就必须以减号“-”开头。()
- (void)write;
OC里的数据类型,必须使用小括号括起来,没有为什么
类的实现(行为)
@implementation People
- (void)write
{
NSLog(@"开始写博客");
}
@end
@implementation - @end
使用@implementation - @end的部分,表示这部分是类的实现,必须以@end结束,表示类的实现的结束
- (void)write{}
实现声明的方法,在{}里实现具体的内容
OC类与Java类的区别
Java的类没有声明的一说法,只有C才有声明
他们代码类似这样
| Java | OC |
|---|---|
创建对象
在OC中,想要执行什么行为,调用什么方法,必须写在[]内
格式如下:
[行为执行者 行为]
那么,OC创建一个对象的代码大概就是下面的样子:
People *p = [People new];
*p
有C语言基础的都知道,*p是一个指针,指针就是一个地址,他指向的就是我们内存当中创建的People对象,C里面所有对对象的操作,都必须通过指针,有了指针,就等于获取到了内存中的对象。
new
用来创建对象的行为,没有为什么,固定写法,就好比Java里创建对象也一定要使用new关键字一样。
Java与OC创建对象的区别
区别大概是下面的样子:
| Java | OC |
|---|---|
| People people = new People(); | People *p = [People new]; |
| 直接获取到对象 | 获取到对象的指针 |
访问成员变量
前面已经说过,OC对象的操作,必须要通过指针
那么,访问成员变量大概要这样写:
// 设置年龄为26
p->age = 26;
Java与OC访问成员变量的区别
区别大概是下面的样子:
| Java | OC |
|---|---|
| people.age = 26; | p->age = 26; |
| 直接使用对象,通过“.”获取成员变量 | 使用指针获取成员变量 |
方法调用
调用方法,与创建对象是一个道理,创建对象我们是调用对象的new行为来获取新建对象的指针
代码大概是下面的样子:
[p write];
p
p是我们创建对象的指针,因为OC操作对象必须要用指针,所以这里的行为执行者是p,write是我们要执行的行为,也就是方法,这样就实现了使用指针调用方法。
Java与OC方法调用的区别
区别大概是下面的样子:
| Java | OC |
|---|---|
| people.write(); | [p write]; |
| 直接使用对象,通过“.”调用方法 | 使用指针调用成员方法 |
Objective-C与Java类的一些区别的更多相关文章
- java 对象锁和类锁的区别(转)
java 对象锁和类锁的区别 转自; ) ); ; ) ); 上述的代码,第一个方法时用了同步代码块的方式进行同步,传入的对象实例是this,表明是当前对象,当然,如果需要同步其他对象实例,也不可 ...
- jvm系列(一):java类的加载机制
java类的加载机制 1.什么是类的加载 类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个java.lang.Class对象,用来封装 ...
- 深入研究Java类装载机制
目录 1.为什么要研究java类装在机制? 2.了解类装载机制,对于我们在项目开发中有什么作用? 3.装载实现细节. 4.总结 一.为什么药研究Java类装载机制 java类加载机制,便于我们使用自定 ...
- Java提高篇——静态代码块、构造代码块、构造函数以及Java类初始化顺序
静态代码块:用staitc声明,jvm加载类时执行,仅执行一次构造代码块:类中直接用{}定义,每一次创建对象时执行.执行顺序优先级:静态块,main(),构造块,构造方法. 构造函数 public H ...
- java.lang.ClassNotFoundException与java.lang.NoClassDefFoundError的区别
java.lang.ClassNotFoundException与java.lang.NoClassDefFoundError的区别 以前一直没有注意过这个问题,前两天机缘巧合上网查了一下,然后自 ...
- Objective C类方法load和initialize的区别
Objective C类方法load和initialize的区别 过去两个星期里,为了完成一个工作,接触到了NSObject中非常特别的两个类方法(Class Method).它们的特别之处,在于 ...
- [原创]Android系统中常用JAVA类源码浅析之HashMap
由于是浅析,所以我只分析常用的接口,注意是Android系统中的JAVA类,可能和JDK的源码有区别. 首先从构造函数开始, /** * Min capacity (other than zero) ...
- 浅谈java类集框架和数据结构(1)
在另外一篇博客我简单介绍了java类集框架相关代码和理论. 这一篇博客我主要分析一下各个类集框架的原理以及源码分析. 一:先谈谈LinkedList 这是LinkedList源码的开头,我们能看到几点 ...
- java抽象类和接口区别
深入理解Java的接口和抽象类 对于面向对象编程来说,抽象是它的一大特征之一.在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类.这两者有太多相似的地方,又有太多不同的地方.很多人在初学的 ...
随机推荐
- git checkout+文件丢失
坑:不知什么时候, 应该是初学git的时候, 在桌面git init了一下, 这次忘记切目录直接在桌面git checkout了, 导致文件丢失了. 解决: 简单复原: git reflog # 查看 ...
- Centos常用命令之:搜索
在linux中,所有的文件都是以目录树的形式存在的.而每个发行版的文件存放之间又会有些差别. 这时候,如果我们想看某个命令或者文档的时候就必须先通过某种方式找到改文档的所在位置. 在linux中提供了 ...
- [AHOI 2005]COMMON 约数研究
Description Input 只有一行一个整数 N(0 < N < 1000000). Output 只有一行输出,为整数M,即f(1)到f(N)的累加和. Sample Input ...
- [HNOI 2003]消防局的设立
Description 2020年,人类在火星上建立了一个庞大的基地群,总共有n个基地.起初为了节约材料,人类只修建了n-1条道路来 连接这些基地,并且每两个基地都能够通过道路到达,所以所有的基地形成 ...
- [测试题]幸运序列(lucky)
Description Ly喜欢幸运数字,众所周知,幸运数字就是数字位上只有4和7的数字. 但是本题的幸运序列和幸运数字完全没关系,就是一个非常非常普通的序列.哈哈,是不是感觉被耍了,没错,你就是被耍 ...
- 计蒜客 NOIP模拟赛(3) D1T1火山喷发
火山喷发对所有附近的生物具有毁灭性的影响.在本题中,我们希望用数值来模拟这一过程. 在环境里有 nnn 个生物分别具有 A1,A2,⋯,An点生命值,一次火山喷发总计 M轮,每轮造成 1点伤害,等 ...
- POJ1743 Musical Theme(二分+后缀数组)
题目大概是给n个数组成的串,求是否有多个“相似”且不重叠的子串的长度大于等于5,两个子串相似当且仅当长度相等且每一位的数字差都相等. 这题是传说中楼教主男人八题之一,虽然已经是用后缀数组解决不可重叠最 ...
- bzoj 5290: [Hnoi2018]道路
Description Solution PJDP毁青春 注意到性质:到根的道路不超过 \(40\) 条 所以我们只关系一个点上面的道路的情况就行了 设 \(f[x][i][j]\) 表示一个点 \( ...
- Python SMTP邮件发送
SMTP是发送邮件的协议,Python内置对SMTP的支持,可以发送纯文本邮件.HTML邮件以及带附件的邮件. Python对SMTP支持有smtplib和email两个模块: email负责构造邮件 ...
- 面试题2:实现Singleton模式
题目:设计一个类,我们只能生成该类的一个实例.