成员变量

Java反射基础

末鹿安然 提交于 2020-01-04 06:57:29
Java反射机制定义   Java反射机制是指在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。 用一句话总结就是反射可以实现在运行时可以知道任意一个类的属性和方法。 反射机制的优点与缺点 为什么要用反射机制?直接创建对象不就可以了吗,这就涉及到了动态与静态的概念 静态编译:在编译时确定类型,绑定对象,即通过。 动态编译:运行时确定类型,绑定对象。动态编译最大限度发挥了java的灵活性,体现了多态的应用,有以降低类之间的藕合性。 优点 可以实现动态创建对象和编译,体现出很大的灵活性,特别是在J2EE的开发中它的灵活性就表现的十分明显。比如,一个大型的软件,不可能一次就把把它设计的很完美,当这个程序编译后,发布了,当发现需要更新某些功能时,我们不可能要用户把以前的卸载,再重新安装新的版本,假如这样的话,这个软件肯定是没有多少人用的。采用静态的话,需要把整个程序重新编译一次才可以实现功能的更新,而采用反射机制的话,它就可以不用卸载,只需要在运行时才动态的创建和编译,就可以实现该功能。 缺点 对性能有影响。使用反射基本上是一种解释操作,我们可以告诉JVM,我们希望做什么并且它满足我们的要求。这类操作总是慢于只直接执行相同的操作。

OC基础--关键字@property 和 @synthesize

不打扰是莪最后的温柔 提交于 2020-01-02 00:44:10
一、@property关键字需要掌握的知识: 1.用在@interface中,用来自动生成setter和getter的声明 例:@property int age;--相当于执行了右边的代码-->-(void) setAge:(int) age;  -(int) age; 二、@synthesize关键字需要掌握的知识: 1.用在@implementation中,用来自动生成setter和getter的实现 例:@synthesize age = _age; 2.注意:在  @synthesize age = _age;  中如果没有指定成员变量名,实现中默认访问的就是同名的成员变量 例: @synthesize age;//默认访问的就是age成员变量,而不是_age成员变量 如果age这个成员变量不存在,程序会在@implementation中自动生成一个私有的age变量 同理,如果指定的成员变量也不存在,程序也会在@implementation中自动生成一个私有的跟指定变量同名的成员变量 三、Xcode版本注意事项: 1.Xcode 4.4前:关键字@property 只是自动生成set方法和get方法的声明 2.Xcode 4.4后:关键字@property 将会自动生成set方法和get方法的声明和实现、增加一个_开头的成员变量 四、代码实例: #import

Objective-C语言-点语法和变量作用域-@property @synthesize和id

跟風遠走 提交于 2020-01-02 00:43:47
一、点语法 (一)认识点语法 声明一个Person类: #import <Foundation/Foundation.h> @interface Person : NSObject { int _age;//默认为@protected } - (void)setAge:(int)age; - (int)age; @end View Code     Person类的实现: #import "Person.h" @implementation Person - (void)setAge:(int)age { _age = age;// 不能写成self.age = newAge,相当与 [self setAge:newAge]; } - (int)age //get方法 { return _age; } @end View Code 点语法的使用: #import <Foundation/Foundation.h> #import "Person.h" int main(int argc, const char * argv[]) { @autoreleasepool { // insert code here... Person *person = [[Person alloc] init]; //[person setAge:10]; person.age = 10;//点语法

ios中点语法、property跟synthesize用法

拈花ヽ惹草 提交于 2020-01-02 00:43:18
一:OC中得点语法 1> 点语法的基本使用: ·使用 对象.成员变量 可以实现设置成员变量值,和获取成员变量的值 2> 点语法的本质 (点语法是Xcode编译器自己帮我们完成的一个功能) 实际上点语法就是set和get方法,当编译遇到点语法时,编译器就会将点语法转成set和get方法。 注意:也就是说,如果类中没有实现set和get方法,那么就不会有点语法 p.name = @“”; 实际上就是 [p setName:@“”]; 在OC中访问成员变量只有一种方式即使用-> 如stu->age,这种情况要求在@public的前提下。 3> 点语法的注意点 下面的使用方式是一个死循环: (1)在set方法中,self.age=age;相当于是[self setAge:age]; (2)在get方法中,return self.age;相当于是[self age]; 也就是说,在set和get方法中不能使用(self点成员变量)造成死循环 当然了如果访问成员变量的话可以使用_成员变量。 例子: - (void)setAge:(int)age { _age = age;// 不能写成self.age = newAge,相当与 [self setAge:newAge]; } self.age = age (错误,死循环) } 二:property和synthesize关键字的使用 注意

OC语言@property @synthesize和id

左心房为你撑大大i 提交于 2020-01-02 00:42:13
文顶顶 OC语言@property @synthesize和id OC语言@property @synthesize和id 一、@property @synthesize关键字 注意:这两个关键字是编译器特性,让xcode可以自动生成getter和setter的声明和实现。 (一)@property 关键字 @property 关键字可以自动生成某个成员变量的setter和getter方法的声明 @property int age; 编译时遇到这一行,则自动扩展成下面两句: - (void)setAge:(int)age; - (int)age; (二)@synthesize关键字 @synthesize关键字帮助生成成员变量的setter和getter方法的实现。 语法:@synthesize age=_age; 相当于下面的代码: - (void)setAge:(int)age { _age=age; } - (int)age { Return _age; } (三)关键字的使用和使用注意 类的声明部分: 类的实现部分: 测试程序: 新版本中: 类的声明部分: 类的实现部分: 测试程序: (1)在老式的代码中,@property只能写在@interface @end中,@synthesize只能写在@implementation @end中,自从xcode 4.4后,

@property 和@synthesize

故事扮演 提交于 2020-01-02 00:41:02
xcode4.4之后,@property包括了@synthesize的功能。 这是编译器的升级。 @property有几个作用:1)默认生成一个私有成员变量,并有一个带下划线的别名如_age 2)生成默认get和set方法声明 3)生成get和set方法实现 因为默认是私有成员变量,要在子类中直接訪问有例如以下几种方法:1)在superclass 的.h文件里定义成员变量。默认是protected。subclass能够调用 2)subclass 中@synthesize 给私有成员变量一个别名,如 @synthesize age=_age;即能够在subclass中直接调用_age. 来源: https://www.cnblogs.com/yjbjingcha/p/6973027.html

