第三章 面向对象程序设计
1.类的构造方法:主要用来创建类的实力对象,通常同时完成新创建的实例对象的初始化工作,例如,给实例对象的成员变量赋初值。
2.构造方法有如下三个基本特点:(1)构造方法必修与类同名 (2)构造方法不具有任何返回值 (3)任何一个类都含有构造方法。
3.初始化工作 Integer a = new Integer(11) 。首先运行在成员变量的定义中的这些初始化赋值运算。继续运行相应的构造方法完成实例对象的初始化工作。
4.垃圾回收 System.gc();
5.类的实例对象的生命周期:对象的创建、实例对象的使用、实例对象的废弃以及垃圾的回收。
垃圾回收例子,在实例对象所占据的内存即将被回收之前通常会调用该实例对象的finalize成员方法,这个成员方法是类Object的成员方法,其他的类通常都会继承这个方法。
public class Test {
public static void main(String[] args) {
Book b = new Book(1);
new Book(2);
new Book(3);
System.gc();
}
}
class Book
{
public int m_id;
public Book(int i)
{
this.m_id=i;
}
protected void finalize()
{
switch(m_id)
{
case 1:
System.out.println("飘");break;
case 2:
System.out.println("java");break;
case 3:
System.out.println("C++");break;
default:
System.out.println("未知");
}
System.out.println("实例对应的存储单元被回收");
}
}
6.面向对象的三大特性:封装型、继承性、多态性
7.在当前定义的类与其直接父类之间在构造方法方面存在约束关系:即当前定义的类的构造方法必须调用其父类的构造方法,而且该调用语句必须是当前定义的类的构造方法的第一句。super()。如果在当前定义的类的构造方法中没有显示的写上调用父类构造方法的语句,则java虚拟机一般会自动在当前定义的类的构造方法的第一条语句前自动地隐式调用不含任何参数的直接父类构造方法的语句,如果父类没有不包含任何参数的构造方法,则编译出错。
8.instanceof 运算符可以用在引用类型转换中。
9.方法重载:参数个数不通,参数的数据类型不同。
10.多态例子
public class Test1 {
public static void main(String[] args) {
Fruit a = new Apple();
System.out.println(a.year);
a.run();
}
}
class Fruit
{
int year =3;
public void run()
{
System.out.println("fruit");
}
}
class Apple extends Fruit
{
int year = 2;
public void run()
{
System.out.println("apple");
}
}
11.封装性:可以通过封装性使得各个模块的外在表现仅仅为对一些成员变量的访问方式和一些成员方法的调用方式,屏蔽各个模块内部具体的实现方式。在JAVA中,封装性是通过访问控制来实现的。
12.类的访问控制方式有:公共模式和默认模式。公共模式,类能被所有软件包使用;默认方式,类只能在同一个软件包内部使用。
13.类的成员的访问控制方式:公共模式、保护模式、默认模式、私有模式。
公共模式:所有类;保护模式:同一个包内及其子类;默认模式:同一个包内;私有模式:同一个类内
14.abstract主要用于修饰类、接口、成员方法
15.抽象成员方法不包含方法体。只有在抽象类和接口中,才能定义抽象方法。
public abstract double getArea();
16.抽象类的子类,如果不是抽象类型,一定要覆盖父类中的抽象方法。
17.static:修饰类的成员变量、成员方法、内部类。成员变量和成员方法,由该类所有的对象共享。
18.final 可以用来修饰不具有抽象属性的类、类的成员变量、接口的成员变量以及嘞的不具有抽象属性的方法。
19.final修饰的成员变量只能赋值一次。final修饰的类不能被继承。final 修饰的方法不能被子类覆盖。
20.接口的所有成员变量都具有public static final属性。
21.接口的所有成员方法都是抽象方法,都具有public abstract属性。
22.内部类分为:实名内部类和匿名内部类。内部类所在的类成为外部类。
23.在实名内部类的修饰词列表还可以包含static关键字,则该实名内部类称为静态实名内部类。
24.对于不具有静态属性的实名内部类,如果它的成员变量具有静态属性,则必修具有final属性。不具有静态属性的实名内部类不能含有具有静态属性的成员方法。
25.实名内部类的实力对象的创建方法。
创建静态实名内部类的实例对象:new 外部类名.实名内部类名(构造方法调用参数列表)
创建不具有静态属性的实名内部类的实例对象:外部类表达式.new 实名内部类(构造方法调用参数列表)
J_Test a = new J_Test();
J_Test.J_Inner b= a.new J_Inner();
26.匿名内部类不具有类名,不能具有抽象和静态属性,并且不能派生出子类
new 父类名(父类型的构造方法的调用参数列表){ 类体}
因为匿名内部类不含类名,所以在匿名内部类的类体中一般不能显示地定义构造方法。上面的格式不仅定义匿名内部类,而且创建匿名内部类的实例对象。如果匿名内部类的成员变量具有静态属性,则必须同时具有final属性。
27.匿名内部类实例
public class Test3 {
public static void main(String[] args) {
P p=new P()
{
int i=2;
public void sing()
{
System.out.println("sing");
}
};
System.out.println(p.i);
System.out.println(p.j);
System.out.println(p.sing());//编译错误
}
}
class P
{
static int i = 0;
static int j=1;
public void run()
{
System.out.println(j+i);
}
public static void run1()
{
System.out.println(i);
}
}
28.变量作用域范围
变量主要包括成员变量、成员方法或构造方法的参数变量、在方法题中定义的局部变量。
变量的作用域范围:全局作用域范围、类作用域范围、块范围三种。
29.静态成员变量具有全局作用范围。
30.不具有静态属性的成员变量具有类作用域范围。
31.成员方法或构造方法的参数变量以及在方法体内定义的局部变量具有块作用域。