1.单例模式
常见的设计模式(23种)之一
单例:唯一的实例(对象)
将构造方法私有化,提供一个返回对象的公共static方法,私有的static成员属性
public class Sigleton {
//成员属性
private static Sigleton sig=new Sigleton();
//私有化构造器
private Sigleton(){}
//公有化的创建对象的方法
public static Sigleton getInstance(){
return sig;
}
}
//测试
public static void main(String[] args) {
Sigleton s1=Sigleton.getInstance();
Sigleton s2=Sigleton.getInstance();
System.out.println(s1);
System.out.println(s2);
}
//s1,s2地址相同说明是同一个对象
3.static关键字
“静态的” --存储在静态中
(1)修饰属性:静态属性,类属性,可被类的所有对象共享。
访问方式:类名.属性名 ,对象名.属性名(不建议)
(2)修饰方法:静态方法,类方法
访问方式:类名.方法名() ,对象名.方法名()(不建议)
(3)修饰代码块:只执行一次,类加载到虚拟机中时执行。
static注意:
1.static不可修饰构造方法
2.在static方法中不可有this关键字
3.在static方法中只能直接访问static修饰的方法和属性,不能访问实例属性和实例方法。
4.实例化对象的过程
Hello h1=new Hello()
(1)将Hello.class字节码文件加载到java虚拟机(jvm),静态属性的初始化
(2)执行静态代码块
(3)初始化非静态成员属性,执行构造代码块
(4)执行构造方法
(5)在堆中分配内存,并将引用指向堆中的地址
Hello h2=new Hello()
(3)(4)(5)
public class Test03 {
private static int x=100;
public Test03(){}
public Test03(int x){
this.x=x;
}
{
x=200;
}
static{
x=50;
}
public static void main(String[] args) {
Test03 t1=new Test03(150); // x=150
//执行过程:x=100,x=50,x=200,x=150
Test03 t=new Test03(15);//x=15
//执行过程:x=200,x=15
System.out.println(t.x);//?? 15
System.out.println(t1.x);//??15
System.out.println(Test03.x);//?? 15
Test03 t2=new Test03();//x=200
//执行过程:x=200 执行无参构造器
Test03 t3=new Test03();//x=200
//执行过程:x=200 执行无参构造器
System.out.println(t2.x);//?? 200
System.out.println(t3.x);//??200
System.out.println(Test03.x);//??200
}
}
5.继承(面向对象特征2)
简化代码,减少数据冗余
语法:
class 子类名(派生类) extends 父类名(超类)
Person(name,age,sex speak()) 父类
Student(name,age,sex,score speak(),study()) 子类
注意:父类私有的成员,子类不可继承
重写:子类覆盖父类的同名的,同返回类型,同参数列表的方法
访问权限只能扩大不能缩小
super:系统给子类的一个父类对象,代表父类
super():父类无参构造器,用于子类构造器中,必须放在第一行
this:系统给每一个类一个实例对象,代表类本身
this():子类无参构造器,必须放在构造器第一行
所以super()与this()不可能同时存在
构造子类对象需要先构造父类对象