本节课的内容是静态(static)、代码库、设计模式。
一.static(静态的):
1.定义变量时:
ex:
class Per{
public Static String name;
}
public class Test{
public static void main(String[] args){
Per p1 = new Per();
p1.name = "AAA";
Per p2 = new Per)();
System.out.println(p2.name);
//输出 AAA
}
}
1.在上例中,因为创建类Per时,将name字段定义为静态的,所以系统在会把静态变量放在静态存储区,而所有对象实例都共享这一个变量,也就是说创建10个Per的对象实例,只要一个实例设置了name字段,其他实例的name字段都会更改。
2.定义方法时:
ex:
class Person{
public static String name;
public static void print(){
System.out.println(name);
}
}
public class Test{
public static void main(String[] args){
Person.print();
}
}
1.在上例中:
1.定义了静态方法后,静态方法可以直接通过类名来调用,静态方法也叫做类方法。
2.一般开发中,常把工具类里的方法定义为类方法,因为这种类不需要创建实例,类方法只会存放一份在代码区,节省了内存空间。
3.静态方法只能访问静态方法和静态变量。
二.代码块:
ex:
class Person{
Person(){
System.out.println("这是构造函数");
}
{
System.out.println("这是代码块");
}
}
public class Test{
public static void main(String[] args){
Person p1 = new Person();
Person p2 = new Person();
}
}
/*输出:
这是代码块
这是构造函数
这是代码块
这是构造函数
*/
1.通过上例我们可以看出:
1.在类里,普通代码块执行优于构造函数。
2.每创建一次对象,就执行一次代码块。
2.静态代码块:
ex:
class Person{
Person(){
System.out.println("这是构造函数");
}
static{
System.out.println("这是代码块");
}
}
public class Test{
static{
System.out.println("这是主类代码块");
}
public static void main(String[] args){
Person p1 = new Person();
Person p2 = new Person();
}
}
/*输出:
这是代码块
这是构造函数
这是构造函数
*/
1.通过上例可以看出:
1.静态代码块随着类的加载而执行,无论new多少个实例,只执行一次。
2.静态代码块主要用于在代码中只需要执行一次且要在类加载的时候执行,例如链接数据库。
三.单例设计模式:
1.饿汉式:
class Single{
private static Single s = new Single();
//静态属性,为了保证内存中只有一份
private Single(){
//私有化构造函数,防止任意创建对象实例
}
public static Single getSingle(){
//静态是为了能通过类名调用该方法
return s;
}
}
1.上例就是饿汉式,在类加载时就创建了一份对象,但有个缺点,就是如果该对象没有被使用,会浪费内存
2.懒汉式:
class Single{
Single static s;
private Single(){
//私有化的构造函数可以防止任何创建该对象实例
}
public static Single getSingle(){
if(s == null){
s = new Single();
}
return s;
}
}