Java day6

一:Static
1)修饰变量(只能修饰实例变量)----->静态变量
比如:每次闯关游戏的总分数,应该是第一次闯关
的分数+第二次闯关的分数+第三次闯关方法…
这个时候就需要使用static去保存了。
a)所有类实例共享
b)使用静态变量
类名.变量名
c)静态变量是属于这个类
非静态变量是属于对象
d)代码加载到内存静态变量就已经存在了
e)static变量和实例变量的区别:
i)static变量对于每个类而言在内存中只有一个,能被类的所有实例所共享;
实例变量对于每个类的每个实例都有一份,它们之间互不影响;
ii)Java虚拟机在加载类的过程中为static变量分配内存,
实例变量在加载完类后创建对象时分配内存;
iii)static变量存在方法区,实例变量存在堆区;
v)static变量可以直接通过类名访问,
实例变量通过引用类型变量访问;
2)修饰方法====>静态方法
a)调用时使用
类名.方法名();
b)静态方法不能使用非静态的变量
静态方法在类加载的时候就存在了
非静态变量在对象创建的时候才存在的
非静态方法可以访问静态变量
c)静态方法不能被非静态方法重写
静态方法不能被静态方法重写
d)静态方法用来表示某个类所特有的功能,
这种功能的实现不依赖于类的具体实例,也不依赖于它的子类.
既然如此,当前类必须为静态方法提供实现。
静态方法属于类
e)不能使用this关键字和super关键字;

3)静态初始化块----在类加载时只执行一次
对静态变量进行初始化,当Java虚似机加载类时,就会执行该代码块;
Java虚拟机就能根据类名在运行时数据区的方法区内定位到它们。
static{}
4)普通初始化----每创建一个对象都会被调用的
对非静态变量进行初始化,
{}
整个运行的过程中,某一个类只能够有一个对象(单例模式)
懒汉式:用的时候才创建对象
饿汉式:一开始就创建好对象

5)静态导入
import java.lang.Math;
使用:Math.random()

import static java.lang.Math.*;
使用:random()

二:final
1)修饰变量---->常量
变量必须显式初始化,变量的值不允许修改。
final变量都必须显式初始化,
a) 修饰静态变量,只能在定义变量时进行初始化或者static静态初始化块;
b) 修饰实例变量,可以在定义变量时进行初始化,
或者在构造方法中或者普通初始化块中进行初始化;
2)修饰方法
该方法不能够被重写
final 加密(){} 不允许被重写
final 解密(){} 不允许被重写
3)修饰类
该类不能够被继承
String类就是final修饰的类

三:抽象类 abstract class===>有得有失
a)抽象方法
作用:定义了一个规范
如果一个方法没有实现就必须定义成抽象方法。
抽象方法用来描述系统具有什么功能,
但不提供具体的实现
b)抽象类
1)如果一个类中有抽象方法就必须定义成抽象类。
抽象类中不一定有抽象方法。
2)抽象类中也可以包含非抽象方法
3)抽象类中也可以定义实例变量
4)抽象类中也可以定义构造器,
但是没有抽象构造方法,也没有抽象静态方法;
5)抽象类可以包含多个抽象方法。
6)抽象类的作用是提供给其他的子类来进行继承的。
7)继承抽象类必须实现抽象类中的所有抽象方法。
或者将子类也定义成抽象类。
8)抽象类不能被实例化,构造器给创建子类对象用的。
9)抽象类及抽象方法不能被final修饰符修饰
c)作用:当不知道方法的具体实现的时候就可以定义
成抽象方法。让子类去实现该方法,完成自己的实现。

练习:定义比较器Comparator。
比较器比较两个对象谁大谁小。
但是真正用什么比较,是由调用者决定的。
所以就需要定义一个比较的规则,即抽象方法。
比较一个Team团队中最大或者最小人。
根据年龄的大小来查找。
根据名字的长度来查找。

四. 接口
1.接口使用的目的:
a)定义规范的
b)解决多重继承问题;例如Fish类继承Animal类,
表明Fish是一种动物,但鱼同样也是一种食物,
如何表示这种关系呢? 由于Java语言不支持一
个类有多个直接的父类,因此无法用继承关系来
描述鱼既是一种食物,又是一种动物,为了解决
这一问题,Java语言引入接口类型,简称接口。
一个类只能有一个直接的父类,但是可以实现多
个接口。采用这种方式,Java语言对多继承提供
了有力的支持。
2.面试题:
C,C++是多继承,但Java是单继承?是不是
说Java语言在继承的层面上是不是退步了?
多继承不好的地方:造成代码的浪费
引发继承的多义性
Java使用接口完成多继承的功能。
使用接口可以一个项目多个功能同时开发。
3.接口的内容:
a)接口是抽象类的另外一种形式
接口是抽象类的抽象,
抽象类可存在有方法体的方法,
接口中的方法全部为抽象方法;
b)接口中的所有方法均是抽象方法,
默认都是public abstract类型的;
c)接口中的成员变量默认都是public static final类型,
必须被显式初始化;
d)接口中只能包含public static final类型成员变量
和public abstract类型的成员方法;
e)接口中没有构造方法,不能被实例化。
f)接口可以继承多个接口
g)一个类只能继承一个直接的父类,但能实现多个接口。
h)接口告诉程序员做什么事情,不管怎么做。
定义规范,描述该接口有哪些功能。

抽象类和接口比较:
1. 相同点:
a. 都不能被实例化;
b. 都能包含抽象方法;
2. 不同点;
a. 抽象类中可以为部分方法提供默认的实现,
从而避免子类中重复实现它们,提高代码的可
重用性,而接口中只能包含抽象方法;
b. 一个类只能继承一个直接的父类,这个父
类有可能是抽象类;但一个类可以实现多个接口
,这是接口的优势所在。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值