Objective-C 和 Java 很像,区别在哪儿

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Objective-C 和 Java 很像,区别在哪儿相关的知识,希望对你有一定的参考价值。

1.类比较
objC:例如创建一个bird的类
@Interface bird
@private int foot;

-(void)eat
NSLog(@"what is the bird eat?");

@end
objectC是以"-"和“+”开头的类方法,-(void)eat:(id)sender加:是带参数的,void是eat方法的返回类型,参数的描述包含两个部分:圆括号中的参数类型以及圆括号后面的参数名。
java: class bird
private int foot;
public void eat()
system.out.println("what is the bird eat?");


C++:class bird
private:int foot;
pubblic:eat();

与java和C++一样ObjC的类也可以继承其他类,几乎所有的类都要继承NSObject的基类,继承方法也类似于C++但public和priavte关键字不能在父类前。注意objec和java一样不能多继承。
这里java中的interface在objectC就是protocol,但是在java中可以多接口,只能单继承,这一点ObjetC和java相似。
2.实例化
在C++中创建实例:Bird *bird =new Bird();
在java中创建实例:Bird bird=new Bird();
而在objectC中则是: Bird *bird=[Bird alloc];这里的alloc是释放的bird创建实例的消息调度。
3.消息
objectC一般调用alloc的调用函数,如Bool listening =[bird isListening];
在C++中则会这样:bool listening =bird-> isListening();
在java中就会是:boolean listening =bird.isListening();
若要带参数:[bird runEvent:fly];
C++:bird->run(fly);
java:bird.runEvent(fly);
4.成员变量
在ObjectC中self就像c++和java中的this一样,ObjectC的类方法就使用self关键字。
5.内存管理
objectC不像java那样有垃圾收集器可以看管对象释放及分配内存,若objectc没有内存管理的话,就会泄露内存。因此relase就是一个内存释放器,当通过alloc函数或是以new copy 开头的函数创建NSObject的子类实例时就将计数值-1,变成0就是由1->0若没有内存管理,则计数值不会变成0.
这些是比较典型的,其实还有很多相同和不同之处。
因为objectC是c的超集。也就是可以用C来写,其实在objectc的项目中可以添加C++语法,这样的混编,文件的扩展名也就变成了.mm文件。
参考技术A Objective C和Java很不像……两种不同的思路。当年有记者问 Alan Kay 对 Java 的态度,那是批评的一塌糊涂。
Alan Kay是谁?2004年图灵奖,Smalltalk发明人。
那个年代所有的语言都号称自己继承了 Smalltalk 的思想,Java社区也这样宣传过。所以记者才有那么一问。估计 Kay 神也是被问烦了。
当然不一定是Java就真的渣成那样,Bjarne大神曰过,编程语言就两种,一种没人用,一种被人骂。想当年,别说加班加到哭的炮灰程序员了,哪个大神没骂过 Java ?哪个大神没骂过 CPP ?
你看 Objective C 就没人骂,直到它火箭一般的蹿升到最热门的编程语言之一。各种一针见血的,气急败坏的,没品的,高水准的批评就都出来了。
不过,Objective C 确实是最像 Smalltalk 的语言之一,在我用过的语言里,只有 Objective C 和 Ruby 称得上 Smalltalk 的继承者。本回答被提问者采纳
参考技术B 最大的区别在于Objective-C使用消息传递(本质是字符串),因此方法、类和对象可以在运行时确定和修改。Java的方法是与class静态绑定的,虽然可以在运行时用反射的机制获取,但效率会下降1个数量级,只在极端的情况下使用。也就是说,前者更加动态。

Objective-C 和 C++ 的区别有哪些?

Objective-C开发语言是扩充C的面向对象编程语言,iOS开发是用的Objective-C语言,但是最近微软透露Objective C技术,其最新IDE Visual Studio 2015能将Objective-C代码编译运行在Windows 10上。据说,这一技术可以将将Objective-C代码尽可能多的转变成JavaC++代码,挂钩进原生平台的 API。那么同样是“C”Objective-CC++之间有何不同?

  Objective-C,通常写作ObjC和较少用的Objective CObj-C,是扩充C的面向对象编程语言。它主要使用于Mac OS XGNUstep这两个使用OpenStep标准的系统,而在NeXTSTEPOpenStep中它更是基本语言。Objective-C可以在GCC以及Clang运作的系统上编写和编译,因为GCCClangObjective-C的编译器。

  Objective-C是非常实际的语言。它是一个用C写成、很小的运行库,只会令应用程序的尺寸增加很小,和大部分OO系统使用极大的VM执行时间会取代了整个系统的运作相反。

  Objective-C写成的程序通常不会比其原始码大很多。而其函式库(通常没附在软件发行本)亦和Smalltalk系统要使用极大的内存来开启一个窗口的情况相反。

  所以,理论上将,Objective-C它完全兼容标准C语言;相比之下,C++C语言的兼容主要体现在语法上,Objective-C在此基础上增加了面向对象编程语言的特性以及Smalltalk消息机制。

  和C++不同,Objective-C不支持运算子重载。

  和Java相同,Objective-C只容许对象继承一个类别(不设多重继承),这一点也和C++不同。

  Objective-C不支持多重继承,而C++语言支持多重继承。

  Objective-C是动态定型(dynamicaly typed)所以它的类库比C++要容易操作。Objective-C 在运行时可以允许根据字符串名字来访问方法和类,还可以动态连接和添加类。

  在C++里,对象的静态类型决定你是否可以发送消息给它,而对Objective-C来说,由动态类型来决定。

 


以上是关于Objective-C 和 Java 很像,区别在哪儿的主要内容,如果未能解决你的问题,请参考以下文章

Objective-C 和 C++ 的区别有哪些?

objective-c和c++的区别

Objective-C

半深入理解Java属性继承

objective-c与C++的区别

C++和JAVA的区别是啥?