【Java】day9--main方法、单例设计模式、继承、方法重写部分知识点总结

(一)main方法

jvm调用main方法,jvm也是一个程序
    main方法详解:
        public:公共  保证该类在任何情况下,jvm都对其方法可见。
        static:静态  避免创建对象,而且解决了创建对象传递参数的问题 。
        void:没有返回值。jvm调用main方法,即使main方法有返回值,也是返回给jvm,jvm对于这个返回值没有作用。
        main:并不是一个关键字,只是jvm识别的一个特殊的标识符,是程序的入口。
        args:形参  参数需要在程序一执行的时候就传入。

    
    没有static修饰的后果:
        1.java虚拟机调用main方法的时候需要创建对象。
            new demo1().main();
        2.创建对象时偶尔需要传递参数。
            但jvm不知道应该怎样传参,可能会导致错误。new demo1(null);

 

(二)单例设计模式

模式:解决一类问题的固定步骤。

软件行业23种设计模式:
        1.单例设计模式
        2.模板设计模式
        3.观察者设计模式
        4.工厂设计模式
        5.代理设计模式
        ...

单例设计模式:保证一个类在内存中只有一个对象。

饿汉单例设计模式步骤:(推荐使用)
        1.私有化构造函数
        2.声明本类的引用类型变量,并且创建本类的对象。
        3.提供一个公共的方法获取本类的对象。

代码:

class Single
{
	//创建本类的对象
	private static Single s=new Single();
	//私有化构造函数
	private Single(){	}
	//提供一个公共的方法获取本类的对象
	public static Single getInstance(){//加static是因为不能创建对象
		return s;
	}
}
class demo2 
{
	public static void main(String[] args) 
	{
		Single s1=Single.getInstance();
		Single s2=Single.getInstance();
		System.out.println("是同一个对象么?"+(s1==s2));//是同一个对象
	}
}


    懒汉单例设计模式步骤:
        1.私有化构造函数
        2.声明变量的引用类型变量,但是先不创建本类的对象
        3.提供一个公共静态的方法获取本类的对象,获取之前先判断是否已经创建对象,如果没有创建,那么先创建,再返回,否则直接返回即可。
    代码:

class Single2
{
	//声明变量的引用类型变量,但是先不创建本类的对象
	private static Single2 s;

	private Single2(){}

	//提供一个公共静态的方法获取本类的对象,获取之前先判断是否已经创建对象,如果没有创建,那么先创建,再返回,否则直接返回即可。
	public static Single2 getInstance(){
		if(s==null)
			s=new Single2();
		return s;
	}
}
class demo2 
{
	public static void main(String[] args) 
	{
		Single2 s1=Single2.getInstance();
		Single2 s2=Single2.getInstance();
		System.out.println("是同一个对象么?"+(s1==s2));//是同一个对象
	}
}

懒汉模式存在线程安全问题。

(三)整体与部分

整体与部分的关系:在一个类的内部维护了另一个类的对象。

球队是整体,球员是部分。

例如:

//球员类
class Player
{
	int num;//球员编号
	String name;//球员名字

	//构造函数
	public Player(int num,String name){
		this.num=num;
		this.name=name;
	}
	public void Play(){
		System.out.println("训练好累~~");
	}
}
//球队类
class Team
{
	String name;//球队名字
	Player p1;//球员1
	Player p2;//球员2
	Player p3;//球员3

	//构造方法
	public Team(String name,Player p1,Player p2,Player p3){
		this.name=name;
		this.p1=p1;
		this.p2=p2;
		this.p3=p3;

	}
	
	public void startPlay(){
		System.out.println("训练开始啦~~");
	}
}
class demo3 
{
	public static void main(String[] args) 
	{
		Player p1=new Player(10,"小红");
		Player p2=new Player(11,"小花");
		Player p3=new Player(12,"小明");

		//创建一个球队
		Team t=new Team("阳光少女",p1,p2,p3);
		t.startPlay();
		System.out.println("3号球员的名字:"+t.p3.name);
	}
}

(四)继承

继承的格式:
        class 类名1 extends 类名2{}
    继承要注意的细节:
        1.子类可以继承父类的成员。但是千万不要为了减少代码重复就继承,只有真正存在继承关系才继承。
        2.父类私有的private成员是不能被继承的。
        3.父类的构造方法不能被继承。
        4.创建子类对象时,默认会先调用父类无参的构造函数。
            
    调用父类的构造方法的作用是为了初始化从父类继承下去的属性。

 

(五)super关键字

super关键字:
        代表的是父类的引用空间,在子类对象的内存空间中。
    super的作用:
        1.如果子父类存在同名的成员时,在子类中默认访问的是子类的成员,可以通过suoer指定访问父类的成员。
        2.创建子类对象时,默认会先调用父类无参的构造函数,this可以在子类构造函数中指定调用父类的构造函数。

    super调用父类构造函数的注意细节:
        1.super调用父类构造函数时语句必须位于子类构造函数的第一个语句。
        2.super(调用父类)、this(调用本类)调用构造函数时不能同时出现在同一个构造函数,因为两者都需要在第一个语句,而第一个语句只有一个。

普通函数中无法调用父类构造函数,子类构造函数中才可以。

(六)方法重写

父类的功能无法满足子类的需求,需要进行方法的重写。
    方法重写的前提:两个类存在继承的关系。
    方法重写:子父类存在同名的函数。
    方法重写要求:
        1.方法重写时,子父类函数名必须相同,参数列表也一致。
        2.方法重写时,子类的权限修饰符必须要大于或等于父类的权限修饰符。
        3.方法重写时,子类的返回值类型必须小于或等于父类的返回值类型。
        4.方法重写时,子类抛出的异常类型必须小于或等于父类的类型。

    Exception(最大异常)
    RunTimeErrorException(较小)

例如:

class Student
{
	String name;
	int age;

	public Student(String name,int age){
		this.name=name;
		this.age=age;
	}
	
	public void study(){
		System.out.println(name+"在学习马克思列宁主义");
	}
}
class BaseStudent extends Student
{
	public BaseStudent(String name,int age){
		super(name,age);
	}
	public void study(){
		System.out.println(name+"在学习javaSE");
	}
}
class WorkStudent extends Student
{
	public WorkStudent(String name,int age){
		super(name,age);
	}
	public void study(){
		System.out.println(name+"在学习企业级应用开发");
	}
}

class work3
{
	public static void main(String[] args) 
	{
		Student s=new Student("老大",20);
		s.study();
		
		BaseStudent bs=new BaseStudent("小花",18);
		bs.study();
		
		WorkStudent ws=new WorkStudent("小米",19);
		ws.study();
		//System.out.println("Hello World!");
	}
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值