ps是开博记录的day1 其实已经学了一小段时间java基础
static关键字的使用
static 静态的
static 可以用来修饰:属性、方法、代码块、内部类
使用static 修饰属性:静态变量/类变量。
3.1 属性,按是否使用static修饰,又分为静态属性 和非静态属性(实例变量)
实例变量:创建类的多个对象,每个对象都独立拥有一套类中的非静态属性。当修改其中一个对象中的非静态属性时,不会导致其他对象中同样的属性值的修改。
静态变量:创建类的多个对象,每一个对象都共享同一个静态变量。当通过某一个对象修改静态变量时,会导致其他对象调用此静态变量时,是被修改过得。
3.2 static 修饰属性的其他说明:
①静态变量随着类的加载而加载。可以通过“类.静态变量”的方式进行调用
②静态变量的加载要早于对象的创建
③由于类只会加载一次,则静态变量在内存中也只会存在一份。存在在方法区的静态域中。
④类变量实例变量类yesno对象yesyes
类变量 vs 实例变量的内存解析
4.使用static修饰的方法:静态方法
① 随着类的加载而加载,可以通过 "类.静态方法" 的方式进行调用②静态方法非静态方法类yesno对象yesyes③ 静态方法中,只能调用静态的方法或属性非静态方法中,既可以调用静态的也可以调用非静态的方法和属性
- 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学习笔记 day1】Java允许将一个类A声明在另一个类B中,则类A就是内部类,B称为外部类