基本概念
面向对象基本特性
- 封装:将数据和对数据的操作封装在一起
- 抽象:对封装后的集合根据其属性和行为将其抽象为一个新的概念(如类的概念,再由类去创建具体的对象)
- 继承:子类可以使用父类的属性与方法,同时还能在父类基础上进行衍生
- 多态:有两种意义的多态,一种是操作名称的多态,即有多个操作具有相同的名字,但这些操作所接收的消息类型必须不同。另一种多态是和继承有关的多态,是指同一个操作被不同类型对象调用时可能产生不同的行为。(有待进一步理解)
- 写类的目的是为了描述一类事物共有的属性和功能
类与类体
类体具体包括成员变量和方法
应用程序基本结构
成员变量
- 成员变量的类型可以是Java中的任何一种数据类型,包括基本类型:整型、浮点型、字符型、数组以及后面的对象及接口。
- 成员变量在整个类内都有效,与它在类体中书写的先后位置无关
- 在定义类的成员变量时可以同时赋予初值,表明类所创建的对象的初始状态。
- 对成员变量的操作只能放在方法中,方法可以对成员变量进行操作形成算法
类变量和实例变量
- 关键字static修饰的成员变量称作静态变量或类变量, 而没有使用static修饰的成员变量称作实例变量
- 类变量与类相关联,即其与类中所有对象都相关联,对象之间类变量的改变是同步的
- 类变量不仅可以通过某个对象访问也可以直接通过类名访问
- 实例变量仅仅是和相应的对象关联的变量,改变其中一个对象的实例变量不会影响其它对象的这个实例变量
- 实例变量必须通过对象访问
方法
- 方法的定义
- 最基本的方法声明包括方法名和方法的返回类型;如果方法的类型是void类型,方法体中也可以不书写任何语句
- 方法体的内容包括变量的定义和合法的Java语句
- 在方法体中声明的变量以及方法的参数称作局部变量,局部变量仅仅在该方法内有效
- 方法的参数在整个方法内有效,方法内定义的局部变量从它定义的位置之后开始有效
构造方法
- 类创建对象时需使用构造方法,以便给类所创建的对象一个合理的初始状态。
- 构造方法是一种特殊方法,它的名字必须与它所在的类的名字完全相同,并且不返回任何数据类型,即它是void型,但void必须省略不写
- Java允许一个类中有若干个构造方法,但这些构造方法的参数必须不同,即或者是参数的个数不同,或者是参数的类型不同。
- 如果用户在一个定义类中未定义构造方法,系统将为它定义一个缺省的空构造方法。如果用户自己定义构造方法,系统就不再提供默认的
- 构造方法只能在创建对象时用new命令调用
- 对象不可以调用构造方法,构造方法是专门用来创建对象的
实例方法和类方法
- 除构造方法外,其他的方法可分为实例方法或类方法
- 方法声明中用关键字static修饰的称作类方法或静态方法,不用static修饰的称作实例方法
- 一个类中的方法可以互相调用;实例方法可以调用该类中实例方法或类方法
- 类方法只能调用该类的类方法,不能调用实例方法
- 实例方法可以操作成员变量,无论是实例变量或类变量
- 类方法只能操作类变量不能操作实例变量,也就是说类方法中不能有操作实例变量的语句
- 实例方法必须通过对象来调用
- 类方法可以通过类名调用
- 无论类方法或实例方法,当被调用执行时,方法中的局部变量才被分配内存空间,方法调用完毕,局部变量即刻释放所占的内存。
方法重载
- 方法重载是指一个类中可以有多个方法具有相同的名字,但这些方法的参数必须不同,即或者是参数的个数不同,或者是参数的类型不同。方法的返回类型和参数的名字不参与比较。也就是说,如果两个方法的名字相同,即使类型不同,也必须保证参数不同
- 方法重载是多态性的一种
- 功能多态性(又称为静态多态性),是指可以向功能传递不同的消息,以便让对象根据相应的消息来产生一定的行为。对象的功能通过类中的方法来体现,那么功能的多态性就是方法的重载
对象
Circle circle;
表示创建一个空的对象,还没有为其分配空间circle=new Circle();
使用new运算符和类的构造方法为声明的对象分配成员变量,如果类中没有构造方法,系统会调用默认的构造方法Circle circle=new Circle();
可以合在一起写- 匿名对象定义:
new Circle();
- 通过使用运算符“.”,对象可以实现对自己的变量访问 和方法的调用
常量
final int MAX=100;
final修饰的成员变量必须要初始化- 对于final修饰的成员变量,对象可以操作使用,但不能做更改操作
参数传值
- 当方法被调用时,如果方法有参数,即参数变量必须有具体的值
- 如果向方法的int型参数x传递一个int值,那么参数x得到的值是传递值的拷贝
- 方法如果改变参数的值,不会影响向参数“传值”的变量的值。
(1)基本数据类型参数的传值
- 对于基本数据类型的参数,向该参数传递的值的级别不可以高于该参数的级别
(2)引用类型参数的传值
-
当参数是引用类型时,“传值”传递的是变量的引用而不是变量所引用的实体
-
如果改变参数变量所引用的实体,就会导致原变量的实体发生同样的变化,因为,两个引用型变量如果具有同样的引用,就会用同样的实体。但是,改变参数的引用不会影响向其传值的变量的引用
-
类中不同类型代码区加载次序(可以用输出次序理解):
静态代码区(声明只有static)>一般代码区(没有声明)>方法区