`

构造方法是静态的吗?

阅读更多
public class Test  {
	private int k = printInit("Beetle.k initialized");
    int j;
    
	public Test() {
		System.out.println("k = " + k);
		System.out.println("j = " + j);
	}

	private static int x2 = printInit("static Beetle.x2 initialized");
	
	static int printInit(String s) {
		System.out.println(s);
		return 47;
	}

	public static void main(String[] args) {
		System.out.println("Beetle constructor");
		new Test();
	}
}

 结果:

static Beetle.x2 initialized
Beetle constructor
Beetle.k initialized
k = 47
j = 0

 

可见访问构造方法时同时也执行了静态初始化,根据《Thinking in Java 4》,类加载和静态成员初始化是等价的,而类加载的触发条件几乎就是but loading also occurs when a static field or static method is accessed.

由此得出:构造方法就是static method了。

 

另一例:

public class Test1 {
	static {
		RuntimeException ex = new RuntimeException();
		ex.fillInStackTrace();
		ex.printStackTrace();
	}

	public Test1() {
		throw new RuntimeException();
	}

	public static void main(String[] args) throws Exception {
		new Test1();
	}
}

 结果:

java.lang.RuntimeException
    at Test1.<clinit>(Test1.java:4)
Exception in thread "main" java.lang.RuntimeException
    at Test1.<init>(Test1.java:9)
    at Test1.main(Test1.java:13)

 

以上Test1.<init>是发生在 throw new RuntimeException(); 一行,但不清楚实质是否如形式所标示的那样类似一个init静态方法调用,还是暗藏对象对init方法的调用?

 

因为再看:

public class Test1 {
	static {
		RuntimeException ex = new RuntimeException();
		ex.fillInStackTrace();
		ex.printStackTrace();
	}

	public Test1() {
		//throw new RuntimeException();
	}
	
	public void hello() {
		throw new RuntimeException();
	}

	public static void main(String[] args) throws Exception {
		Test1 t = new Test1();
		t.hello();
	}
}
 

结果:

java.lang.RuntimeException
    at Test1.<clinit>(Test1.java:4)
Exception in thread "main" java.lang.RuntimeException
    at Test1.hello(Test1.java:13)
    at Test1.main(Test1.java:18)

非静态方法hello抛异常的表示形式也是如此 类名.方法名

分享到:
评论

相关推荐

    c#面向对象静态类、构造方法、静态方法介绍.zip

    在C#编程中,面向对象是核心特性之一,它提供了静态类、构造方法以及静态方法等概念,这些是创建高效、可维护代码的关键元素。让我们深入探讨这些知识点。 首先,静态类是C#中不能被实例化的类,它们只包含静态成员...

    java面试题静态加载顺序构造方法

    java面试题静态加载顺序构造方法 继承与static 面试题目如下:请写出程序执行完成之后的结果。 package extend; public class X { Y y=new Y(); static{ System.out.println("tttt"); } X(){ System....

    构造函数与静态块的执行顺序

    在探讨继承中子类与父类构造函数及静态块的执行顺序时,我们首先需要理解构造函数和静态块的基本概念及其在Java中的作用。构造函数主要用于初始化对象的状态,而静态块则是在类加载到内存中时执行的一段代码,通常...

    Java常见笔试、面试题目深度剖析,方法重写详解、静态代码块与构造方法执行顺序问题

    本文将深度剖析几个常见的Java面试题目,包括方法重写、静态代码块和构造方法的执行顺序。 首先,我们来讨论**方法重写(Override)**。在面向对象编程中,子类可以继承父类的属性和方法,有时需要根据自己的需求对...

    java构造方法

    在创建一个对象时,Java首先初始化类中的静态成员,然后是实例成员,最后才是构造方法。这意味着如果一个类中有多个成员变量,它们的初始化顺序将按照代码中声明的顺序进行。 #### 八、总结 构造方法是Java编程...

    java 静态非静态 字段方法 子类父类构造_初始化顺序!

    java 静态_非静态 字段_方法_代码块 子类父类构造_初始化顺序! 三个class 让你清清楚楚 第一个class java代码如下: package initialOrder; class Parent { // 静态变量 public static String p_StaticField...

    Java构造方法解析.zip

    虽然不是必须的,但在某些情况下(如对象池、私有构造方法等)静态工厂方法可能更为合适。 总结起来,Java构造方法是初始化类实例的关键工具,它们允许我们在创建对象时定制初始化过程,确保对象的正确状态。理解并...

    构造方法11_2.zip

    - 构造方法不能被声明为`static`,因为静态成员属于类,而构造方法是用于初始化对象的。 - 构造方法不能返回任何值,包括`void`。其返回类型始终是隐含的`void`。 - 构造方法在对象创建时自动调用,程序员不能...

    Java语言中的构造方法私有化.pdf

    在Java中,除了单态模式,构造方法私有化还常用于其他设计模式,如工厂模式(Factory Pattern)和抽象工厂模式(Abstract Factory Pattern),以及作为静态工具类(Static Utility Class)的实现方式,防止这些类被...

    浅析C#静态类,静态构造函数,静态变量

    静态构造函数是用于初始化静态数据成员或者执行静态初始化的特殊方法。它在程序首次引用该类的静态成员时执行,并且只会执行一次。在 `Cow` 类的示例中,静态构造函数 `static Cow()` 被用来初始化静态变量 `count`...

    Java构造方法解析.pdf

    构造方法在创建对象时由系统自动调用,通常用于初始化类的非静态成员变量。下面详细解析Java构造方法的特性和使用方法。 构造方法的特性: 1. 方法名与类名相同:构造方法的名字必须与类名完全相同,这是Java语法...

    java中静态代码块与构造方法的执行顺序判断

    在Java编程语言中,了解静态代码块和构造方法的执行顺序是至关重要的,尤其是在处理类的初始化和对象的创建时。下面将详细解释这些概念及其执行逻辑。 首先,静态代码块(也称为静态初始化器)是由`static`关键字...

    论文研究-轻量级静态分析器构造方法综述.pdf

    由于对分析对象有严格的限制且开发难度大,传统的重量级...首先分析比较了两种静态分析器,详细介绍了已有的轻量级静态分析器构造方法;分析了已有方法的优缺点,并指出现存的问题;最后展望了本领域研究的发展趋势。

    java中构造方法和方法全面解析.pdf

    3. **权限修饰符**:构造方法可以拥有公共(public)、受保护(protected)、私有(private)或默认(包级私有)的访问修饰符,但不能包含抽象(abstract)、最终(final)、本地(native)、静态(static)或同步...

    论构造方法的方法论.zip

    在IT行业中,构造方法是面向对象编程中的一个关键概念,特别是在Java、C#等语言中。这个概念对于理解和实现类的实例化至关重要。"论构造方法的方法论.zip"的文件标题暗示了这是一个深入探讨构造方法设计策略的资源,...

    C# 2.3.1.构造方法的使用

    理解并熟练运用构造方法,包括其重载、基类构造方法的调用、静态构造方法等特性,将有助于编写出更高效、更具可维护性的代码。通过观看常老师的视频教程,初学者可以深入掌握这些概念,为后续的C#学习打下坚实的基础...

    生成静态的方法

    下面我们将深入探讨静态方法、静态变量以及静态类等相关的知识点。 1. 静态方法 静态方法是与类关联,而不是与类的实例关联的方法。这意味着我们不需要创建类的实例就可以调用静态方法。它们在内存中只有一份,且在...

    JAVA技术专题综述之构造方法篇

    ### JAVA技术专题综述之构造方法篇 #### 构造方法概述 构造方法是一种特殊的方法,主要用于初始化新创建的对象。每个类都有一个或多个构造方法,如果没有显式地定义构造方法,Java会自动提供一个默认的无参构造...

    C# 控制台入门 修饰符 构造函数 虚方法 静态字段 接口 抽象类 循环 适合入门

    一个简短的控制台程序,使用了构造函数,虚方法 静态类,静态字段,接口,抽象类,继承,适合刚入门的人看

    EXT dojochina Ext类构造方法.rar

    除了构造方法,Ext类还涉及其他重要概念,如配置对象(config object)、混入(mixins)和静态方法(statics)。配置对象允许我们在创建组件实例时传递配置,如大小、样式等。混入可以将一组方法或属性添加到多个类...

Global site tag (gtag.js) - Google Analytics