面向对象思想是人类最自然的一种思考方式,它将所有预处理的问题抽象为对象,同时了解这些对象具有哪些相应的属性以及展示这些对象的的行为,以解决这些对象面临的一些实际问题,这样就在程序开发中引入了面向对象设计的概念,面向对象设计实质上就是对现实世界的对象进行建模操作。
对象:对象是事实存在的实体,通常将对象划分为两部分,静态部分和动态部分,静态部分为“属性”,动态部分为"行为"。
类:类就是同一类事物的统称经。类是构造对象时所依赖的规范,对象就是符合某类的定义所产生出来的实例。更为恰当的描述是,类是世间事物的抽象称呼,而对象则是这个事物相对应的实体。
类是封装对象的属性和行为的载体,反过来说具有相同属性和行为的一类实体称为类。
面向对象程序设计的三大特点:封装性、继承性、多态性。
封装性:封装是面对对象编程的核心。将对象的属性和行为封装起来,其载体就是类,类通常对客户隐藏其实现细节,这就是封装的思想。
封装的作用:保证了类内部数据结构的完整性,应用该类的用户不能轻易地直接操作此数据结构,只能执行类允许公开的数据。这样就避免了外部操作对内部数据的影响,提高了程序的可维护性。
继承性:利用特定对象之间的共有属性。
多态性:多态的实现并不依赖于具体类,而是依赖于抽象类和接口。
Java中对象的属性也被称为成员变量。
public class Book { private String name; //定义了三个成员变量:name,id,category private int id; private String category; public String getName() //定义了一个getName()方法 { int id=0; //方法内的局部变量 setName("Java"); //调用类的成员方法 return id+this.name; //类里使用this.name表示Book类的成员变量name。 } public void setName(String name) //定义了一个setName()方法,作用是将传入的参数name传递给成员变量name { this.name=name; } public Book getBook() // 在类里声明了一个返回值为Book类的方法,返回Book类的引用 { return this; } }
Java中成员方法对应于类对象的行为。
定义成员方法的语法格式如下:
权限修饰符 返回值类型 方法名(参数类型 参数名) { ...//方法体 return 返回值; }
在Book类中的成员方法有: getName()、setName()、getBook()。
public String getName() //定义了一个getName()方法 { int id=0; //方法内的局部变量 setName("Java"); //调用类的成员方法 return id+this.name; //类里使用this.name表示Book类的成员变量name。 } public void setName(String name) //定义了一个setName()方法,作用是将传入的参数name传递给成员变量name { this.name=name; } public Book getBook() // 在类里声明了一个返回值为Book类的方法,返回Book类的引用 { return this; }
Java中的权限修饰符主要包括private、 public、protected,这些修饰符控制着对类和类的成员变量以及成员方法的访问。
类修饰符 | 本类 | 同包类或子类 | 其他包类或子类 |
---|---|---|---|
private | 可见 | 不可见 | 不可见 |
protected | 可见 | 可见 | 不可见 |
public | 可见 | 可见 | 可见 |
ps:当声明类时,未使用权限修饰符时,默认为protected,即只有同包中的类和子类能够调用这个类的成员变量或成员方法。同时类的权限修饰符会约束类成员的权限设定,即如果类修饰符为protected,成员方法权限修饰符为public,但是其他包的类或子类同样无法调用此类方法。
实例:
class Angclass(){ public void doString() { ...//方法体 } }
等价于:
class Angclass(){ void doString() { ...//方法体 }
在成员方法内定义的变量称为局部变量。如果局部变量和成员变量同名,在该方法的方法体内,起作用的变量为局部变量。
局部变量在方法执行时创建,在方法执行结束后被销毁。即局部变量的作用域为该变量声明开始到该变量的结束为止。局部变量在使用时必须进行赋值操作或初始化,否则会出现编译错误。
构造方法是一个于与类同名的方法,对象的创建就是通过构造方法完成的,每当类实例化一个对象时,类都会自动调用构造方法。
构造方法的特点:
(1)构造方法没有返回值;
(2)构造方法的名称要与本类的名称相同。
可以使用this关键字调用构造方法:
public class Anything { public Anything() { this("this 调用有参构造方法"); System.out.println("无参构造方法"); } public Anything(String name) { System.out.println("有参构造方法"); } public static void main(String[] args) { Anything at=new Anything(); } }
运行结果为:
static关键字: 由static修饰的变量、常量和方法被称做静态变量、常量和方法。静态成员同样遵循public、private、protected修饰符的约束。
在Java语言中对静态方法有两点规定:
Java中通过new操作符来创建对象。
Test test =new Test();
test对象被创建出来时,就是一个对象的引用,这个引用在内存中为对象分配了存储空间。每个对象都是相互独立的,在内存中占据独立的内存地址,并且每个对象都具有自己的生命周期,当一个对象的生命周期结束时,由Java虚拟机自带的垃圾回收机制处理,不能再被使用。
public class Transfer { int i=20; public void call() { System.out.println("调用call()方法"); for (i=0;i<3;i++) { System.out.print("["+i+"]"); } System.out.println(); } public Transfer() { System.out.println("调用构造方法"); } public static void main(String[] args) { Transfer t1=new Transfer(); Transfer t2=new Transfer(); System.out.println("t1的变量i="+t1.i); t1.call(); t2.i=40; System.out.println("t2的变量i="+t2.i); t2.call(); } }
运行结果:
对象被JVM视为垃圾的情况:
Java中提供了一个finalize()方法,这个方法时Object类的方法,被声明为protected,用户可以在自己的类定义这个方法。用于垃圾回收,管理内存。
System.gc()方法强制启动垃圾回收器。