面向对象概述
面向对象程序由对象组成,每个对象包含对用户公开的特定功能部分和隐藏的实现部分。
面向过程首先要确定如何操作数据,然后再决定如果组织数据,以便数据操作。而面向对象调换了这个次序,将数据放在第一位,然后再考虑操作数据的算法。
类是构造对象的模板或蓝图。
OOP让用户自定义类变得轻而易举,可以通过扩展一个类创建另一个类。
每个对象都保存着描述当前特征的信息,这是对象的状态。
类与类之间的关系:依赖(use a ),聚合(has a),继承(is a )
使用预定义类
要使用对象必须先构造对象,并指定初始形态,然后对对象应用方法
使用new关键字创建对象
new Date();
在对象与对象变量之间存在一个重要区别。
Date dateTest;//创建对象
变量dateTest不是一个对象,也没有引用对象。必须先初始化
Date dateTest = new Date(); //使用新构造的对象初始化这个变量 Date test1 = new Date(); Date test2 = test1;//引用一个已存在对象
一个对象变量并没有包含一个对象,而是引用一个对象。
构造方法
//构建对象 //如果没有写构造器,则默认无参构造 //如果写了有参构造器,则无法构造无参对象 public class CreateObject{ public static void main(String[] args){ //创建对象 CreateObject createObject = new CreateObject(); } }
构造器必须与类名相同。在构造对象时,构造器会运行,以便将实例域初始化为希望的状态。
1、构造器与类同名 2、每个类有一个以上的构造器 3、构造器可以有0个、1个或多个参数 4、构造器没有返回值 5、构造器总是伴随new操作一起调用
不要在构造器中定义与实例域重名的局部变量。
隐式参数与显式参数
方法用于操作对象以及存取它们的实例域
public void test(String s){ String s2; }
方法中s是隐式参数,s2是显式参数。
隐式参数用this关键字表示
public void raiseSalary(double byPer){
this.salsry =double raise ; //使用this关键字区分实例域与局部变量 }
封装
封装应该提三个内容:一个私有的数据域;一个公有的访问方法;一个公有的更改方法。
private修饰的方法是私有方法。
final修饰的是不可变的。
静态域与静态方法
静态方法是一种不能向对象实施操作的方法。不能在非静态方法中调用静态方法。
在两种情况下使用静态方法:
1、一个方法不需要访问对象状态,其所需参数都是通过显式参数提供
2、一个方法只需要访问类的静态域。
方法参数
方法参数的类型:基本数据类型和对象引用
Java是值传递
重载
如果有多个方法,具有相同的名字,不同的形参,便产生重载。
public class CZMethodClass{ String name; int age; //构造器方法重载 public CZMethodClass(String name, int age){ this.name = name; this.age = age; System.out.println("name + age构造方法 "); } public CZMethodClass(String name){ this.name = name; System.out.println("name 构造方法"); } public CZMethodClass(int age){ this.age = age; System.out.println("age 构造方法"); } public CZMethodClass(){} public static void main(String[] args){ CZMethodClass czNameAge = new CZMethodClass("lilei", 18); CZMethodClass CZName = new CZMethodClass("hanmeimei"); CZMethodClass CZAge = new CZMethodClass(16); } }
public class CZMethod{ //方法重载 public void method(String name){ System.out.println("name = " + name); } public void method(int age){ System.out.println("age =" + age); } public static void main(String[] args){ CZMethod cz = new CZMethod(); cz.method("lilei"); cz.method(18); } }
不以方法的返回值作为区分重载的方法,Java调用方法时可以省略返回值,如果以返回值作为区分重载的方法,则系统无法分辨。
变量
Java分为成员变量和局部变量。成员变量分为实例变量和类变量(以static修饰);局部变量有形参,方法局部变量,代码块局部变量
成员变量无需显示初始化,系统会在这个类的准备阶段或创建该类实例的时候默认初始化,成员变量默认初始化时的赋值规则与数组动态初始化时数组元素的赋值规则完全相同。与成员变量不同,局部变量除了形参意外,都必须显示初始化。也就是必须先给方法局部变量和代码块变量指定初始值。
Java允许局部变量和成员变量同名,可以使用this关键字或类名作为调用者访问成员变量。
定义局部变量之后,系统并未给这个变量分配内存空间,知道赋初值,才会为局部变量分配内存,并将初始值保存在这块内存中。
成员变量增大了内存的生存时间,将导致内存开销更大,扩大变量的作用域,不利于提高程序的内聚性。