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 读书笔记知识点总结 #### 一、万事万物皆对象 1. **对象存储位置** - **寄存器**:程序无法直接控制。 - **栈(Stack)**:存储基本类型数据和对象引用,但对象本身不在此处。 - **堆(Heap)...
通过以上总结,我们可以更深入地理解《Thinking in Java》中关于构造器、方法重载、对象引用、静态与非静态方法调用、垃圾回收机制、对象初始化以及数组和可变参数列表等核心概念和技术细节。这些知识点对于深入理解...
《Thinking in Java》是Bruce Eckel的经典之作,它深入浅出地讲解了Java语言的核心概念和技术,对于初学者和有经验的开发者来说都是极好的学习资源。这篇读书笔记主要聚焦在第五部分的内容,可能涵盖了类、对象、...
### Thinking In Java的第一章知识点概览 #### 一、面向对象的基本概念 在《Thinking In Java》这本书的第一章中,作者介绍了Java的核心理念——一切皆对象。Java采用了一种统一的语法来处理所有事物,这是因为Java...
JAVA学习日记---Thinking in Java学习笔记 第5章总结 第五章 初始化与清理 5.1 用构造器确保初始化 1.构造器命名必须与类名相同 2.构造器也是方法,满足方法的各种特征,无参数的构造器称为默认构造器,默认构造...
4. 在子类的构造器中,隐式地包含对基类构造器的调用,以确保基类的初始化。 三、继承和复用的关系 继承和复用是两种不同的概念。继承是一种机制,允许一个类继承另一个类的所有成员变量和成员方法。复用则是指在...
例如《Thinking in Java》、《Java核心技术卷》以及Oracle的Java教程,都是深入理解Java的好资源。 通过系统地学习这些知识点,你将能够全面掌握Java JDK 6.0,并为未来的Java开发工作打下坚实的基础。随着技术的...
《Thinking in Java》是Java编程领域的一本经典著作,它深入浅出地讲解了Java语言的核心概念和技术。...以上是对《Thinking in Java》笔记中部分关键知识点的详细解析,这些内容构成了Java编程的基础和核心。
局部内部类定义在方法、构造器或块中,其作用域仅限于该方法、构造器或块。这种类型的内部类只能访问其所在范围内的变量,包括final的局部变量。 3. **匿名内部类** 匿名内部类没有名称,通常用于快速实现一个...
《Thinking in Java》是一本深度解析Java编程语言的权威书籍,笔记主要涵盖了Java的核心概念和技术。以下是基于笔记内容的关键知识点: 1. **类与对象**: - 类是对象的蓝图,它定义了一组相似对象的属性(数据...
"Mastering Java: 一些旧的Java笔记" 提供了一个深入学习Java的资源,这可能是一个学习者或开发者在阅读《Thinking in Java》一书时所做的笔记。这本书由Bruce Eckel编写,是Java编程领域的一部经典著作,旨在帮助...
此外,Sun Microsystems Press的在线教程和Bruce Eckel的《Thinking in Java》也是重要的参考资料。课程为期14周,每周两次80分钟的连续讲座,中间有短暂休息。课程笔记通常在每堂课前的周二发布,并通过Blackboard...
9. Java类、对象实例、构造器和方法的创建:面向对象编程的基本组成部分。 面向对象设计和编程的讨论涉及以下几个核心概念: 1. 对象:现实世界中可以感知或不可感知的实体。 2. 对象的状态和行为:对象所拥有的...