跳到主要内容

java 面向对象——类与对象的概念和使用

· 阅读需 2 分钟
Gwynn
独立开发者 · wawov 作者

方法

方法就是一段可重复调用的代码段

方法重载

方法的重载:方法名称相同,但是参数的类型和个数不同,通过传递参数的个数和类型不同来完成不同的功能。

方法重写

父类与子类之间的多态性,对父类的函数进行重新定义。如果子类中定义某方法与其父类有相同的名称和参数,我们说这个方法被重写,方法重写又称方法覆盖。

方法递归

一种特殊的调用形式,就是方法自己调用自己。

public static int add(int num){
if(num == 1){
return 1;
}else{
return num+add(num-1);
}
}

Android基础

· 阅读需 2 分钟
Gwynn
独立开发者 · wawov 作者

ThreadLocal

ThreadLocal是如何做到为每一个线程维护变量的副本的呢?其实实现的思路很简单:在ThreadLocal类中有一个Map,用于存储每一个线程的变量副本,Map中元素的键为线程对象,而值对应线程的变量副本。

AndroidManifest解析

· 阅读需 6 分钟
Gwynn
独立开发者 · wawov 作者

关于AndroidManifest.xml

AndroidManifest.xml 是每个android程序中必须的文件。它位于整个项目的根目录,描述了package中暴露的组件(activities, services, 等等),他们各自的实现类,各种能被处理的数据和启动位置。 除了能声明程序中的Activities, ContentProviders, Services, 和Intent Receivers,还能指定permissions和instrumentation。

各个节点的详细介绍

(<manifest>)属性
<manifest  xmlns:android="http://schemas.android.com/apk/res/android"
package="com.woody.test"
android:sharedUserId="string"
android:sharedUserLabel="string resource"
android:versionCode="integer"
android:versionName="string"
android:installLocation=["auto" | "internalOnly | preferExternal"] >
</manifest>
  • sharedUserId,表明数据权限,因为默认情况下,Android给每个APK分配一个唯一的UserID,所以是默认禁止不同APK访问共享数据的。若要共享数据,第一可以采用Share Preference方法,第二种就可以采用sharedUserId了,将不同APK的sharedUserId都设为一样,则这些APK之间就可以互相共享数据了
  • sharedUserLabel,一个共享的用户名,它只有在设置了sharedUserId属性的前提下才会有意义
  • versionCode,给设备程序识别版本(升级)用的必须是一个interger值代表app更新过多少次
  • versionName,这个名称是给用户看的,你可以将你的APP版本号设置为1.1版
  • installLocation,安装参数,是Android2.2中的一个新特性,installLocation有三个值可以选择:internalOnly、auto、preferExternal。
    • preferExternal,系统会优先考虑将APK安装到SD卡上(当然最终用户可以选择为内部ROM存储上,如果SD存储已满,也会安装到内部存储上)
    • auto,系统将会根据存储空间自己去适应
    • internalOnly,是指必须安装到内部才能运行

july-class-01(字符和字符串)

· 阅读需 4 分钟
Gwynn
独立开发者 · wawov 作者

Huffman编码

Huffman编码是一种无损压缩编码方案。

思想:根据源字符出现的概率对字符编码,概率高的字符使用较短的编码,概率低的使用较长的编码,从而使得编码后的字符串长度期望最小。

Huffman编码是一种贪心算法:每次总选择两个最小概率的字符节点合并

移除空格算法

时间复杂度O(n),空间复杂度O(1)


#include <iostream>
#include <stdio.h>
using namespace std;


void RemoveBlank(char* pString){
int j = 0;
for(int i= 0;pString[i]!='\0';i++){
if(pString[i] != ' '){
if(i != j){
pString[j] = pString[i];
}
j++;
}
}
pString[j] = 0;
}

int main(){
char str [] = "I have Dream o";
RemoveBlank(str);
cout<<str<<endl;
return 0;
}

找大数

#include <iostream>
#include <stdio.h>
using namespace std;
void FindMax(const int* a, int size,int& nMax,int& nSecondMax){
for(int i = 0;i<size;i++){
if(nMax < a[i]){
nSecondMax = nMax;
nMax = a[i];
}else if(nSecondMax < a[i]){
nSecondMax = a[i];
}
}
}

int main(){
int a [] = {1,5,4,8,3,2,9,14};
int nMax=0;
int nSecondMax = 0;
FindMax(a,sizeof(a)/sizeof(int),nMax,nSecondMax);
printf("max=%d,secondMax = %d\n",nMax,nSecondMax);
return 0;
}

NDK入门

· 阅读需 6 分钟
Gwynn
独立开发者 · wawov 作者

JNI中C与java类型对应表

字符Java类型C类型
Vvoidvoid
Zjbooleanboolean
Ijintint
Jjlonglong
Djdoubledouble
Fjfloatfloat
Bjbytebyte
Cjcharchar
Sjshortshort
数组则以"["开始,用两个字符表示
[IjintArrayint[]
[FjfloatArrayfloat[]
[BjbyteArraybyte[]
[CjcharArraychar[]
[SjshortArrayshort[]
[DjdoubleArraydouble[]
[JjlongArraylong[]
[ZjbooleanArrayboolean[]

开始编写jni

当java调用,

static {
System.loadLibrary("hello");
}

jni会尝试去寻找JNI_OnLoad方法,所以一些初始化的东西就可以在这里面实现。