1.static修饰的属性,相较于实例变量,有哪些特别之处(>=3点) 随着类的加载而加载:早于对象的创建;只要权限允许,可以通过“对象。static属性”的方式进行调用:存在于方法区的静态域 2.final可以用来修饰哪些结构,分别表示什么意思
3.类的属性赋值的位置有哪些?先后顺序为何? 默认初始化 显式初始化、代码块中初始化 构造器中初始化 通过“对象。属性”或“对象。方法”的方式赋值
static:静态的 1.可以用来修饰的结构:主要用来修饰类的内部结构 属性、方法、代码块、内部类、构造器 2.static修饰属性:静态变量(或类变量) 实例变量:我们创建了类的多个对象,每个对象都独立的拥有一套类中的费静态属性。当修改其中的一个对象中的非静态属性时,不会导致其他对象中同样的属性值的修改。 静态变量:我们创建了类的多个对象,多个对象共享了同一个静态变量,当通过某一个对象修改静态变量时,会导致其他对象调用此静态变量时,是修改过了的。 3.2 static修饰属性的其他说明: 1.静态变量随着类的加载而加载,可以通过“类.静态变量”的方式进行调用 2.静态变量的加载要早于对象的创建 3.由于类只会加载一次,则静态变量在内存中也只会存在一份,存在方法区的静态域中 6.如何判定属性和方法应该使用static关键字 属性时可以被多个对象所共享,不会随着对象的不同而不同的。 类中的常量也常常声明为static,工具类中的方法,习惯上声明为static的。比如:Math
2.单例模式 要解决的问题 所谓类的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例 具体代码的实现: 饿汉式: class Bank{
// 1.私化类的构造器 private Bank (){} //2.内部创建类的对象 //4.要求此对象也必须声明为静态的 private static Bank instance = new Bank();
// 3.提供公共的静态的方法,返回类的对象 public static Bank getInstance(){ return instance; } }饿汉式2:使用了静态 class Order{
//1.私有类的构造器 private Order(){
}// 2.声明当前类的对象,没初始化 //4.此对象也必须声明为static的 private static Order instance = null;
static{ instance = new Order(); }
懒汉式: class Order{
//1.私有化类的构造器 private Order(){ } //2.声明当前类对象,没初始化 //4.此对象也必须声明为static的1 private static Order instance = null;//3.声明public\static的返回当前类对象的方法 public static Order getInstance(){
if(instance == null){ instance = new Order(); }两种方式的对比: 饿汉式: 坏处:对象加载时间过长。 好处:饿汉式是线程安全的 懒汉式: 好处:延迟对象的创建 目前的写法坏处:线程不安全。 —>到多线程内容时,在修改
由父及子,静态先行
抽象类与抽象方法 随着继承层次中一个个新子类的定义,类变得越来越具体,而父类则更一般,更通用。类的设计应该保证父类和子类能够共享特征。有时将一个父类设计的非常抽象,以至于它没有具体的实例,这样的类叫做抽象类。 abstract关键字的使用: 1.abstract:抽象的 2.abstract可以用来修饰的结构:类、方法 3.abstract修饰类:抽象类 此类不能实例化 抽象类中一定有构造器 开发中,都会提供抽象类的子类,让子类对象实例化 abstract修饰方法:抽象方法 抽象方法只有方法的声明,没有方法体 包含抽象方法的类,一定是一个抽象类。反之,抽象类中可以没有抽象方法的。 若子类重写了父类中的所有的抽象方法,则此子类也是一个抽象类,需要使用 若子类中没有重写父类中的所有的抽象方法,则此子类也是一个抽象类,需要使用abstrqact修饰
为什么抽象类不可以使用final关键字声明?