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语句