Java学习笔记 面向对象(上)
第四章 面向对象(上)
1. 类
- 关系:
对象是类的实例,类是对象的模板 - 方法的定义
格式:
[修饰符] 返回值类型 方法名(参数类型,参数1,…){
方法体
}
Tips:类中方法可以进行递归调用public class Fibonacci{ public static int fseq(int n){ if(n<1) return -1; if(n==1||n==2) return 1; else return fseq(n-1)+fsqe(n-2); } public static void main(String args[]){ System.out.prinln(fseq(10)); }
2. 对象
-
创建
FighterPlane(类) fp(对象); //对象声明 fp = new FighterPlane(); //产生对象 或:FighterPlane(类) fp(对象)= new FighterPlane(); //先产生对象再赋予声明,声明被赋予对象之后(即二者合在一起),叫引用 -
对象作为参数的特点
方法中的参数可以作为基本数据类,也可以为对象,基本数据类型是值传递,对象是引用传递(传地址)public class PassPara { private static int a; public static void main(String []args){ modify(a); System.out.println(a); } public static void modify(int a){ a++; } }本代码中modify方法是对形式参数自增,而不是对静态变量a的自增,modify调用完毕后,形式参数也被释放,无法传给静态变量a。
在main()中,a是静态变量,初值为0,因此本程序输出结果为0。class IntClass{ int value; } public class RunIntClass{ public static void modifyValue(IntClass s,int val){ s.value = val; } public static void main(String []args){ IntClass a = new IntClass(); modifyValue(a,8); //s和a指向同一个对象 System.out.println(a.value); } } -
对象数组
设MyClass是自定义类,可以拥有自己的对象数组,对象数组化之后可方便进行对象的遍历,数组整体上可以看作一个对象MyClass[] mc = new MyClass[10]; /*产生一个类型为MyClass,可以容纳10个MyClass对象引用的数组对象, 每一个单元初始值为null ATTENTION:并非产生是个MyClass对象 */给数组对象的每个单元赋值:
for(int i = 0;i < mc.lenth ;i++){ mc[i] = new MyClass(); }一些用法
float f1[],f2[]; //数组声明 f1 = new float[10]; //f1变成对象引用 f2 = f1; //引用赋值 Object o = f1; //也成立,Object是java所有类的祖先lenth属性:获得数组长度
对于一维数组 a.lenth //长度 对于二维数组 a.lenth //行数 a[0].lenth //第0行的列数,若每行的列数相同才为总列数 a[1].lenth //第1行的列数
3. 构造方法与finalize
每当用new创建一个对象并为其开辟空间之后,java自动调用构造方法初始化对象
特点:
- 方法名与类名相同,不能通过对象引用调用(创建对象时自动调用)
- 构造方法前无返回值类型,若有,则不是构造方法
- 若为自定义构造方法,系统将自动添加一个空构造方法(没有参数,没有语句),其修饰符与类前保持一致,即public或默认
ATTENTION:构造方法中,参数名与域变量名一致时要用this区分
public dogs(String name, int weight, int height){
this.name = name;
this.weigth = weight;
this.height = height;
}
而 finalize,类似于c++中的析构函数
4. 非访问修饰符
-
static
-
类的静态属性
可以被类、多个对象引用共同访问
访问方式:" 类名.域名 " -
类的静态方法
属于类,但不属于类的对象,可以被所有对象访问
访问方式:" 对象引用.方法名 " 或 " 类名.方法名 "
ps:main方法是特殊的静态方法(public static void main)
ATTENTION:static方法内部的代码,只能访问类中的static属性或方法,不可以访问非static属性或方法 。非static属性或方法可以访问static属性或方法
- 静态代码块
类被装载时执行且仅执行一次class StaticBlock{ static int value; static{ value= 3; } public static void main (String[] args){ } } //输出结果为3
-
-
final
修饰类属性表示常量,修饰方法为最终方法
ATTENTION:最终方法不可被子类覆盖 -
native
修饰本地方法,用于调用别的语言 -
package
同一个包中的类在引用时不需要import语句