`
yxwang0615
  • 浏览: 561307 次
  • 性别: Icon_minigender_1
  • 来自: 青岛
社区版块
存档分类
最新评论

thinking in java 4 笔记之构造器

    博客分类:
  • java
阅读更多
1.由于构造器的名称必须与类名完全相同,所以“每个方法首字母小写”的编码风格并不适用于构造器,因为类名首字母是大写的。
2.根据方法的返回值来区分重载方法是性不通的。
3.如果你写的类中没有构造器,则编译器compiler会自动帮你创建一个默认的构造器。如果已经定义了一个构造器(无论是否有参数),compiler就不会帮你自动创建默认构造器。
4.static关键字不能应用于局部变量,只能作用于域(域就是范围的意思
例{}之间,称为一块域,用来描述变量适用范围,全局变量的域是整个类,局部变量只适用于他所在的{}之间)。
5.构造器的初始化顺序:在类的内部,变量定义的先后顺序决定了初始化的顺序。即使变量定义散布于方法定义之间,他们仍然会在任何方法(包括构造器)被调用之前得到初始化。
eg:
//窗户类:
public class Window {
	//when the constructor is called to create 
	//a window object,you'll see a message:
	public Window(int marker) {
		System.out.println("Window(" + marker + ")");
	}	
}
//房子类:
public class House {
	Window w = new Window(1); //before constructor

	public House() {
         w1 = new Window(2); //reinitialize w1,假设构造器首先初始化,
                                 //那么这里会报w1未定义的错误
	}
    public void printf()
    {
    	System.out.println("system out something...");
    };
	Window w1 = new Window(3); //after constructor
	
}

    public  static void main(String[] args) {
           House h = new House();
           h.printf();
     }/**Output
       Window(1)
       Window(3) 
       Window(2)
       system out something... */     
}

6.静态变量和非静态变量的初始化顺序
public class Bowl {
	Bowl(int marker)
	{
		System.out.println("Bowl(" + marker + ")");
	}
	void f1(int marker)
	{
		System.out.println("f1(" + marker + ")");
	}
	//System.out.println();
}

public class Table {
	static Bowl bowl1 = new Bowl(1);

	public Table() {
		System.out.println("Table()");
		bowl2.f1(1);
	}
	void f2(int marker)
	{
		System.out.println("f2(" + marker + ")");
	}
	static Bowl bowl2 = new Bowl(2);	
}

public class Cupboard {
	Bowl bowl3 = new Bowl(3);
	static Bowl bowl4 = new Bowl(4);
	public Cupboard() {
		System.out.println("Cupboard()");
		bowl4.f1(2);
		
	}
	void f3(int marker)
	{
		System.out.println("f3(" + marker + ")");
	}
	static Bowl bowl5 = new Bowl(5);
	
}

public class StaticInitialization {
	public static void main(String[] args) {
		System.out.println("creating new Cupboard()in main");
		new Cupboard();
		System.out.println("creating new Cupboard()in main");
		new Cupboard();
		table.f2(1);
		cupboard.f3(1);
	}
	static Table table = new Table();
	static Cupboard cupboard = new Cupboard();
}
/*Output:
Bowl(1)
Bowl(2)
Table()
f1(1)
Bowl(4)
Bowl(5)
Bowl(3)
Cupboard()
f1(2)
creating new Cupboard()in main
Bowl(3)
Cupboard()
f1(2)
creating new Cupboard()in main
Bowl(3)
Cupboard()
f1(2)
f2(1)
f3(1)
*/


类初始化时按先static后非static变量初始化的顺序原则初始化各个变量,两次执行new Cupboard(),但第二次只打印了Bowl(3),是因为第一次中某些static变量已经静态初始化过了,静态初始化动作只能进行一次。

从上述打印中看出,类中成员的初始化顺序为(从早到晚):
静态变量 > 非静态变量 > 构造器 > 方法


详细的顺序如下:
(1) 先是父类的static变量和static初始化块

(2)然后是子类的static变量和static初始化块  

(3)父类的实例变量、初始化快

(4)父类的构造方法

(5)子类的实例变量、初始化快

(6)子类构造方法
分享到:
评论

相关推荐

    Thinking in Java读书笔记

    ### Thinking in Java 读书笔记知识点总结 #### 一、万事万物皆对象 1. **对象存储位置** - **寄存器**:程序无法直接控制。 - **栈(Stack)**:存储基本类型数据和对象引用,但对象本身不在此处。 - **堆(Heap)...

    thinking in java读书笔记

    通过以上总结,我们可以更深入地理解《Thinking in Java》中关于构造器、方法重载、对象引用、静态与非静态方法调用、垃圾回收机制、对象初始化以及数组和可变参数列表等核心概念和技术细节。这些知识点对于深入理解...

    thinking in java 读书笔记(五)

    《Thinking in Java》是Bruce Eckel的经典之作,它深入浅出地讲解了Java语言的核心概念和技术,对于初学者和有经验的开发者来说都是极好的学习资源。这篇读书笔记主要聚焦在第五部分的内容,可能涵盖了类、对象、...

    Thinking In Java的笔记_第一章

    ### Thinking In Java的第一章知识点概览 #### 一、面向对象的基本概念 在《Thinking In Java》这本书的第一章中,作者介绍了Java的核心理念——一切皆对象。Java采用了一种统一的语法来处理所有事物,这是因为Java...

    java基础补足和thinking In Java学习.rar

    JAVA学习日记---Thinking in Java学习笔记 第5章总结 第五章 初始化与清理 5.1 用构造器确保初始化 1.构造器命名必须与类名相同 2.构造器也是方法,满足方法的各种特征,无参数的构造器称为默认构造器,默认构造...

    thinking in java读书笔记(2)

    4. 在子类的构造器中,隐式地包含对基类构造器的调用,以确保基类的初始化。 三、继承和复用的关系 继承和复用是两种不同的概念。继承是一种机制,允许一个类继承另一个类的所有成员变量和成员方法。复用则是指在...

    Java JDK 6.0 学习笔记.pdf

    例如《Thinking in Java》、《Java核心技术卷》以及Oracle的Java教程,都是深入理解Java的好资源。 通过系统地学习这些知识点,你将能够全面掌握Java JDK 6.0,并为未来的Java开发工作打下坚实的基础。随着技术的...

    thinkinginjava笔记.pdf

    《Thinking in Java》是Java编程领域的一本经典著作,它深入浅出地讲解了Java语言的核心概念和技术。...以上是对《Thinking in Java》笔记中部分关键知识点的详细解析,这些内容构成了Java编程的基础和核心。

    thinkingInJava10:内部类

    局部内部类定义在方法、构造器或块中,其作用域仅限于该方法、构造器或块。这种类型的内部类只能访问其所在范围内的变量,包括final的局部变量。 3. **匿名内部类** 匿名内部类没有名称,通常用于快速实现一个...

    thinkinginjava笔记[参照].pdf

    《Thinking in Java》是一本深度解析Java编程语言的权威书籍,笔记主要涵盖了Java的核心概念和技术。以下是基于笔记内容的关键知识点: 1. **类与对象**: - 类是对象的蓝图,它定义了一组相似对象的属性(数据...

    MasteringJava:一些旧的Java笔记

    "Mastering Java: 一些旧的Java笔记" 提供了一个深入学习Java的资源,这可能是一个学习者或开发者在阅读《Thinking in Java》一书时所做的笔记。这本书由Bruce Eckel编写,是Java编程领域的一部经典著作,旨在帮助...

    Java Object-Oriented Programming.ppt

    此外,Sun Microsystems Press的在线教程和Bruce Eckel的《Thinking in Java》也是重要的参考资料。课程为期14周,每周两次80分钟的连续讲座,中间有短暂休息。课程笔记通常在每堂课前的周二发布,并通过Blackboard...

    summary.pdf

    9. Java类、对象实例、构造器和方法的创建:面向对象编程的基本组成部分。 面向对象设计和编程的讨论涉及以下几个核心概念: 1. 对象:现实世界中可以感知或不可感知的实体。 2. 对象的状态和行为:对象所拥有的...

Global site tag (gtag.js) - Google Analytics