7.1 面向对象概述
7.1.1对象和类
类的实例化就是对象
7.1.2面向对象程序设计的特点:封装、继承、多态
7.2类
7.2.1成员变量和成员方法
7.2.2权限修饰符
7.2.3局部变量和局部变量的有效范围
7.2.4 静态变量、常量和方法
由static修饰的变量、常量和方法被称做静态变量、常量和方法
在Java语言中对静态方法有两点规定:
1在静态方法中不可以使用this关键字
2在静态方法中不可以直接调用非静态方法
3方法体内的局部变量不能声明为static的
eg.
public class StaticTest{ static double PI=3.1415; //在类中定义静态常量 static int id; //在类中定义静态变量 public static void method1(){ //在类中定义静态方法 } public void method2(){ //在类中定义非静态方法 System.out.println("StaticTest.PI");//调用静态常量 System.out.println("StaticTest.id"); //调用静态变量 StaticTest.method1(); //调用静态方法 } public static StaticTest method3(){ method2();//调用非静态方法 错误 return this; //在return语句中使用this关键字 错误 } }
7.2.5this关键字
this关键字来代表引用对象的成员变量和方法,即调用类的成员变量和成员方法;除此之外,this还可以调用类中的构造方法。this.成员变量,this.成员方法
eg.
public class Book{ private String name; //定义一个String型的成员变量 public String getName(){ //定义一个getName()方法 int id=0; //局部变量 setName("java"); //调用类中其它方法 return id+this.name; //设置返回值 } private void setName(String name){ //定义一个setName()方法 this.name=name; //将参数值赋予类中的成员变量,方法的参数name和类中的成员变量name名称一样,那么就用this.name表示类中成员变量 } public Book getBook(){ return this; //返回Book类引用 } public static void main(String[] args){ //主方法 } }
7.2.6类的构造方法
构造方法是一个与类同名的方法,对象的创建就是通过构造方法完成的,每当类实例化一个对象时,类都会自动调用构造方法。如果类中没有明确定义构造方法,编译器会自动创建一个不带参数的默认构造方法。
构造方法的特点:
1构造方法没有返回值,但这与普通没有返回值的方法不同,普通没有返回值的方法使用public void methodEx()这种形式进行定义,但构造方法不需要使用void关键字进行修饰。
2构造方法的名称要与本类的名称相同。
eg:
public class AnyThting{ public AnyThing(){//定义无参构造方法 this("this调用有参构造方法"); //这种方式只可以在无参构造方法中的第一句使用this调用有参构造方法 System.out.println("无参构造方法"); } public AnyThing(String name){ System.out.println("有参构造方法"); } }
7.3对象
7.3.1对象的创建
通过new操作符来创建对象,语法如下:
Test test=new Test();// Test test=new Test("a"); //Test:类名,test:创建Test类对象,new:创建对象操作符,"a":构造方法的参数
7.3.2访问对象的属性和行为
用户使用new操作符创建一个对象后,可以使用“对象.类成员”类获取对象的属性和行为。对象的属性和行为在类中是通过类成员变量和成员方法的形式表示的,所以当对象获取类成员时,也相应地获取了对象的属性和行为。
package seven; public class Sevenzerothree { int i=47; //定义成员变量 public void call(){ System.out.println("调用call()方法"); //定义成员方法 for(i=0;i<3;i++){ System.out.print(i+""); if(i==2){ System.out.println(" "); } } } public Sevenzerothree(){ //构造方法 } public static void main(String[] args){ Sevenzerothree t1=new Sevenzerothree();//创建一个对象,t1是Sevenzerothree类的一个对象 Sevenzerothree t2=new Sevenzerothree();//创建另一个对象 t2.i=60; //将类成员变量赋值为60 //使用第一个对象调用类成员变量 System.out.println("第一个实例对象调用变量i的结果是:"+t1.i++); t1.call();//使用第一个对象调用类成员方法 //使用第二个对象调用类成员变量 System.out.println("第二个实例对象调用变量i的结果是:"+t2.i); t2.call(); //使用第二个对象调用类成员方法 }
备注:调用有两种方式:1)直接调用;
2)(1)如果是在静态中调用非静态,则需要先创建对象,然后再进行调用;对象.方法/变量
(2)如果是在非静态中调用静态或者非静态,并且方法中的参数和类中的参数名称一致时,则用this.成员变量或this.成员方法
3)子类调用父类,在实例化子类对象时,父类无参构造方法将被自动调用,但有参构造方法并不能被自动调用,只能依赖于super关键字显式地调用父类的构造方法。
7.3.3对象的比较
7.3.4对象的销毁
每个对象都有生命周期,当对象的生命周期结束时,分配给该对象的内存地址将会被回收。在其他语言中需要手动回收废弃的对象,但是Java拥有一套完整的垃圾回收机制。垃圾回收器只能回收那些由new操作符创建的对象。
如果某些对象不是通过new操作符在内存中获取一块内存区域,这种对象可能不能被回收机制所识别,所以在Java中提供了一个finalize()方法。这个方法是Object类的方法,它被声明为protected,用户可以再自己的类中定义这个方法,如果用户在类中定义了finalize()方法,在来及回收时会首先调用该方法,在下一次垃圾挥手动作发生时,才能真正回收被对象占用的内存。