面向对象程序(Object-oriented programming,OOP)设计是继面向过程又一具有里程碑意义的编程思想,是现实世界模型的自然延伸。早期的面向过程编程范式是以过程为中心,以算法为驱动,其设计思想为:程序=算法+数据结构。
与之不同,面向对象的设计思想为:程序=对象+消息传递。
面向过程强调的是每一个功能的步骤;面向对象强调的是对象,然后由对象去调用功能。如果在软件开发过程中需求发生改变那么采用面向过程设计思想的代码的改动会很大,不利于软件的后期维护和扩展。而在面向对象开发中,就是不断的创建对象,使用对象,然后指挥对象做事情。对象之间通过“消息”进行通讯。面向对象设计使程序更容易扩展,也更加符合现实世界的模型。
2、类与对象:
类是构造对象的模板或蓝图,是一组相关的属性和行为的集合,是一个抽象的概念。对象是类的实例化的产物,该类事物的具体表现形式,具体存在的个体。
3、类的定义使用:
定义一个类后,就可以开始创建类的实例了,创建类的实例通过new关键字完成。实例如下:
- class ColorDefine {
- String color="黑色";
- void getMes(){
- System.out.println("定义类");
- }
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- ColorDefine b=new ColorDefine();
- System.out.println(b.color);
- b.getMes();
- }
- }
程序运行结果:
黑色
定义类
在ColorDefine这个类中,定义了一个String类型的属性color,并赋初值“黑色”。在第4~6行,定义了一个普通的方法getMes(),其完成的功能是向屏幕输出字符串“定义类”。第7~12行,定义了一个公有访问的静态方法——main方法。在main方法中,第9行,定义了一个ColorDefine的对象b,第10行输出了对象b的数据成员color,第10行调用了对象的方法getMes()。还可以看出,在类ColorDefine中,没有构造方法(即与类同名的方法)。但事实上,如果用户没有现实定义构造方法,Java编译器会提供一个默认的无参构造方法。
4、对象的声明:
类提供的只是一个模板,必须按照它创建出对象之后才可以使用。
下面定义了由类产生对象的基本形式。
- 类名 对象名=new 类名();
创建属于某类的对象,需要通过以下两个步骤实现:
(1)声明指向“由类所创建的对象”的变量;
(2)利用new创建新的对象,并指派给先前所创建的变量。
举例来说,如果要创建Person类的对象,可用下列语句实现:
- Person p1; //先声明一个Person类的对象p
- p1 = newPerson(); //用new关键字实例化Person的对象p1
Person p=new Person(); //声明Person对象p1并直接实例化此对象
注意:对象只有在实例化之后才能被使用,而实例化对象的关键字就是new。
具体实例:使用Person类的对象调用类中的属性与方法的过程:
- public class Person {
- String name;
- int age;
- void talk()
- {
- System.out.println("我是:"+name+",今年:"+age+"岁!");
- }
- }
- public class ObjectDemo {
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- Person p1=new Person();
- p1.name="花花";
- p1.age=25;
- p1.talk();
- }
- }
程序运行结果如:
我是花花,今年25岁
5、匿名对象:
匿名对象是指没有名字的对象。对于一个对象实例化的操作来说,对象真正有用的部分是在堆内存里面,而栈内存只是保存了一个对象的引用名称(严格来讲是对象在堆内存的地址),所以所谓的匿名对象就是指,只开辟了堆内存空间,而没有栈内存指向的对象。故匿名对象在程序中只能使用一次!!
匿名对象的两种使用情况:
1、当对对象方法仅进行一次调用时;
2、匿名对象可以作为实际参数进行传递。
具体实例:
- public class NoNameObject {
- public void say(){
- System.out.println("面朝大海,春暖花开!");
- }
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- //这是匿名对象,没有被其他对象所引用
- new NoNameObject().say();
- }
- }
运行结果:
面朝大海,春暖花开