首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Android开发笔记(八十七)几个修饰关键字

其实native只JNI接口中使用,java代码只有原生方法定义,具体实现代码在其他语言(如C/C++)代码文件,有关JNI介绍参见《Android开发笔记(六十九)JNI实战》。...因为不管一个类被实例化多少次,该类静态变量在内存地址是固定,类似于全局变量,每一次实例化对象,使用静态变量仍然是程序初始化那个变量。...使用静态方法有以下几点限制: 1、静态方法只能调用静态方法,不能调用静态方法; 2、静态方法只能使用静态类变量,不能使用静态类变量; 3、静态方法不能使用this和super,即使this...静态代码块 静态代码块,是独立于类成员static语句块,它不在任何方法体内,java加载类时会执行这些静态代码块。...匿名内部类说明参见《Android开发笔记(八十六)几个特殊类》 final变量初始化有三种途径: 1、声明final变量时,就给它赋初始值; 2、构造函数,给final变量赋值

52220
您找到你想要的搜索结果了吗?
是的
没有找到

【Android NDK 开发】JNI 动态注册 ( 动态注册流程 | JNI_OnLoad 方法 | JNINativeMethod 结构体 | GetEnv | RegisterNatives )

动态注册流程 ( 总结 ) ---- 动态注册流程 : ① 声明 Java 层 Native 方法 : Java 类声明 native 方法 ; /** * 动态注册 JNI 方法...JNI_OnLoad 函数原型 : Java 类调用 System.loadLibrary(“native-lib”) 代码时 , 调用 JNI_OnLoad 方法 ; ① jni.h 中有该函数声明...方式进行注册是静态注册 动态注册 : C/C++ 本地方法 与 Java 方法对应起来 , 就需要使用动态注册 动态注册 与 静态注册 : 没有太大区别..., 都可以 C/C++ 本地方法 与 Java 方法对应起来 动态注册流程 : ① 声明 Java 层 Native 方法 ② 准备数据 JNINativeMethod...存储 Java 虚拟机对象 // Java 虚拟机对象记录到全局变量 _vm = vm; //II . 动态注册 //1 .

71820

Android JNI 调用时缓存字段和方法 ID

JNI 去调用 Java 方法和访问字段时,最先要做操作就是获得对应类以及对应方法 id。...当类被加载进内存时,会先调用类静态代码块,所以可以静态代码块中进行缓存。...} private static native void initCacheMethodId(); } 静态代码块,可以所需要字段 id 或者方法 id 缓存成全局变量。...JNI 中直接方法 id 缓存成全局变量了,这样再调用时,就不要再进行一次查找了,并且避免了多个线程同时调用会多次查找情况。...但如果知道的话,初始化时缓存优点较多,既避免了每次使用时检查,还避免了多线程被调用情况。 具体示例代码可参考我 Github 项目,欢迎 Star。

1.1K20

笔记10 | 学习整理静态static 和 终态final

因为不管一个类被实例化多少次,该类静态变量在内存地址是固定,类似于全局变量,每一次实例化对象,使用静态变量仍然是程序初始化那个变量。...使用静态方法有以下几点限制: 1、静态方法只能调用静态方法,不能调用静态方法; 2、静态方法只能使用静态类变量,不能使用静态类变量; 3、静态方法不能使用this和super,即使this...1.4 静态代码块 静态代码块,是独立于类成员static语句块,它不在任何方法体内,java加载类时会执行这些静态代码块。...对基本数据类型变量,可在声明时直接赋值完成初始化;但对容器类变量(如ArrayList、HashMap等等),无法声明时直接赋值,只能通过静态代码块完成初始化; 3、必须在类加载时就要初始化其他方法...匿名内部类说明参见《Android开发笔记(八十六)几个特殊类》 final变量初始化有三种途径: 1、声明final变量时,就给它赋初始值; 2、构造函数,给final变量赋值; 3、

42850

Android NDK 常见面试题

总结: JNI 是实现目的,NDK 是 Android 实现 JNI 手段。 二、谈谈你对 JNIEnv 和 JavaVM 理解 JavaVM JavaVM 是虚拟机 JNI代表。...局部引用只创建它 native 方法中有效,包括其调用其它函数中有效。因此我们不能寄望于一个局部引用直接保存在全局变量中下次使用(请使用全局引用实现该需求)。...五、怎么定位 NDK 问题和错误 一般开发阶段的话,我们可以通过 log 来定位和分析问题。...六、静态注册和动态注册 静态注册: 通过 JNIEXPORT 和 JNICALL 两个宏定义声明,Java + 包名 + 类名 + 方法名 形式函数名。不好地方就是方法名太长了。...七、API 有的变态题目还是会考验你一些 API 运用,比如怎么 JNI 里面调用 Java 方法,怎么 JNI 里面抛异常等等。

94240

C++静态成员变量和静态成员函数小结

静态类成员包括静态数据成员和静态函数成员两部分。 一 静态数据成员: 类体数据成员声明前加上static关键字,该数据成员就成为了该类静态数据成员。...静态数据成员实际上是类域中全局变量。所以,静态数据成员需要在类外定义(初始化),而不应该被放在类声明。 原因是类声明只是描述如果分配内存并不会真正分配内存,而定义是一定要分配内存。...静态成员是“类级别,也就是它和类地位等同,而普通成员是“对象(实例)级别。类级别的成员,先于该类任何对象存在存在,它被该类所有的对象共享。 其定义方式与全局变量相同。...注:不要试图头文件定义(初始化)静态数据成员。大多数情况下,这样做会引起重复定义这样错误。即使加上#ifndef #define #endif或者#pragma once也不行。...★这个特性,我不知道是属于标准c++特性,还是vc6自己特性。 静态数据成员const成员函数可以被合法改变。

1.8K50

C++作用域与生命周期

生命周期则是一个运行时(Runtime)概念,它是指一个变量整个程序从载入到结束运行过程存在时间周期。...C++数据类类型分为基本数据类型和基本数据类型,基本数据类型又分为复合数据类型和构造数据类型。...全局变量: - 作用域:全局作用域(全局变量只需一个源文件定义,就可以作用于所有的源文件); - 生命周期:程序运行期一直存在; - 引用方法:其他文件要使用必须用extern 关键字声明要引用全局变量...四种存储类别说明符有两种存储期:自动存储期和静态存储期。其中auto和register对应自动存储期。具有自动存储期变量进入声明该变量程序块是被建立,它在该程序块活动时存在,退出该程序块时撤销。...2.static使用建议 (1)若全局变量仅在单个C文件访问,则可以这个变量修改为静态全局变量,以降低模块间耦合度; (2)若全局变量仅由单个函数访问,则可以这个变量改为该函数静态局部变量

1.1K20

C++作用域与生命周期

C++数据类型分为基本数据类型和基本数据类型,基本数据类型又分为复合数据类型和构造数据类型。...全局变量: 作用域:全局作用域(全局变量只需一个源文件定义,就可以作用于所有的源文件); 生命周期:程序运行期一直存在; 引用方法:其他文件要使用必须用extern 关键字声明要引用全局变量。...: 作用域:文件作用域(只在被定义文件可见); 生命周期:程序运行期一直存在; 内存分布:全局/静态存储区; 定义方法:static关键字,const 关键字; 注意:只要文件不互相包含,两个不同文件是可以定义完全相同两个静态变量...其中auto和register对应自动存储期,被修饰变量进入声明该变量程序块时被建立,它在该程序块活动时存在,退出该程序块时撤销。静态存储期变量从程序载入运行到程序结束一直存在。...5.2static使用建议 (1)若全局变量仅在单个C文件访问,则可以这个变量修改为静态全局变量,以降低模块间耦合度; (2)若全局变量仅由单个函数访问,则可以这个变量改为该函数静态局部变量

88232

CCPPstatic用法:全局变量与局部变量

C++static内部实现机制:静态数据成员要在程序一开始运行时就必须存在。因为函数程序运行中被调用,所以静态数据成员不能在任何函数内分配空间和初始化。...静态数据成员要实际地分配空间,故不能在类声明定义(只能声明数据成员)。类声明声明一个类“尺寸和规格”,并不进行实际内存分配,所以声明写成定义是错误。...(4)全局变量和全局静态变量区别 1)全局变量是不显式用static修饰全局变量全局变量默认是有外部链接性,作用域是整个工程,一个文件内定义全局变量另一个文件,通过extern 全局变量声明...因为静态成员属于类本身,对象产生之前就已经存在了,所以静态成员函数是可以调用静态成员。...因为静态成员属于类本身,对象产生之前就已经存在了,所以静态成员函数是可以调用静态成员。 三。

1.4K20

SDK接口自动化检测工具--veridex

SDK接口指的是Android官方开发文档声明方法,即文档地址 中所能查询到API,除了这些,其他API都是非SDK接口 官网:针对 SDK 接口限制 SDK接口分类 随着每个 Android...为最大程度地降低 SDK 使用限制对开发工作流影响,我们 SDK 接口分成了几个名单,这些名单界定了 SDK 接口使用限制严格程度(取决于应用目标 API 级别)。...这些名单会以应用无法再访问该名单 SDK 接口之前可以作为目标平台最高 API 级别 (max-target-x) 进行标记。...下载地址 需科学上网 您还可以 APK 上运行静态分析工具 veridex。...veridex 工具会扫描 APK 整个代码库(包括所有第三方库),并报告发现所有使用 SDK 接口行为。 veridex 工具存在以下局限性: 它无法检测到通过 JNI 实现调用。

1.1K20

「音视频直播技术」JNI编程常见问题

JNI_OnLoad函数里,注册所有Native方法。你应该用"static"声明方法 ,这样名子设备符号表里不占空间。...原始数组 JNI提供了访问数组对象内容功能,虽然对象数组必须一次访问一个条目,但是可以直接读取和写入原始数组,就像它们C中被声明一样。...jmethodIDs:进行调用时,使用错误jmethodID方法做JNI调用:不正确返回类型,静态/静态不匹配,错误类型为'this'(静态调用)或错误类(用于静态调用)。...其它情况是说库存在,但不能由 dlopen 打开。失败具体信息异常信息可以找到。 您可能遇到“库未找到”异常常见原因: 库不存在或应用程序无法访问。...如果您应用程序代码正在加载库,FindClass将使用正确类加载器。 实例传递到需要它函数,通过声明本地方法来接受Class参数,然后传递Foo.class。

1.5K20

JNI开发,你需要知道一些建议

JNIEnv和JavaVMC声明是不同于C++声明。头文件“jni.h”根据它是以C还是以C++模式包含来提供不同类型定义(typedefs,取别名)。...因为每个进程当中JavaVM是存在限制,存储这些数据到Native静态数据结构是非常合理。...jmethodIDs:当调用Call*Method函数时时使用了类型错误jmethodID:不正确返回值,静态/静态不匹配,this类型错误(对于静态调用)或者错误类(对于静态类调用)。...Native代码较好做法是: 一个静态类初始化时调用System.loadLibrary(见之前一个例子,当中就使用了nativeClassInit)。...应该声明方法为“静态(static)”因此名称不会占据设备上符号表空间。

1.3K30

Java全局变量(成员变量)和局部变量区别

static修饰变量:静态变量 static修饰方法:静态方法 二.变量分类: 2.1变量根据声明位置进行划分: 方法体声明变量叫做:局部变量。...其中成员变量又可以分为: 实例变量 静态变量 2.2、静态变量: 1:静态变量(又称类变量):由static修饰,JVM静态变量加载顺序在对象之前,因此静态变量不依附于对象存在,可以不实例化类情况下直接使用静态变量...三、全局变量和局部变量区别如下: 1,作用域不同:全局变量作用域为整个程序,而局部变量作用域为当前函数或循环等 2,内存存储方式不同:全局变量存储全局数据区,局部变量存储栈区 3,生命期不同...:全局变量生命期和主程序一样,随程序销毁而销毁,局部变量函数内部或循环内部,随函数退出或循环退出就不存在了 4,使用方式不同:全局变量声明后程序各个部分都可以用到,但是局部变量只能在局部使用...如果这个类型所有对象某个属性值都是一样,不建议定义为实例变量,浪费内存空间。 建议定义为类级别特征,定义为静态变量,方法区只保留一份,节省内存开销。 一个对象一份是实例变量。

1.1K10

Android JNI学习(四)——JNI常用方法中文API

自从Java 2 release 1.2,Java安全模型允许系统类加载跟调用本地方法。FindClass定义与当前本地方法关联类加载,也就是声明本地方法类加载类。...调用Java对象某个静态方法,它们不同点在于传参不同。...接口指针 clazz:Java类 methodID:静态方法ID 返回: 返回静态Java方法调用方法 异常: Java方法执行抛出异常 七、字符串操作 (一)、创建一个字符串 jstring...如果isCopy为空,则在复制完成后isCopy设为JNI_TRUE。如果没有复制,则设为JNI_FALSE。...调用相应ReleaseArrayElements()函数前一直有效。由于返回数组可能是Java数组副本,因此,对返回数组变更没有基本类型反应出来。

3K20

C# static

static 成员保存在 CLR (Common Language Runtime) 静态内存,而非堆或栈。...static C# 充当了全局变量角色,并且提供了一种控制变量生命周期和访问权限方式。...以下是一些关于高频段重要说明: 生命周期:由于静态字段共享整个应用程序实例,并且它们生命周期与应用程序运行周期相同,因此这部分内存在应用程序启动时就被分配,并且应用程序关闭时释放。...每种情况下 static 含义略有不同: 静态变量 (static variables): 当我们变量声明静态时,无论创建多少个类实例,都只会有一个静态变量副本。所有的实例都共享该静态变量。...控制实例数目: 通过构造函数声明为 static,可以防止类被实例化,从而控制类实例数量。

19020

c语言全局变量和局部变量问题汇总

这两者差别虽在于静态全局变量作用域是整个源程序,当一个源程序由多个源文件组成时,静态全局变量各个源文件里都是有效。.... 5、程序局部变量存在于(堆栈)全局变量存在于(静态区 ),动态申请数据存在于( 堆)。...静态局部变量 它与局部变量差别在于: 函数退出时, 这个变量始终存在, 但不能被其他函数使用, 当再次进入该函数时, 保存上次结果。其他与局部变量一样。 2....这两者差别虽在于静态全局变量作用域是整个源程序,当一个源程序由多个源文件组成时,静态全局变量各个源文件里都是有效。...在过程内部用 Static keyword声明一个或多个变量,其使用方法和 Dim 语句全然一样:   Static Depth   比如,以下函数存储静态变量 Accumulate 曾经运营总值与一个新值相加

80020

Android开发笔记(七十五)内存泄漏处理

C/C++存在指针概念,程序需要使用指针变量时,就从内存开辟一块区域,并把该区域首地址赋值给一个指针,这样程序才可操作该指针指向内存区域。...情况之一是调用了java接口,比如调用了jni接口,jniC/C++内存就要手工回收;情况之二是调用了外部服务,使用完毕就得手工通知外部服务去回收;情况之三是异步处理,实时内存回收显然顾不上异步处理任务...检查app是否发生内存泄漏,有三个办法: 1、代码定期检查当前进程占用内存大小。...jni介绍参见《Android开发笔记(六十九)JNI实战》。 实测发现,即使recycle也存在内存泄漏,只是没recycle的话泄露有十倍。...3、把Handler对象作为APP全局变量,比如把Handler对象放入Application声明,这样只要app在运行,Handler对象一直都存在

1K20

static用法详解

: 该变量全局数据区分配内存; 未经初始化静态全局变量会被程序自动初始化为0( 函数体内声明自动变量值是随机,除非它被显式初始化,而在函数体外被声明自动变量也会被初始化为0); 静态全局变量声明整个文件都是可见...注意:全局变量和全局静态变量区别   1)全局变量是不显式用static修饰全局变量,但全局变量默认是动态,作用域是整个工程,一个文件内定义全局变量另一个文件,通过extern 全局变量声明...静态局部变量正好可以解决这个问题。静态局部变量保存在全局数据区,而不是保存在,每次值保持到下一次调用,直到下次赋新值。...第二,一旦利息需要改变时,只要改变一次, 则所有存款类对象利息全改变过来了; 同全局变量相比,使用静态数据成员有两个优势: 静态数据成员没有进入程序全局名字空间,因此不存在与程序其它全局名字冲突可能性...静态数据成员要实际地分配空间,故不能在类声明定义(只能声明数据成员)。类声明声明一个类“尺寸和规格”,并不进行实际内存分配,所以声明写成定义是错误

1.1K90

iOS基础:全局变量·静态变量·局部变量·自动变量(static、extern、全局静态区、堆区、栈区)

全局变量存在内存全局存储区,占用静态存储单元;局部变量保存在,只有在所在函数被调用时才动态地为变量分配存储单元。...全局变量 1.1 全局变量 函数外面声明 可以跨文件访问 可以声明时赋上初始值 如果没有赋初始值,系统自动赋值为0 存储位置:既非堆,也栈,而是专门【全局(静态)存储区static】!...我们A.m文件声明和定义全局lastNum时,同时A.h文件做extern float lastNum;这样声明。...静态变量 函数外面 或 内部声明(即可修饰原全局变量亦可修饰原局部变量) 仅声明该变量文件可以访问 可以声明时赋上初始值 如果没有赋初始值,系统自动赋值为0 存储位置:既非堆,也栈,而是专门【全局...局部变量(自动变量) 函数内部声明 仅当函数执行时存在 仅在本文件本函数内可访问 存储位置:自动保存在函数每次执行【栈帧】,并随着函数结束后自动释放,另外,函数每次执行则保存在【栈】 - (float

3.4K50
领券