oo介绍 类的抽象 构造函数 常量 static变量详解

1、OOP(object Orient Program)

  抽象:将很多对象的共性特征,提取出来,将多种对象分类管理

  具象:确定某个游戏或某个事情由谁来做

2、什么是类,什么是对象?

  类:即客观世界的一些基本特征的抽象化

  对象:一切皆对象

  如何从现实世界抽象出类?

    a 给具有共性特征的物体分类   b、 找出他的属性  c找出他的行为

  抽象的过程和方法:a、从语言描述中,提取名词性概念(需求分析,提取概念模型)

           b、将名词抽象成相应的class或属性   共性的提取出来  非共性的放在此类中

           c、提取动词(转化为类的行为或方法)

3、构造函数(方法)

  为什么需要构造函数,作用是什么?

    给成员变量进行初始化、简化我们为类字段赋值的代码

    (如果没有进行构造函数初始化成员变量,系统会给其赋默认值,如引用的赋值为null 、double为0.0

      若在成员变量的后边直接赋值 则跟上述说法一样  用户给class的属性设置了默认值)

     例  public class Dog{ 

          public double age;
             public Dog(){
                  this.age=11;
               }}

  构造函数的特点:

    1、构造方法名一定与类同名  2、无返回值类型(void 也不行)
      3、可以没有构造方法(默认一个无参构造方法)也可以有多个构造方法,他们之间构成重载关系(同名不同参)
        4、如果定义有参构造函数,则无参构造函数将被自动屏蔽(如果需要则自己在写一个无参构造方法)
            5、构造方法不能被继承
            6、构造方法不能手动调用,在创建类实例的时候自动调用构造方法

  默认值:一般较为共性的东西才在成员变量后直接赋默认值  例狗的健康值  

      在成员变量处赋值和在构造函数处赋值均为设置默认值 

  如何确定构造函数的参数?

      创建对象,需要的必要的属性值,通过构造函数的参数传入

      (通过参数进行传递则在new的时候需要进行赋值)

  成员变量赋初值

    ****

    new之后就创建了一个对象(分配了内存空间)  若有参的话 则在new的同时传递参数,因为new完对象需要一个返回值返回给当前对象的一个变量  参数就是构造函数中      的,因此通过new以及构造函数能够将你所赋的值传给类中的成员变量 所以叫做给成员变量赋初值 在调用类属性的时候    此属性就有了值而不在是系统或人为给的默认值

    (即有参构造时 在域内 需要用this接收一下例this.name = name;

        左边的那个name即类属性(成员变量)  他有内存区 等待着赋值 ,右边值即在对象中传递过来的参数值
      若构造函数中不用this进行接收  则依然为系统设的默认值)

    参数的name 在方法内需要使用时作为局部变量
        例public Dog(String name){
         this.name=name;}
        真正赋值   new完后 用其变量调用 此时就可以修改其值 替换掉默认值

4、局部变量和成员变量的生命期和作用域

  局部变量:1. 通过参数传入
                2. 在方法内定义
                   局部变量的作用域: 定义该变量所在的{  }
                 局部变量的生命期:
                    基本类型,超出局部变量定义的{},就会被标识为无效,然后等待GC来回收。
                    引用类型,超出局部变量定义的{},会引用计数-1,如果引用计数为0,就会被GC下次扫描时回收;

  成员变量:(对象变量) 定义在方法外面的变量
               成员变量的作用域是所在class内的所有方法    
            (本质就是属性  属性的生命期与对象的生命期一致)
              生命期:成员变量的生命期与它所在的对象的生命期一致
                   成员变量所在的对象,又可能是某个class中的局部变量或成员变量;

    只有创建了对象,成员变量才能被分配内存空间;
      通过对象的引用,调用成员变量或给成员变量赋值;

5、常量:(存储在只读存储器ROM中)<最大的好处就是节省内存>

  a、编译期常量:在程序编译的时候,所有调用常量的位置,都被常量代表的值所替换

   例    public static final String KAI_YUE = "kaiyue";
        public static final String JUN_WEI = "junwein";

     (.java)MotoType mt1 = new MotoType(MotoType.JUN_WEI);
                  MotoType mt2 = new MotoType(MotoType.KAI_YUE);      

      (.class)MotoType mt1 = new MotoType("junWei");
                      MotoType mt2 = new MotoType("kaiYue");

  b、程序运行期常量:一次赋值之后,永远不能改变(即运行之后便不能更改了)

6、Static变量(类变量/静态变量)

    即无this的方法,在static内部不能调用非静态方法,类本身直接调用static方法
       方便在没有创建对象的情况下来进行调用(方法/变量)

  1. 别称 :类变量, 它是所有对象共享的内存;
      2. static变量,不需要类的实例,就可以通过类的名字直接调用
      3. 作用域:类似于全局变量
      4. 生命期:static变量在第一次调用这个变量的时候,分配内存  
                 一旦分配了内存后,这块内存可以重新赋值,但是这块内存一直不会被GC回收
  ,直到程序结束!-----用于单例的设计  

静态变量和非静态变量的区别是:

  静态变量被所有的对象所共享,在内存中只有一个副本,它当且仅当在类初次加载时会被初始化。而非静态变量是对象所拥有的,在创建对象的时候被初始化,存在多个副本,  各个对象拥有的副本互不影响。

static成员变量的初始化顺序按照定义的顺序进行初始化。

  类中可以有多个static块。在类初次被加载的时候,会按照static块的顺序来执行每个static块,并且只会执行一次。
static是不允许用来修饰局部变量
      public static double PAI = 11.11;
        通常被称为---类变量
        所有对象共享的一块内存
        与对象无关,可以通过类名直接调用静态变量

7、final关键字()

  1.修饰类

  当用final修饰一个类时,表明这个类不能被继承。也就是说,如果一个类你永远不会让他被继承,就可以用final进行修饰。final类中的成员变量可以根据需要设为final,但是要注意final类中的所有成员方法都会被隐式地指定为final方法。

  2.修饰方法

  只有在想明确禁止 该方法在子类中被覆盖的情况下才将方法设置为final的。

  注:类的private方法会隐式地被指定为final方法。

  3、修饰变量

  修饰变量是final用得最多的地方,也是本文接下来要重点阐述的内容。首先了解一下final变量的基本语法:

  对于一个final变量,如果是基本数据类型的变量,则其数值一旦在初始化之后便不能更改;如果是引用类型的变量,则在对其初始化之后便不能再让其指向另一个对象。

 

posted @ 2016-10-26 19:20  不喜欢吃香蕉的臭猴子  阅读(394)  评论(0编辑  收藏  举报