@property、static、协议

一、@property

  @property是一种新的编译器功能,表明了一个新对象的属性,与@synthesize配对使用。在一个类中,如果需要访问该类的实例变量,一般的方法是编译set和get函数,但这样一般比较麻烦,现在使用@property则省去许多麻烦,@property预编译的作用是自动声明属性的setter和getter方法。@synthesize表示创建该属性的访问器,在之后的main()函数中,可以使用点表达式,使我们更加容易地访问对象的属性。

1、在头文件中:

@property int count;

等效于在头文件中声明2个方法:

- (int)count;

-(void)setCount:(int)newCount;

2、实现文件(.m)

@synthesize count;

等效于在实现文件(.m)中实现2个方法。

- (int)count

{

return count;

}

-(void)setCount:(int)newCount

{

count = newCount;

}

 

二、静态变量

1、静态全局变量

  在全局变量前,加上关键字static,该变量就被定义成为一个静态全局变量

 它有一下几个特点:

1)剪子未经初始化的静态全局变量会被自动初始化为0

2)静态全局变量在声明它的整个文件都是可见的,而在文件之外是不可见的;

3)它始终驻留在全局数据区,直到程序运行结束。

2、静态局部变量
(1)static类内部变量同auto自动变量(即未加 Static 声明的局部变量)一样,是某个特定函数的局部变量,即只能在定义该变量的函数内使用该变量,2者作用域相同;两者的不同在于:auto自动变量会随着函数 被调用和退出而存在和消失,而static类局部变量不会,它不管其所在的函数是否被调用,都将一直存在;不过,尽管该变量还继续存在,但不能使用它。倘 若再次调用定义它的函数时,它又可继续使用,而且保存了前次被调用后留下的值。换言之,Static类型的内部变量是一种只能在某个特定函数中使用,但一 直占据存储空间的变量。
(2)静态局部变量的初始化表达式必须是一个常量或者常量表达式。即使局部静态变量定义时没有赋初值,系统会自动赋初值0(对数值型变量)或空字符(对字符变量);静态变量的初始值为0。而对自动变量auto来说,如果不赋初值则它的值将是个不确定的值。

(3)当多次调用一个函数且要求在调用之间保留某些变量的值时,可考虑采用静态局部变量。虽然用全局变量也可以达到上述目的,但全局变量有时会造成意外的副作用,因此仍以采用局部静态变量为宜。

三、协议

1、非正式协议(interface)

非正式协议是NSObject的范畴类,可以认为继承NSObject的类。

2、正式协议

协议不是类本身,它们仅定义了其它对象有责任实现的接口。当在自己的类中实现协议的方法时,用户的类就是遵守这个协议的,协议声明的方法可以被任何一个类实现。

协议的语法结构如下:

  @protocol ProtocolName   //协议名

   methodDeclaration;        //方法名
  @end

如何使用协议

而在类声明时,语法如下:

  @interface ClassName : ParentClassName < ProtocolName>

    然后在该类的实现文件中,实现该协议的方法methodDeclaration

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是Java整合使用1400协议发送Kafka消息的示例代码: ```java import java.util.*; import org.apache.kafka.clients.producer.*; import org.apache.kafka.common.serialization.StringSerializer; public class KafkaProducerExample { public static void main(String[] args) throws Exception{ // 设置kafka的服务器地址和端口号 String bootstrapServers = "localhost:9092"; // 创建kafka生产者的配置 Properties properties = new Properties(); properties.setProperty(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, bootstrapServers); properties.setProperty(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class.getName()); properties.setProperty(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, StringSerializer.class.getName()); // 创建kafka生产者 KafkaProducer<String, String> producer = new KafkaProducer<String, String>(properties); // 设置1400协议的消息头 Map<String, String> headers = new HashMap<String, String>(); headers.put("Content-Type", "application/vnd.kafka.avro.v2+json"); headers.put("Accept", "application/vnd.kafka.v2+json"); headers.put("schema_registry", "http://localhost:8081"); headers.put("schema_id", "1"); headers.put("schema_version", "1"); // 创建kafka消息 ProducerRecord<String, String> record = new ProducerRecord<String, String>("test_topic", "test_key", "test_value", headers); // 发送kafka消息 producer.send(record); // 关闭kafka生产者 producer.close(); } } ``` 需要注意的是,上述代码的消息头部分需要根据实际情况进行修改,其`schema_registry`为使用的Schema Registry地址,`schema_id`为Schema的ID,`schema_version`为Schema的版本号。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值