oc中的self和java中的this还是有区别的:
oc中的self可以用在动态方法也可以用在静态方法,
而java中的this只能用在动态方法中。
例如:
oc中
main.m
- #import <Foundation/Foundation.h>
- #import "student.h"
- int main(int argc, const char * argv[])
- {
- int a;
- student *stu = [student new];
-
- [stu setname:@"lsmseed"];
- NSLog(@"%@",stu->name);
-
- a = [stu getnum];
- NSLog(@"%d",stu->number);
-
- [student print];
-
- printf("Hello, World!\n");
- return 0;
- }
复制代码
student.m
- #import "student.h"
- @implementation student
- - (void) setname:(NSString *)name
- {
- self->name = name;
-
- }
- - (int) getnum
- {
- return self->number;
- }
- + (void) print
- {
- NSLog(@"%@",self);
- }
- @end
复制代码
student.h
- #import <Foundation/Foundation.h>
- @interface student : NSObject
- {
- @public
- int number;
- NSString *name;
- }
- - (void) setname: (NSString *)name;
- - (int) getnum;
- + (void) print;
- @end
复制代码
运行结果:
2014-05-02 19:51:03.434 self[876:303] lsmseed
2014-05-02 19:51:03.438 self[876:303] 0
2014-05-02 19:51:03.439 self[876:303] student
Hello, World!
Program ended with exit code: 0
代码中student这个类定义了三个方法其中动态方法是setname和getnum,静态方法是print,self在这三个方法中体现了不同的作用,首先在动态方法中self指代调用者的对象就是stu,在静态方法中self指代类student这个类名,在不同的方法中意义不同可以同时用在两种方法中。
java中的this
set.java(动态)
- public class student
- {
- int number;
- public void setnum(int number)
- {
- this.number = number;
- }
- public static void main(String[] args)
- {
- student n = new student(100);
- System.out.println("num = %d"+n.setnum);
- }
- }
复制代码
运行结果:
num = 100
set.java(静态)
public class student
{
int number;
public static void setnum(int number)
{
this.number = number;
}
public static void main(String[] args)
{
student n = new student(100);
System.out.println("num = %d"+n.setnum);
}
}
编译出错,这也是一个典型错误,静态只能访问静态。
因此this不能用于静态方法中,而self可以。同时this()这种形式也用于java的一些构造函数中,self没有这样的用法,所以在一些应用中this和self还是有较大区别的。 |