第7章继承

旧城冷巷雨未停 提交于 2020-01-01 22:12:07
第7章继承 理解继承的基础知识、调用超类构造函数、使用super访问超类成员、创建多级类层次结构、了解何时调用构造函数、理解子类对象的超类引用、重写方法、使用重写方法实现动态方法分配、使用抽象类、使用final、了解Object类 继承的基础知识 Java不支持一个子类继承多个超类。但是,可以创建类的继承层次结构,其中的一个子类可以称为另一个子类的超类。 构造函数与继承 什么样的构造函数负责创建子类对象呢? 是超类构造函数还是子类构造函数? 超类的构造函数构造超类部分,子类的构造函数构造对象的子类部分。 因为超类并不知道或无权访问子类的任何元素。 当子类和超类都定义构造函数时,这种情况下的两个构造函数都要执行。这种情况下可以使用另外一个关键字。super super的两种用法:第一种调用超类的构造函数,第二种用于访问被子类成员隐藏的超类成员。 使用super调用超类构造函数 super()必须是在子类中执行的第一条语句。 class A1 { private int a ; A1 ( ) { a = 0 ; } A1 ( int aa ) { a = aa ; } public int getA1 ( ) { return a ; } public void setA1 ( int a1 ) { a = a1 ; } } class B1 extends A1 { private

单继承、多继承、菱形继承的虚函数表

自古美人都是妖i 提交于 2020-01-01 13:06:49
文章目录 前言 问题 测试环境 开始测试 无虚函数简单类结构 包含虚函数的类结构 单继承 多继承 菱形继承 虚继承 总结 前言 最近被问到一个关于多继承虚函数表的问题,当时回答是可能存在多个虚函数表,应该是顺序排列的,但具体怎么排列还是有些疑惑的,回答的时候到有点儿心虚。之后查了资料,做了简单的实验,可以确定的是对于继承了多个含有虚函数基类的子类来说,指向虚函数表的指针应该不止一个。 问题 虚函数表的问题是从C++多态的概念引出的,要想实现多态有3个条件: 存在继承:没有继承就没有多态(运行时),在多态中必须存在有继承关系的父类和子类。 重写函数:父类中需要定义带有 virtual 关键字的函数,而在子类中重写一个名字和参数与父类中定义完全相同的函数。 向上转型:将父类的指针和引用指向子类的对象。 满足以上三个条件,当使用父类的指针调用带有 virtual 关键字的函数时,就会产生多态行为。 实现这种多态表现的核心内容就是虚函数表,对于带有 virtual 关键字的函数地址会被放入一个表格,而在类中会有一个指向虚函数表的指针指向这个表格,表明这个表格属于类的一部分。 对于父类来说,这个表格中都是自己类的虚函数,而对于子类来说,首先这个虚函数表包含父类中所有的虚函数,当子类重写某个虚函数时就会用子类重写后的函数地址替换原来父类中定义的函数地址

面向对象-成员

不打扰是莪最后的温柔 提交于 2020-01-01 04:48:57
一. 类的成员: 成员: 在类中定义的变量和方法都被成为成员二. 类的成员-变量 在类中, 变量分为两大类: 1. 实例变量(字段column) 每一个实例都应该拥有的变量, 给对象用的 2. 类变量(静态变量): 直接写在类中的, 共享出去的, 一类事物统一拥有的变量, 规范用类名来访问三. 类的成员-方法 1. 成员方法(实例方法): 加了self的, 调用的时候, 必须用对象去访问. 2. 类方法: 当方法需要传递类名的时候, 需要类方法. 规范规则: 在上方加@classmethod 3. 静态方法: 当方法不需要传递当前类的对象的时候. 语法规则: 在方法上面加@staticmethod四. 类的成员-属性 通过方法改造过来的一种变量的写法. 在方法上添加一个@property. 注意: 1. @property有 改变一个方法称为属性 2. 这个方法只能有一个参数, self 3. 必须有返回值五. 私有 只能在自己类中访问 __方法 __变量 __类变量 都是私有的, 别人访问不到, 包括子类 来源: https://www.cnblogs.com/KX-Lau/p/9709889.html

day 17 成员

耗尽温柔 提交于 2020-01-01 04:48:39
1.成员 在类中你能写的所有内容都是类的成员 2.变量 1. 实例变量:昨天写的就是实力变量,由对象去访问的变量 2. 类变量: 这个变量属于类.但是对象也可以访问 实例变量 class Person: def __init__(self, name, id, gender, birth): self.name = name # 实例变量 对象里的变量 self.id = id self.gender = gender self.birth = birth p = Person("wusir", "10086", "不详", "1900-12-15") print(p.birth) p.birth = "1840-5-6" print(p.birth) # 实例变量一般使用 对象.属性 print(p.name) 类变量 class Person: country = "大清" def __init__(self, name, gender): self.name = name self.gender = gender p = Person("武sir", "未知") p2 = Person("太白", "两性") Person.country = "中国" # 类变量最好是使用类名来访问 # p.country = "大清" # 大坑::没有修改类变量 # p2.country