java 面向对象编程(3)

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()不可能同时存在
 
构造子类对象需要先构造父类对象
发布了21 篇原创文章 · 获赞 11 · 访问量 340

猜你喜欢

转载自blog.csdn.net/weixin_41050494/article/details/103918456