1.类的定义:
[类修饰符] class 类名 extends 基类
implements 接口列表
{
[数据成员定义]
[成员方法定义]
}
2.修饰符分为访问控制符和类型说明符
(1)类的类型说明符主要有两个:final和abstract
(2)类的访问控制符有两个,一个是public(公共类),另一个就是默认(即没有访问控制符)
注:①一个类被定义为公共类,就表示它能被其他所有的类访问和引用
②在一个Java源程序中只能有一个public类,这个类一般含有main方法
③不用public定义的类,其只能被同一个包中定义的类访问和引用
④在一个Java程序中可以定义多个这样的类
3.构造函数实例化类对象格式: (没有返回值)
类名 对象名 = new 构造函数(即类名) (实际参数)
4.对象的声明和初始化
5.程序运行时的内存占用:
6. static方法中不能直接调用非static的域或者方法(必须通过对象名引用)
eg. public static int getCount(){
Person p = new Person();
p.getName(); //先创建对象再调用,因为是非static方法
getCountAnother(); //直接调用,因为是static方法
return count;
}
public static int getCountAnother(){
return count++;
}
7.静态代码块与非静态代码块的异同点
相同点:(1)都是在JVM加载类时且在构造方法执行之前执行,在类中都可以定义多个
(2)一般在代码块中对一些static变量进行赋值
不同点:(1)静态代码块在非静态代码块之前执行,执行顺序为:静态代码块—>非静态代码块—>构造方法
(2)静态代码只在第一次new执行一次,之后不再执行,而非静态代码块在每new一次就执行一次
静态代码块一般用于初始化,它的执行要早于main方法的执行
8.Java语言提供的访问控制范围有4种:
(1)同一个类
(2)同一个包
(3)不同包的子类
(4)不同包的非子类
一般而言,java中的成员变量被声明为private,java的成员方法被声明为public,构造方法大多数时被声明为public,有时也被声明为private
9.我们编写软件时希望具有较好的复用性,而复用其它对象的代码有两种方法:
(1)继承:由子对象完全继承父对象的数据和操作,“is”的关系
(2)包容:把一个对象作为另一个对象的一部分,从而达到复用的目的,“has”的关系
10.Java不支持类的多继承,但支持接口的多继承。Java中的继承通过关键字extends
构造函数不能被继承
11.变量隐藏:在子类对父类的继承中,如果子类的成员变量和父类的成员变量同名,此时称为子类隐藏(override)了父类的成员变量。
子类若要引用父类的同名变量,须用:super.变量名
当通过子类不含参数的构造函数创建子类对象时,先执行父类不含参数的构造函数,再执行子类不含参数的构造函数
12.this关键字:
(1)this变量代表对象本身
(2)当类中有两个同名变量,一个属于类的成员变量,而另一个属于某个特点的方法(方法中的局部变量),使用this区分成员变量和局部变量(this代表成员变量)
(3)使用this可简化构造函数的调用
13.this和super的对比:
无论使用this调用本类构造函数,还是使用super调用父类构造函数,都必须是该方法中的第一条可执行语句!
14.方法覆盖(子类对父类方法的重写)中访问权限:
15.强制类型转换:
16.抽象类是不能实例化的,它的作用是提供一个恰当的父类。因此一般作为其他类的超类,与final类正好相反。
如果一个类里有抽象的方法,则这个类必须声明成抽象的;但一个抽象类中却可以没有抽象方法
17.如果一个类没有必要再派生子类, 通常可以用final关键字修饰,表明它是一个最终类
18.接口:
(1)接口是一组方法集,接口中包含的方法都是抽象方法,定义方法体的任务留给实现该接口的类去完成
(2)接口是用来实现类间(不相关类)多重继承功能的结构
(3)接口是Java中的一种复合数据类型,是用interface关键字定义
(4)接口是一种特殊的类,一种特殊的抽象类
(5)接口中所有的方法都默认是public abstract的,并且只有方法头和参数列表,没有方法体
(6)接口中所有变量都默认是public static final的
(7)接口中没有构造方法
(8)接口可以继承,还可以多重继承(注意和类继承的区别,类只能单继承,即一个类只能有一个父类!但是接口可以有多个父接口)
(9)一个类可以实现多个接口
(10)通过接口可以实现不相关类的相同行为(不需要考虑这些类之间的层次关系),通过接口可以指明多个类需要实现的方法