final的特点:
可以有一次赋值的机会,赋值之后就不允许变化了
final可以修饰常量,也可以修饰变量
场景举例:数据库连接的信息放在配置文件中,在构造函数中读取,然后存储的final变量中。程序运行期间,数据库连接信息不允许发送变动。
public Dog{
public final int aa;
}
//成员变量是final,则必须要在构造函数中初始化
public Dog{
public static final int aa;
}
//增加了static修饰符之后,static和对象无关,则aa调用模式为dog.aa。这样就绕过了构造函数,则必需要初始化,而不能在构造函数中初始化
final修饰一个引用类型,它锁定的是引用地址,而不是应用对象中的内容
final Dog d2 = new Dog();
d2.name = "欢欢";
d2.playDisc();
d2 = d1; //此处报错
static关键字总结:
static变量的特点,生命期,作用域?
特点:和对象无关,允许通过类名直接调用
生命期与作用域(局部变量):
定义在函数体内的变量(基本类型、引用类型)
作用域:定义局部变量的{}范围内
生命期:基本类型当超过}范围时,会被GC垃圾回收机制回收
引用型变量查看引用计数
局部变量是线程独享的模式,内个线程都有自己的内存空间
生命期与作用域(成员变量):
作用域:类中的所有方法
生命期:基本类型属性和所在对象的生命期一直
引用类型组合对象的生命期,可能是在对象外面传创建的,和当前对象无关
很多对象的生命期是有容器管理的@Bean Spring容器,JavaEE容器(Tomcat,Weblogic)
Dog d2 = null; //在stack中分配了一个4字节的空间,用于存放地址
d2 = new Dog(); //new Dog()在heap中分配了一块内存,并返回这块内存的首地址
例:static变量:
public static int bb = 100; //不能定义在方法内,智能作为成员变量存在
作用域:Dog.bb相当于一个全局变量,可以在类的外部被大量调用
生命期:static变量,可以被修改,从第一次调用的时候,就开始分配内存。直到运行结束,这块内存才被释放。
public Class Dog{
public static int aa = 10;
static{
aa = 100;
}
public static void main(String[] args){
System.out.println(Dog.aa);
}
}
不管如何调用Dog中的信息,都会首先执行public static int aa = 10;然后是静态代码块赋值,静态变量赋值和静态代码块赋值,智能被调用一次,静态代码块的存在,就是为了给静态变量初始化
静态方法不能调用所在Class的属性,因为属性是属于对象的,而静态方法是属于Class
static方法的特点?
static变量的序列化
static内部类的特点?
static在集群中的特点?
static变量与c的全局变量的对比
static变量与ServletContext变量、application对象对比?
public static final double PAI = 3.1415926;
继承关系(is-a)、组合关系(has-a)
设计模式:优先使用组合,然后才是继承
举例:
TClass{
List<Student> stus;
}
Student{
TClass tclass
}