浅谈Java中类的实例化步骤

发布时间:2020-10-22 10:19:20 作者:车到山前是死路
来源:脚本之家 阅读:121

就个人的一些看法简单的 谈谈static。

就java 工程师来说,static非常容易在面试的时候被问到。

言归正传,书面上说static是静态的。其实我把它理解为“全局的”。什么叫全局的?全局的属性,全局的方法,全局的代码块。

全局属性,全局方法,比较好理解就是这个类所有的对象都共有的属性和方法。因为是整个类共有的,所以可以通过声明直接调用。我把它理解为“单例模式”的属性和方法。所谓单例模式就是指这个类声明的所有对象共享这些属性和方法。一个对象对这个属性进行了修改,所有对象再调这个属性都是修改后的值了。

下面主要说一下static修饰的代码块,面试的一大考点就是static代码块是什么时候被加载的。

首先我们需要了解一下java虚拟机对类的加载过程。首先JVM会通过classloader将类的字节码转换成相应的Class对象。其中classloader是双亲委托的方法来查找类文件的。

就是首先委托父类的classloader查找(父类也有父类就交由父类的父类查找以此类推,直到不再继承别的classloader的类),如果查找不到再由自己来查找。如果自己也找不到就抛出异常。以上是准备工作,当这个类抽次被使用,我们会显出石化这个类(如果有父类就先初始化他的父类),在初始化的过程中我们会处理static修饰的代码。就是我们这里要说的static代码块。每个类知会初始化1次。(我们可以通过改变方法 Class.forName()中的第二个参数来控制是否初始化一个类)。

以下为网上找的一个经典的例子。

面试题目如下:请写出程序执行完成之后的结果。

package extend; 
public class X { 
Y y=new Y(); 
static{ 
 System.out.println("tttt"); 
} 
X(){ 
 System.out.println("X"); 
} 
public static void main(String[] args) { 
  new Z(); 
} 
} 
class Y{ 
Y(){ 
 System.out.println("Y"); 
} 
} 
class Z extends X{ 
Y y=new Y(); 
static{ 
 System.out.println("tt"); 
} 
Z(){ 
 System.out.println("Z"); 
} 
}

先不告诉最后结果,我们先来分析下。一步一步推出结果。

整个过程就是这样了。现在知道结果了吧:

tttt
tt
Y
X
Y
Z

记住,面试有可能会标出一些语句的,让你选择这些语句的执行顺序。不过只要知道原理,就没什么难的了。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对亿速云的支持。如果你想了解更多相关内容请查看下面相关链接

推荐阅读:
  1. php中怎样实例化类?
  2. java中的实例化是什么

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

java static 中类

上一篇:如何查找YUM安装的JAVA_HOME环境变量详解

下一篇:c++中的内联函数inline用法实例

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》