static 修饰方法
1、static修饰的方法被称之为静态方法也叫作类方法,加static的方法,可以通过类名直接访问,也可以通过对象名访问,而不加static只能通过对象名访问,加了static的方法,不能再内部写this,因为直接用类名点方法的时候,没有当前对象
注:static修饰的方法一般不通过对象名称访问:访问时会提示 不应该通过类实例对象访问静态变量。最好是通过 类.对象 的方式调用。
2、加了static的方法,不能再方法内部访问非static的属性和行为;
原因:1、在静态方法的内部无法确认非static的内容属于哪个对象,它是通过类名调用,这时没有对象----这就相当于工具类
2、static修饰的方法,在类加载的时候是被首先加载的,然后加载非static内容,所以加载static时 是不知道非static内容的
总结:只有调用的时候无需考虑对象时,才定义为static---工具类的工具方法,可以被定义为static方法
工具类:没有产生对象的必要,只要实现某个功能即可,哪个对象完成的都没有影响,比如:分页,转换时间,连接数据库等
工具方法:该方法在完成功能的时候,不会对对象的数据产生任何影响
凡是用static修饰的都有量大共性:
1、该内容与对象无关,只与类有关;
2、该内容总会在类加载器有特殊操作
注:static不能用来修饰构造方法,因为static修饰的是与对象无关的内容,而构造确实生成对象的五大方法之一
初始化块--------{
在这个块中可以书写任何语句
}
1、这是一个没有方法名、参数列表、返回类型的方法体
2、在这个块中可以书写任何语句,它在产生对象的时候自动被调用,它是用来美new出一个对象,就用来执行初始化的,又被称之为实例初始化块,这是与构造相重叠的,写在初始化块中的代码都可以写在构造方法中;但是他的执行顺序是先执行初始化块在执行构造
Static{
}----静态初始化块
1、与对象无关,满足static的特征,一个类只执行一次;
2、执行的时机是加载的时候
总结:可以再静态初始化块中书写一些运行前的准备工作,只运行一次,没有别的可以替代,可以节约运行时间和运行速度;
当调用者产生一个对象的时候
1、在堆中划分对象的空间;
2、在空间划分属性
3、执行实例初始化块
4、执行属性的赋值;
5、执行构造方法当中我们书写好的代码;
相关推荐:https://www.cnblogs.com/eason-chan/p/3644660.html
补充
final的作用
被final修饰的类不可以被继承
被final修饰的方法不可以被重写
被final修饰的变量不可变
相当于是被final修饰的对象不能重新new 一个赋值或者把另一个新的对象之间赋值给该对象,但是该对象的值是可以修改的,例如:
用了map、list、数组、StringBuilder 、StringBuffer .它们的内容是可以修改的。
String和基本数据类型修饰的变量。同样final表示地址不能修改,但是地址的存储跟常量的值有关,给他重新赋值会指向另外一个对象,地址就改变了。
关于String str = "abc"的内部工作。Java内部将此语句转化为以下几个步骤:
(1)先定义一个名为str的对String类的对象引用变量:String str;
(2)在栈中查找有没有存放值为"abc"的地址,如果没有,则开辟一个存放字面值为"abc"的地址,接着创建一个新的String类的对象o,并将o的字符串值指向这个地址,而且在栈中这个地址旁边记下这个引用的对象o。如果已经有了值为"abc"的地址,则查找对象o,并返回o的地址。
(3)将str指向对象o的地址。
使用String str = "abc";的方式,可以在一定程度上提高程序的运行速度,因为JVM会自动根据栈中数据的实际情况来决定是否有必要创建新对象,而对于String str = new String("abc");的代码,则一概在堆中创建新对象,而不管其字符串值是否相等,是否有必要创建新对象,从而加重了程序的负担。