第一课 Java基础
1. ubuntu上环境搭建 (建议使用我们提供的VMWare映象文件)
如果要自己安装ubuntu, 请参考<韦东山Android系统视频使用手册.pdf>
ubuntu 12.04.5 这是一个长期支持的版本
硬盘空间至少预留80G
a. root分区 : 20G, 从其中划出6G用作swap
b. work分区 : 60G
c. 内存 : 4G
安装Java开发环境
sudo apt-get update
sudo apt-get install openjdk-7-jdk
sudo apt-get install openjdk-7-jre
2. 第1个JAVA程序 (和C对比)
编译的方法:javac Hello.java
运行的方法:java hello
3. JAVA数据类型
基本数据类型:boolean, byte, char(2字节), short, int, long, float, double
引用数据类型:数组、类对象、接口(引用数据类型指的是变量所指向的数据在堆中,比如:int p2[] = {1,2,4},数据1,2,4在堆中,p2在栈上,其值是堆的地址),引用和C语言中的指针比较类似
引用数据类型使用new来分配,不需要自己释放,把变量设为null即可
栈内存、堆内存
数据类型转换(自动转换(发生的前提是数据转换后不会丢失), 强制转换)
short s=1;s=s+1会出错,因为对于byte,short的运算,为了保证精度,会自动转换为int,其不能直接赋给short类型,改为s=(short)(s+1)
sourceinsight编写的文件是以ascii码编译的,java编译器是以UTF-8来解析字符的,所以如果文件中存在汉字,会存在无法解析的情况,所以需要使用UE把该文件转换成UTF-8格式
4. 语句:跟C完全一样
5. 方法(函数)
6. 方法重载、参数传递
重载指的是函数名相同,参数类型或者参数个数不同,返回值类型的不同不是重载
int p[] = new int[1];p[0]=123;fun2(p);这个时候p[0]的值会改变(public static void fun2(int[] p){p[0]=100})
第二课 面向对象程序设计
1. 类的引入
C语言是面向过程的
出一道题:写一个程序,输出张三、李四两个人的姓名
定义一个类(class A),实例化这个变量(A a),a就是个对象
构造函数格式:public 类名称(类型 参数......)//其没有返回值,可以有多个构造方法
{
语句;
}
static修饰的类方法属于类,通过“类名.方法”来调用
在类中通过一个大括号”{}”括起来的就是构造块,通过构造块扩起来的代码在任何构造函数被调用之前会被调用执行
大括号“{}”之前加上一个static修饰就是静态代码块,实例化第一个对象之前执行,并且只执行一次,在执行构造块和构造方法,再之后实例化都不会再次执行静态代码块。
类中的main函数通过static修饰是为了让虚拟机不用实例化对象就能执行main函数
2. 封装性
private修饰的变量和方法只能被类的内部方法所访问,不能被外部所访问
private本类可访问;default本包可访问;protected本包、其他包的之类可访问;public所有都可访问
3. 继承性
实例化子类对象时,先调用父类的构造方法,再调用子类的构造方法(如果子类构造函数中没有super等语句,在子类的构造函数中第一行默认会添加一句super();表示调用父类的默认无参构造函数);
如果父类有个构造方法是“类名(参数1)”,则在子类构造方法中第一句加上“super(参数1)”,在实例化一个对象时会先调用父类的构造方法“类名(参数1)”
final类不能有子类;final方法不能被覆写;final变量变成常量,不能被修改
继承的限制:1、父类的private修饰属性和方法不能被之类继承,对应私有属性,如果有公开的方法获得私有属性,子类可以调用该方法
2、子类覆写的方法不能缩小权限,比如父类的public方法a,子类也只能覆写为public;
在class前加上abstract修饰的类是抽象类,其类内部除了有属性、普通方法外还有抽象方法()在方法的访问权限和返回值之间加上abstract修饰的方法),抽象方法仅需要声明,不需要实现;
抽象类不能实例化对象,子类必须覆写全部抽象方法;
接口:interface 接口名称{全局常量;抽象方法}
接口和抽象类相似,其模板作用,子类可以继承多个接口,子类必须覆写全部抽象方法
(子类只能extends继承一个父类)
class A extends D implements B,C{}//B和C是接口,D是普通类火灾抽象类
4. 多态性
5. 异常
参考文章:
深入理解java异常处理机制
http://blog.csdn.net/hguisu/article/details/6155636
6. 包和权限
javac A.java // 将在当前目录下生成A.class
能否把这些class文件存放于其他目录呢?
jar -cvf my.jar a // 把包a创建为压缩文件my.jar
export CLASSPATH=.:my.jar
7. 内部类
第三课 JNI (Java Native Interface)
1. JAVA调用C
Linux是用C语言写的,可以写一个APP简单调用open,read,write来访问驱动程序;
Android是用Java写的,Java怎么访问C函数?
jni.pdf P117
Android JNI知识简介
http://blog.csdn.net/linweig/article/details/5417319
Android JNI(实现自己的JNI_OnLoad函数)
http://jjf19850615.blog.163.com/blog/static/356881472013342153912/
查看"JNI field descriptors" (JNI字段描述符)
javap -s -p Var.class
JNINativeMethod的参数解析
http://carywei.iteye.com/blog/1075647
http://cs.fit.edu/~ryan/java/language/jni.html
http://blog.csdn.net/conowen/article/details/7524744
2. C调用JAVA
jni.pdf P97
http://blog.csdn.net/lhzjj/article/details/26470999
4步骤:
a. 创建虚拟机
b. 获得class
c. 实例化对象 : 获得构造方法(方法名为"<init>"), 构造参数, 调用方法
d. 调用方法 : 又分为获得方法, 构造参数, 调用方法
读取/设置类中的属性:
a. 获得属性ID
b. 读取/设置
第四课 JAVA高级应用
1. 泛型(Generics)
2. 反射(Reflect)
原文地址:https://www.cnblogs.com/liusiluandzhangkun/p/9102970.html