
正文
java静态代码块坏处,java 静态块
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
关于java静态代码块的详细运行过程问题
先说执行顺序:我们在new一个对象时,如果类还没加载,就需要先将类加载到内存,此时就会执行静态代码块,在创建对象时,是先执行代码块,然后执行构造器。
java中首先是静态块先执行,静态方法,最后是构造函数。
执行次数不同 静态块只执行一次,初始化块可以执行多次。作用不同 静态初始化块仅能初始化类变量,即static修饰的数据成员。非静态初始化块可以初始化类的实例变量。
java静态资源(静态方法,静态属性)是程序一运行就加载到jvm中的。类中的静态属性会被加入到类对象(也可以叫做类的模板,是类的描述) 的构造器中,静态方法也会被加入到类对象中。
类中的静态属性会被加入到类对象(也可以叫做类的模板,是类的描述) 的构造器中,静态方法也会被加入到类对象中。
相关问答
Q1: java中静态变量和静态方法的优缺点
1、缺陷是:静态方法在访问本类的成员时,只允许访问静态成员(即静态成员变量和静态方法),而不允许访问实例成员变量和实例方法;实例方法则无此限制。
2、不好的地方: 1,对面向对象语言中,可能破坏了面向对象的结构,因为使用静态类或者静态方法,就失去了extend的特征了。 2,对于系统架构来说,可能感觉起来不是很合理。
3、静态变量是一个引用。这种情况比较特殊,主要问题是由于静态变量是一个对象的引用,那么必须初始化这个对象之后才能将引用指向它。因此如果要把一个引用定义成static的,就必须在定义的时候就对其对象进行初始化。
4、如果这个方法前面没有static 比如 public add(){} 那么先要person p=new person();然后用p.add();类加载器在加载这个类的时候就已经实例化了这个类。
5、一般静态变量都是公用的、全局的,程序一启动就会在内存开辟一块空间,存放它们。静态的不必实例化就能直接使用,是说在没有生成任何对象时就能运用该方法,所以静态方法里不能对非静态的成员变量做操作。
6、静态方法属于类,而不是属于类的实例。因此,可以直接通过类名调用静态方法,无需创建类的实例对象。静态方法没有访问实例变量和实例方法的能力,因为静态方法不依赖于实例,只依赖于类本身。
Q2: 为什么在java高并发系统中不建议写静态方法
1、坏处:初始化加载,比较占内存,所以不经常用的方法,不建议加此关键字。
2、不好的地方: 1,对面向对象语言中,可能破坏了面向对象的结构,因为使用静态类或者静态方法,就失去了extend的特征了。 2,对于系统架构来说,可能感觉起来不是很合理。
3、内存空间的使用问题。静态空间在程序结束之前一直存在,从而造成内存空间使用率不高。另一个问题就是如果在函数中使用了静态变量,那么这个函数就会保存上一次调用的一个状态,有时这会导致一些比较微妙的错误。
4、接口不可以实现方法,只可以定义方法,所以不能使用静态方法(因为静态方法必须实现)。要实现静态方法的继承,可以使用抽象类,抽象类中实现静态的方法后,其他类继承。
5、因为静态方法是没有状态的,接收一个参数,然后返回一个参数或者或者对该参数做什么操作。而非静态方法与该对象有关,可以改变该方法所在的类的对象的状态。构造方法可以设置一个对象的初始状态,这与静态方法冲突了。
6、不可以。我是这样理解的:抽象类是不能实例化的,即不能被分配内存,而static修饰的方法在类实例化之前就已经别分配了内存,这样一来矛盾就出现了:抽象类不能被分配内存,而static方法必须被分配内存。
Q3: 关于使用静态类和静态方法有哪些好处和坏处!
1、好处是:在外部调用静态方法时,可以使用类名.方法名的方式,也可以使用对象名.方法名的方式。而实例方法只有后面这种方式。也就是说,调用静态方法可以无需创建对象。
2、使用静态类的优点在于,编译器能够执行检查以确保不致偶然地添加实例成员。编译器将保证不会创建此类的实利。静态类是密封的,因此不可被继承。
3、静态方法效率上要比实例化高,静态方法的缺点是不自动进行销毁,而实例化的则可以做销毁。静态方法和静态变量创建后始终使用同一块内存,而使用实例的方式会创建多个内存。
4、静态的变量或者方法被称为是共享的,也就是说静态的东西可以不需要用对象.静态变量就可以拿到,那么这样就不需要new一个对象就可以拿到静态变量。对象如果new的太多,会浪费性能,当然,静态也有其敝处。
5、这 有两个好处,第一,不管定义多少个存款类对象,利息数据成员都共享分配在全局数据区的内存,所以节省存储空间。
Q4: java里的静态类占的内存大吗
1、静态的类确实会在内存中开辟一块静态区域来存储数据,并且会一直占据内存。但是他只占用一块内存,但是动态的也许会对一个类创建多个对象,这样的话就会比静态的类占据的内存多了。
2、是存储在 内存的 堆栈里 占用内存大小是 根据 数据类型决定的 静态存储类型的,一定是 全局变量 。不会在程序执行完之前 释放内存 ,而一般 局部变量 在生命周期结束后,会释放内存。
3、本身不可升级,重写,这要看一个软件产品的目的是什么了.为了方便,不用实例化,但这样程序编译运行时就占用了系统资源 静态的属性和方法在程序启动的时候,就全部装入内存的,而不管这些方法、属性以后有没有用到。
Q5: java多线程调用静态方法安全吗
1、但是,如果一个static变量被设计成只读(即不可变的),那么它就是线程安全的,因为它不会发生并发访问问题。final修饰的变量是线程安全的,因为final变量在初始化之后就不能再被修改,不存在并发访问问题。
2、只要不使用全局变量的都是安全的。如果使用全局变量,就要有对应的处理,例如锁,例如localthread。
3、另一个问题就是如果在函数中使用了静态变量,那么这个函数就会保存上一次调用的一个状态,有时这会导致一些比较微妙的错误。特别的,这样的函数是不可重入的,不能在多线程或者多进程中进行使用。
4、由于静态变量和静态方法是类的属性,因此它们的生命周期比对象实例更长。因此,在修改一个静态变量或者静态方法时,需要注意多线程并发的问题。
关于java静态代码块坏处和java 静态块的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。





