共计 2699 个字符,预计需要花费 7 分钟才能阅读完成。
ps 是开博记录的 day1 其实曾经学了一小段时间 java 根底
static 关键字的应用
static 动态的
static 能够用来润饰:属性、办法、代码块、外部类
应用 static 润饰属性:动态变量 / 类变量。
3.1 属性,按是否应用 static 润饰,又分为动态属性 和非动态属性(实例变量)
实例变量:创立类的多个对象,每个对象都独立领有一套类中的非动态属性。当批改其中一个对象中的非动态属性时,不会导致其余对象中同样的属性值的批改。
动态变量:创立类的多个对象,每一个对象都共享同一个动态变量。当通过某一个对象批改动态变量时,会导致其余对象调用此动态变量时,是被批改过得。
3.2 static 润饰属性的其余阐明:
①动态变量随着类的加载而加载。能够通过“类. 动态变量”的形式进行调用
②动态变量的加载要早于对象的创立
③因为类只会加载一次,则动态变量在内存中也只会存在一份。存在在办法区的动态域中。④ 类变量 实例变量
类 yes no
对象 yes yes
类变量 vs 实例变量的内存解析
4. 应用 static 润饰的办法:静态方法
① 随着类的加载而加载,能够通过 "类. 静态方法" 的形式进行调用
② 静态方法 非静态方法
类 yes no
对象 yes yes
③ 静态方法中,只能调用动态的办法或属性
非静态方法中,既能够调用动态的也能够调用
非动态的办法和属性
-
static 留神点:
在动态的办法内,不能应用 this、super 关键字
- 开发中如何确定一个属性是否要申明为 static?
属性是能够被多个对象共享的,不随着对象的不同而不同的
开发中如何确定一个办法是否要申明为 static?
操作动态属性的办法,通常设置为 static 的
工具类中的办法,习惯上申明为 static 的
eg: Math、Arrays、Collections
单例设计模式
要解决的问题
采取肯定的办法,保障在整个软件系统中,对某个类只能存在一个对象实例。
具体代码的实现:
饿汉式:
//1. 私化类的结构器
class Bank(){private Bank(){
}
//2. 外部创立类的对象
//4. 要求此对象也必须申明为动态的
private static Bank instance = new Bank();
//3. 提供公共的动态的办法,返回类的对象
public static Bank getInstance(){return instance;}
}
懒汉式
class Order{
//1. 私化类的结构器
private Order(){
//2. 申明以后类的对象,不初始化
//4. 此对象也必须申明为动态的
//3. 申明 public static 的返回以后类对象的办法
public static Order getInstance(){if(instance == null){instance = new Order();
}
return instance;
}
两种形式的比照
饿汉式:
害处:对象加载工夫过长
益处:饿汉式是线程平安的
懒汉式:
益处:提早对象的创立
目前写法的害处:线程不平安 —> 到多线程内容时再批改
main()办法的应用阐明
main() 办法作为程序的入口
main() 办法加上 static 也是一个一般的静态方法
main() 办法能够作为咱们与控制台交互的形式(之前,用 Scanner)
代码块
代码块的作用
初始化类、对象的信息
分类
代码块如果应用修饰符,只能用 static
动态代码块 vs 非动态代码块
实例化子类对象时,波及到子父类中动态代码块,非动态代码块,结构器的加载程序
由父及子,动态后行。
父类动态代码块 → 子类动态代码块 → 父类非动态代码块、结构器的执行 → 子类非动态代码块、结构器的执行
对属性可赋值的地位:
默认初始化
显示初始化
结构器中初始化
有了对象后,通过“对象. 属性”或“对象. 办法”的形式进行赋值
在代码块中赋值
执行的先后顺序 1 →2/5 → 3 → 4
final
能够用来润饰:
类、办法、变量(属性、局部变量)
具体的
final 用来润饰一个类:此类不能被其余类所继承
比方:String System StringBuffer
final 用来润饰办法:此办法不能够被重写
比方:Object 类中的 getClass();
final 用来润饰变量:此时“变量”就称为是一个常量
①润饰属性
②润饰局部变量
尤其是应用 final 润饰形参时,表明此形参
是一个常量。当调用此办法时,给常量形
参赋一个实参,一旦赋值,就只能在办法体内应用此形参,但不能从新赋值。
static final 用来润饰属性:全局常量
抽象类 abstract 关键字
用来润饰 类和办法
abstract 用来润饰的类 称为 抽象类
此类不能实例化
抽象类中肯定有结构器,便于子类实例化时调用(波及:子类对象实例化的全过程)
开发中,都会提供抽象类的子类,让子类对象实例化,实现相干的操作
——> 形象的应用前提:继承性
abstract 润饰办法:形象办法
形象办法只有办法的申明,没有办法体
蕴含形象办法的类,肯定是一个抽象类。反之,抽象类中能够没有形象办法
若子类重写了父类中所有的形象办法后,此子类方可实例化
若子类没有重写父类中所有的形象办法,则此子类也是一个抽象类,须要用 abstract 润饰
留神点
abstract 不能用来润饰属性、结构器等构造
也不能润饰 private 办法,static 办法,final 的办法,final 的类
模板办法设计模式
在软件开发中实现一个算法时,整体步骤很固定、通用,这些步骤曾经在父类中写好了。然而某些局部易变,易变局部能够形象进去,供不同的子类实现。这就是一种模板模式。
接口
概述
因为 java 不反对多重继承,有了接口,就能够失去多重继承的成果
接口应用 interface 来定义
Java 中,接口和类是两个并列的构造
一个类能够实现多个接口
如何定义接口:定义接口中的成员
JDK7 以前,只能定义全局常量和形象办法
全局常量:public static final 的 但书写时,能够省略
形象办法:public abstract 的
JDK8:除了定义全局常量和形象办法外,还能够定义静态方法、默认办法
接口中不能定义结构器的,意味着接口不能实例化
implements
Java 开发中,接口通过让类去实现(implements)的形式来应用
如果实现类笼罩了接口中所有的形象办法,则此实现类就能够实例化
如果实现类没笼罩接口中所有的形象办法,则此实现类仍未一个抽象类
Java 能够实现多个接口
补救了单继承性的局限性
格局:class AA extends BB implements CC,DD,EE
** 接口与接口之间能够继承,而且能够多继承
接口的具体应用,体现多态性
接口,实际上能够看做是一种标准
** 领会面向接口编程
外部类
Java 容许将一个类 A 申明在另一个类 B 中,则类 A 就是外部类,B 称为外部类