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操作对象必须要用指针,所以这里的行为执行者pwrite是我们要执行的行为,也就是方法,这样就实现了使用指针调用方法。

Java与OC方法调用的区别

区别大概是下面的样子:

Java OC
people.write(); [p write];
直接使用对象,通过“.”调用方法 使用指针调用成员方法

Objective-C与Java类的一些区别的更多相关文章

  1. java 对象锁和类锁的区别(转)

    java 对象锁和类锁的区别   转自; ) ); ; ) ); 上述的代码,第一个方法时用了同步代码块的方式进行同步,传入的对象实例是this,表明是当前对象,当然,如果需要同步其他对象实例,也不可 ...

  2. jvm系列(一):java类的加载机制

    java类的加载机制 1.什么是类的加载 类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个java.lang.Class对象,用来封装 ...

  3. 深入研究Java类装载机制

    目录 1.为什么要研究java类装在机制? 2.了解类装载机制,对于我们在项目开发中有什么作用? 3.装载实现细节. 4.总结 一.为什么药研究Java类装载机制 java类加载机制,便于我们使用自定 ...

  4. Java提高篇——静态代码块、构造代码块、构造函数以及Java类初始化顺序

    静态代码块:用staitc声明,jvm加载类时执行,仅执行一次构造代码块:类中直接用{}定义,每一次创建对象时执行.执行顺序优先级:静态块,main(),构造块,构造方法. 构造函数 public H ...

  5. java.lang.ClassNotFoundException与java.lang.NoClassDefFoundError的区别

    java.lang.ClassNotFoundException与java.lang.NoClassDefFoundError的区别   以前一直没有注意过这个问题,前两天机缘巧合上网查了一下,然后自 ...

  6. Objective C类方法load和initialize的区别

    Objective C类方法load和initialize的区别   过去两个星期里,为了完成一个工作,接触到了NSObject中非常特别的两个类方法(Class Method).它们的特别之处,在于 ...

  7. [原创]Android系统中常用JAVA类源码浅析之HashMap

    由于是浅析,所以我只分析常用的接口,注意是Android系统中的JAVA类,可能和JDK的源码有区别. 首先从构造函数开始, /** * Min capacity (other than zero) ...

  8. 浅谈java类集框架和数据结构(1)

    在另外一篇博客我简单介绍了java类集框架相关代码和理论. 这一篇博客我主要分析一下各个类集框架的原理以及源码分析. 一:先谈谈LinkedList 这是LinkedList源码的开头,我们能看到几点 ...

  9. java抽象类和接口区别

    深入理解Java的接口和抽象类 对于面向对象编程来说,抽象是它的一大特征之一.在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类.这两者有太多相似的地方,又有太多不同的地方.很多人在初学的 ...

随机推荐

  1. C#调用Python,报错No module named os

    C#调用Python 环境:Windows 8.1,已经安装Python2.7(C:\Python27),配置了环境变量. 已经安装VS2013,VS2017 1.安装IronPython 下载地址h ...

  2. [LeetCode] Squirrel Simulation 松鼠模拟

    There's a tree, a squirrel, and several nuts. Positions are represented by the cells in a 2D grid. Y ...

  3. CLR-2-2-引用类型和值类型

    引用类型和值类型,是一个老生常谈的问题了.装箱拆箱相信也是猿猿都知,但是还是跟着CLR via C#加深下印象,看有没有什么更加根本和以前被忽略的知识点. 引用类型: 引用类型有哪些这里不过多赘述,来 ...

  4. [SDOI 2011]染色

    Description 题库链接 给定一棵有 \(n\) 个节点的无根树和 \(m\) 个操作,操作有 \(2\) 类: 将节点 \(a\) 到节点 \(b\) 路径上所有点都染成颜色 \(c\) : ...

  5. [JSOI2008]球形空间产生器

    Description 有一个球形空间产生器能够在n维空间中产生一个坚硬的球体.现在,你被困在了这个n维球体中,你只知道球 面上n+1个点的坐标,你需要以最快的速度确定这个n维球体的球心坐标,以便于摧 ...

  6. c语言程序第2次作业

    (一)改错题 1.输出带框文字:在屏幕上输出以下3行信息. 错误信息1:{{uploading-image-560144.png(uploading...)} 错误原因:stdio误写为stido 错 ...

  7. Android简单开发的画画板

    Android开发画画板要考虑得几个问题如下: 1 屏幕画板.画笔如何绘制问题 2 用户手指触摸屏幕画板监听事件,以及对应的几种状态处理问题 3  保存图片到SD卡,以及在系统相册打开时自动加载刚才的 ...

  8. Python笔记(十一):多线程

    (二)和(三)不感兴趣的可以跳过,这里参考了<深入理解计算机系统>第一章和<Python核心编程>第四章 (一)      多线程编程 一个程序包含多个子任务,并且子任务之间相 ...

  9. Linux学习之CentOS(二十)------vi/vim 按键说明

    vi/vim 按键说明 除了上面简易范例的 i, Esc, :wq 之外,其实 vim 还有非常多的按键可以使用. 第一部份:一般模式可用的光标移动.复制粘贴.搜索替换等 移动光标的方法 h 或 向左 ...

  10. text-size-adjust: none并没有什么用

    在样式文件中添加text-size-adjust: none,并没有什么用,移动端浏览器自动调整字体大小还是在进行,webkit已取消对其支持,移动端避免浏览器因为横屏.竖屏模式自动缩放字体大小可以加 ...