Java学习day05-面向对象(下)

关键字static

使用static关键字的作用就是使得某些特定的数据在内存中只占有一份。相当于全局变量一样。static可以用来修饰类的属性、方法、内部类、代码块。

静态变量是随着类的加载就创建好的。早于对象的创建。属于全局变量共享一份。

如果static修饰方法,则为静态方法,那么就可以直接通过类名调用,而不需要创建对象。静态方法里可以调用静态方法或者变量,但不能调用非静态方法,因为方法不能改变。相当于把C++里的#define和static合体。
在这里插入图片描述
在这里插入图片描述

设计模式与单例设计模式

设计模式就是一种设计套路。单例设计模式就是只造一个对象。方法就是构造函数设成私有则无法通过new创建。则必须通过类对象中的静态方法获取类。一共有23种设计模式。
创建型模式,共5种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。
结构型模式,共7种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。
行为型模式,共11种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式
在这里插入图片描述
单例设计模式分为饿汉式和懒汉式
饿汉式

class Bank{
	//1.私有化类的构造器
	private Bank(){

	}
	//2.内部创建类的对象
	private static Bank instance = new Bank();
	//3.提供公共的方法,返回类的对象
	public static Bank getInstance(){
		return instance;
	}
}

懒汉式

class Bank{
	//1.私有化类的构造器
	private Bank(){

	}
	//2.内部创建类的对象
	private static Bank instance = null;
	//3.提供公共的方法,返回类的对象
	public static Bank getInstance(){
		if(instance==null){
			instance=new Bank();
		}
		return instance;
	}
}

饿汉式和懒汉式的区别
饿汉式:坏处:对象加载时间过长。
好处:线程安全的
懒汉式:好处:延迟对象的创建。
坏处:目前写法线程不安全。

理解main方法的语法

main() 方法作为程序的入口,
main() 方法也是一个普通静态方法,如果两个类里都有main可以创建该类的对象调用另一个函数的main
main() 方法可以作为我们与控制台交互的方式。

类的成员之四:代码块

代码块的作用:用来初始化类、对象。格式如下:

// 代码块
{
	//代码块主体
}

可以用static修饰,不能使用其他关键词修饰。静态代码块vs非静态代码块。

静态代码块

内部可以有输出语句。静态代码块是会随之类的加载而执行。和静态方法不同,我们不能调用代码块,所以代码块会自动执行。只会执行一次。静态代码块只能调用静态属性、静态的方法。不能调用非静态的结构。

// 代码块
static{
	//代码块主体
}

非静态代码块

非静态的代码块随着对象的创建执行。按照声明的顺序执行。非静态代码块可以调用非静态或静态的属性和方法。

// 代码块
{
	//代码块主体
}

属性先后赋值

1.默认初始化
2.显示初始化
3.构造器初始化
4.有了对象以后,可以通过“对象.属性”或"对象.方法"的方式进行赋值
5.在代码块中赋值
执行先后顺序1-2/5-3-4。显示初始化和代码块谁在前面谁先执行。

关键字final

1.final 表示最终的。在这一刻终止,final可以修饰类、方法、变量。
2.final修饰的类不能被继承。比如String类、System类、StringBuffer类。
3.final修饰的变量变为常量不能变化,可以显示初始化、代码块中初始化、构造器中初始化、不能在方法种修改。相当于c++里的const。
4.final类修饰局部变量或者形参,可以赋值但不能修改。

抽象类与抽象方法

随着子类变得越来越具体,而父类则更加一般更通用,类的设计应该保证父类和子类能够共享特征。有时候将类设计的特别抽象,以至于没有具体实例,这样的类叫做抽象类。用关键字abstract 抽象类没有对象,抽象方法没有实体。

注意项:abstract不能用来修饰:属性、构造器等结构。abstract不能用来修饰私有方法、静态方法、final类。
在这里插入图片描述

接口interface

接口和类是两个并列的结构, 一个类可以实现多个接口。接口和类的属性不是is-a的关系, 不能用is-a描述。所以要用接口描述其技能。接口可以理解为不同类的共同功能。
在这里插入图片描述
在这里插入图片描述
接口用interface定义, java中接口和类是两个并列的结构。如何定义接口中的成员。

JDK7和以前:只能定义全局常量和抽象方法。全局常量public static final。但是书写时可以省略不写。抽象方法 public abstract

JDK8:除了定义全局常量和抽象方法外,还可以定义静态方法和默认方法。

接口中不能定义构造器, 接口不能实例化。但在Java开发中让类去实现(implements)接口的内容来使用。如果实现类覆盖了接口中所有的抽象方法, 则此实现类可以实例化, 如果没有覆盖抽象方法, 则不能实例化还是抽象类

interface Flyable{
//全局常量
	public static final int MAX_SPEED=7900;//第一宇宙速度。
	int Min_SPEED=1;
//抽象方法
	public abstract void fly();
	void stop();
}
class Plane implements Flyable{
	@override
	public void fly{
		System.out.println("通过引擎起飞");
	}
	@override
	public void stop{
		System.out.println("驾驶员停止");
	}
}

接口的多实现与接口的继承性

多实现:Java可以实现多个接口,弥补了Java单继承的继承性。
格式: class A extend B implements C, D, E
继承性:接口和接口之间可以继承且可以多继承。
接口可以提醒多态性, 接口可以看成一种规范。

面试题:接口和抽象类有哪些异同。
接口是一种规范和标准,而驱动是接口实现类的集合。

接口应用:代理模式

在这里插入图片描述
在这里插入图片描述

java8接口的新特性

在这里插入图片描述
接口中定义的静态方法只能通过接口调用。通过实现类的对象可以调用接口中的默认方法。如果实现类重写了接口中的默认方法,调用时,仍然调用的是重写以后的方法。如果子类继承的父类和实现的接口中声明了同名同参数的方法那么子类在没有重写此方法的情况下,调用的是父类中同名同参数的方法-》类的优先原则

类的成员之五:内部类

在这里插入图片描述
Java允许一个类A声明在另一个类B中, 则A就是内部类, 类B称为外部类
内部类的分类:成员内部类vs局部内部类(方法内,代码块内,构造器内)

//局部内部类
class Person{
	public void method(){
	//局部内部类
		class AA{

		}
	}
	{
	//局部内部类
		class BB{

		}	
	}
	//成员内部类
	class Dog{

	}
}

成员内部类的特点

一方面作为外部类的成员:可以调用外部类的结构,可以被static修饰,可以被四种不同的权限修饰符修饰。

另一方面作为一个类:类可以定义属性,方法,构造器。可以被final修饰,表示此类不能被继承,可以被abstract修饰。

静态的成员内部类创建:主类.内部类 对象名=new 主类.内部类();
非静态的成员内部类创建:先实例化一个主类的对象, 再用实例化对象去new一个内部类。

调用外部类的属性 外部类.this.name。调用内部类的属性 this.name。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值