面对对象的思想
面向对象的设计思想
1. 面向对象的基本思想是,从现实世界中客观存在的事物出发来构造软件系统,
并在系统的构造中尽可能运用人类的的白然思维方式。
2. 面向对象更加强调运用人类在日常的思维逻辑中经常采用的思想方法与原则,
如抽象、分类、继承、聚合、多态等。
对象和类的概念
1. 对象用计算机语言对问题域中事物的描述,对象通过“属性( attribute )”和"方法
(method)"来分别对应事物所具有的静态属性和动态属性。
2. 类是用于描述同一类形的对象的一个抽象的概念,类中定义了这一类对象所因
具有的静态和动态属性。
3. 类可以看成-类对象的模板,对象可以看成该类的一个具体实例。
Java与面向对象
1. 对象是Java程序的核 心,在Java程序中万事万物皆对象。
2. 对象可以看成是静态属性(成员变量)和动态属性(方法)的封装体。
3. 类是用来创建 同一类型的对象的“模板”,在一个类中定义了该类对象所应具有的。
成员变量以及方法。
4. J2SDK提供了很多类供编程人员使用,编程人员也可定义自己的类。
为么用对象?
1. 面向对象的编程:是一组对象互相配合通过沟通完成特定功能,所有的paradigm都是对现实问题的抽象,汇编是对机器语言的抽象,面向过程的语言是对汇编的抽象,对象更 加符合对于现实问题的抽象。
2. 对象都有对外服务的接口:通过继承可以复用
3. 对象隐藏内部服 务的实现:通过聚合可以复用
4. 面向对象更加容易使我们达到这些年来苦苦追求的境界:Reusable、Extensibility、 维护和替换更加方便、…
5. 组件一组对象更高的层次上的抽象(二进制级别)
6. EJB、Web Service、CORBA、COM、
JAVA 类的定义及成员变量
类的定义
//用class关键字定义一个类,例如: class Person { //成员变量定义 private int id; private int age=20; //方法定义 public int getage() {return age;} public void setAge(int i){age = i;} public int getId() { return id;} }
1. 类的定义主要有两方面组成——成员变量和方法。
2. 声明成员变量的格式为: [< modifiers] type < attr_name>[=defaultValuel ;
例如: private int id; private int age = 20;
3. 声明的方法:public int getAge(){return age;}
成员变量
1. 成员变量可以使Java语言中任何一种书局类型(包括基本类行和引用型)。
2. 在定义成员变量时可以对其初始化,java使用默认的之对其初始化,
作用范围为整个类体.
成员变量类型取值byte0short0int0long0Lchar‘\u0000’float0.0Fdouble0.0Dbooleanfalse所有引用类型null
java面向对象基本概念——引用
java语言中除基本类型之外的变量类型都称之为引用类型。
java中的对象是通过引用其他操作的
例如: /* *声明了一个String类型的引用变量,但并没有使它指向一个对象 */ String s; //使用new语句创建一个String类型的对象并用s指向它,以后可以通过s完成对其的操作 s=new String("hello world");
如何在内存中区分类和对象?
类是静态的概念,是放在代码区里面的;
对象是new出来的,位于堆内存,类的每个成员变量在不同的对象中都有不同的价值(除静态变量)
对象的创建和使用
1. 必须使用new关键字创建对象
2. 使用对象(引用),成员变量或者来引用对象的成员变量。
3. 使有对象(引用),方法(参数列表)来调用对象的方法。
4. 同一类的每个对象不同的成员变量存储空间
5. 同一类的每个对象共享该类的方法。
关键字
this 关键字
在类的方法定义中使用的this关键字代使用该方法的对象的引用。
当必须指出当前使用方法的对象是谁时要使用this。有时this可以处理方法中成员变量和参数重名的情况。this也可以看作是一个量,它的值是当前对象的引用。
看下面代码
public class Leaf{ int i = 0; Leaf(int i){ this.i = i;//this是指向自身的一个引用 } Leaf increament(){ i++; return this; } void print(){ System.out.printin("i="+i) } public static void main (String [] args){ Leaf leaf = new Leaf(100); leaf.increament.increament.print(); } }
当确定不了一个参数指定不了哪个参数时,找离他最近的声明,叫做就近生命原则。this一般使用在方法里边。
static 关键字
static 可以用来修饰属性方法 代码块。
第一次使用时得被初始化,对于该类的的所有对象来说,static成员变量只有一份。
原来一个类里边成员变量没new一个对象就有一份,对于Static成员变量来说 这个成员变量只有一份,而这一份是这个类所有对象共享。
用static声明的方法为静态方法,在调用该方法时,不会将对象的引用传递给它,
所以在static方法中不可访问非static的成员。静态的方法不再是针对某个对象调用,所以不能访问非静态的成员。通常把static 修饰的属性和方法成为类的属性类的方法。
看下我们在代码中是怎么使用的
public class Cat{ private static int sid = 0; private String name; int id; Cat{String name){ this.name=name; id=sid++; } public void info(){ System.out.println("my name is"+name); } public static void main(String arg[]){ cat.sid=100; Cat mimi=new Cat("mimi"); mimi.intfo(); } }
代码中所定义的sid成员变量就是被static所修饰,此时变量static称之为静态变量;所定义的sid为类的属性。
构造方法与重载方法
构造方法又称构造函数
使用 new+构造方法创建一个新的对象,构造函数是定义在java类中的一个用来初始化对象的函数,构造函数与类同名且没有返回值。
例如:
public class Person{ int id; int age; Person(int n, int i){ id = n; age = i; } }
创建对象时,使用构造函数初始化对象的成员变量。
public static void main(String args[]){ Person tom = new Person(1,25); Person john = new Person(2.45); }
用 Person类new创建一个对象,进行为参数i和n传值。
方法的重载
方法的重载是指一个类中可以定义有相同的名字,但参数不同的多个方法
调用时,会根据不同的参数表选择对相应的方法。
例如:在Person类中添加如下方法:
void info(){ System.out.println(“my id is ”+id); } fvoid info(String t){ System.out.println(t+""+id+""+age); } //运行如程序 public class Test{ public static void main (String args[]){ Person p=new Person(1,20); p.info(); p.info(); p.info("hello"); } }