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