1、静态关键字:static
1)用法:
static是一个修饰符,用于修饰成员(成员变量、成员函数),当成员被静态修饰后,就多了一个调用方式,除了可以被对象调用外,还可以直接被类名调用:类名.静态成员。
2)特点:
随着类的加载而加载,消失而消失,生命周期最长,优先于对象存在;
被所有对象所共享,可直接被类名锁调用。
3)实例变量和类变量区别:
A、类变量随类加载而存在于方法区中,实例变量随对象的建立而存在于堆内存中。
B、生命周期:类变量最长,随类的消失而消失;实例变量随对象消失而消失。
4)静态使用注意事项:
A、静态方法只能访问静态成员;非静态方法既可以访问静态也可以访问非静态。
B、静态方法中不可以定义this、super关键字,因为静态优先于对象存在。
C、主函数是静态的。
5)主函数:
主函数是一个特殊的函数,是固定格式的,作为程序的入口,可以被虚拟机调用。
public:代表该函数的访问权限是最大的。
static:代表主函数随着类的加载就已经存在了。
void:主函数没有具体返回值。
main:不是一个关键字,但是一个特殊词,可以被虚拟机识别。
(String[] args):函数的参数类型是一个数组,该数组中的元素是字符串。
6)什么时候使用静态?
分两方面:静态变量(类变量)和静态函数
静态变量:
当对象中都出现共享数据时,该数据被静态锁修饰。对象特有数据要定义成非静态。
静态函数:
当功能内部没有访问到非静态数据(对象的特有数据),那么该功能可以定义成静态的。静态不能访问非静态。
2、说明书
将class文件发给他人使用,别人只要将文件设置到classpath路径下就可以使用,但是我们必须建立使用说明书以介绍class内容。
Java的说明书通过文档注释来完成。
/**
对类的描述信息
@author 作者
@version 版本
*/
生成:javadoc -d 目标盘 文件夹 -author -vesion xxx.java
3、静态代码块
格式:
Static
{
静态代码块中的执行语句;
}
特点:
随着类的加载而执行,只执行一次,并优先于主函数。
执行顺序:
静态代码块>主函数>构造代码块>构造函数
4、对象的初始化过程
1)new要用到class文件,先找到并加载到内存;
2)执行该类中static代码块,对class文件初始化;
3)在堆内存中开辟空间,分配内存地址;
4)建立对象的特有属性,进行默认初始化;
5)对属性进行显示初始化;
6)对对象进行构造代码块初始化;
7)对对象进行对应的构造函数初始化;
8)将内存地址赋给栈内存中的变量。
5、单例设计模式
要保证对象的唯一:
A、 将构造函数私有化;
B、 在类中创建一个本类对象(私有);
C、 对外提供一个方法可以获取到该对象。
1)饿汉式
private Single(){}
private static final Single s = new Single();
public static Single getInstance()
{
return s;
}
2)懒汉式:延迟加载
private Single(){}
private static final Single s = null;
public static synchronized Single getInstance()
{
if(s==null)
s = new Single();
return s;
}
6、继承(extends)
继承简化了代码,提高了代码的复用性,让类与类之间产生了关系,有了多态的特性。
Java支持单继承,多层继承。
具体调用时,要创建最子类的对象:
1)有可能父类不能创建对象;
2)创建子类对象可以使用更多的功能,包括特有功能。
7、super关键字
1)如果子父类中出现了非私有的同名变量时,子类访问本类变量用this,子类访问父类中同名变量用super。
2)子父类中的函数:当子类出现和父类一模一样的函数时,子类对象调用该函数会运行子类函数内容,父类的函数被覆盖。这也体现了函数的一个特性:重写(覆盖)。
3)注意事项:
覆盖时要注意子类权限必须大于等于父类权限;
静态只能覆盖静态;
重写是子父类方法要一模一样,重载是只看同名函数的参数列表。
4)在对子类对象进行初始化时,父类的构造函数也会运行,因为子类的构造函数默认第一行有一条隐式的语句:super();它会访问父类中空参数的构造函数,而且子类中所有的构造函数都默认第一行有super()。
5)子类为什么一定要访问父类中的构造函数呢?
因为父类中的数据子类可以直接获取,子类对象在建立时,需要先查看父类是如何对这些数据初始化的,所以子类在对象初始化时要先访问一下父类中的构造函数。如果访问父类中制定的构造函数,可以手动定义super语句的方式来指定,一定定义在子类构造函数的第一行。当然子类的构造函数第一行也可以手动指定this语句来访问本类中的构造函数,子类中至少有一个构造函数会访问父类中的构造函数。
这就叫做子类实例化过程。
8、final关键字
1)final可以修饰类、方法和变量(成员变量、静态变量和局部变量);
2)final修饰的类不可以被继承;
3)final修饰的方法不可以被覆盖;
4)final修饰的变量是一个常量,只能被赋值一次;
5)内部类只能访问被final修饰的局部变量。