在学习JAVA过程中,必须要了解这些基本的东西才能对读代码少些困惑,而这些细节是新手必须注意的。
总结:初始化的顺序为:
先初始化父类的静态代码--->初始化子类的静态代码-->创建实例时,如果不创建实例,则后面的不执行)初始化父类的非静态代码--->初始化父类构造函数--->初始化子类非静态代码--->初始化子类构造函数
子类继承父类会先初始化父类,调用父类的构造函数,
子类的构造方法的第一条语句就是调用父类的没有参数的构造方法,如果你没有写出这条语句java虚拟机就会默认的调用,如果你显示的写了这条语句,就一定要写在构造方法中的第一条语句,不然会报错
原理简述:只有在构造方法中调用了父类的构造方法才能继承父类的相关属性和方法,要不然子类从哪里继承父类的属性和方法,在实例化子类的时候又没有和父类有任何关系。
子类的构造函数默认调用和这个构造函数参数一致的父类构造函数,除非在此子类构造函数的第一行显式调用父类的某个构造函数。
类Example1
class father{
int x=0,y=0;
father(){
System.out.println("now is in father's constructor");
}
father(int x,int y){
this.x=x;
this.y=y;
}
public void print(){
System.out.println("x="+x+";y="+y);
}
}
class son extends father{
son(){
System.out.println("now is in son's constructor");
}
son(int x,int y){
super(x,y);//改变x,y,的值,若无super(x,y),则默认调用father()
}
public void print(){
super.print();
System.out.println("my name is son!");
}
}
public class Example1 {
public static void main (String[] args){
son s=new son();//实例化构造的时候从父类开始调用
s.print();//此处不是构造,是调用
son f=new son(10,20);
f.print();
}
}
运行结果::
now is in father's constructor
now is in son's constructor
x=0;y=0
my name is son!
x=10;y=20
my name is son!
类Example2:
class father{
int x=0,y=0;
father(){
System.out.println("now is in father's constructor");
}
father(int x,int y){
this.x=x;
this.y=y;
}
public void print(){
System.out.println("x="+x+";y="+y);
}
}
class son extends father{
son(){
System.out.println("now is in son's constructor");
}
son(int x,int y){
//改变x,y,的值
System.out.println("s213");
}
public void print(){
//引用父类的print函数
System.out.println("my name is son!");
}
}
public class Example2 {
public static void main (String[] args){
son s=new son();//实例化构造的时候从父类开始调用
s.print();//此处不是构造,是调用, oh,yeah!
son f=new son(10,20);//先调用父类的father(){System.out.println("now is in }
//而不是father(int x,int y){this.x=x;this.y=y;}
f.print();
}
}
运行结果
now is in father's constructor
now is in son's constructor
my name is son!
now is in father's constructor
s213
对比这两个类的注释和结果相信你就会明白了.
分享到:
相关推荐
Java 程序中的构造方法调用 Java 程序设计语言中的构造方法是一个特殊的成员方法,它专门用于创建对象和对所创建的对象进行初始化。正确调用构造方法是我们设计程序的关键所在。构造方法的调用方式有三种:一是在...
* 顺序的不同,对象初始化器是在调用了构造方法才执行的属性赋值,而构造方法在 `new` 的时候进行调用,并且逻辑代码都是在类里面的。 C# 构造方法是一种特殊的方法,用来初始化对象,为类的成员赋值。它具有强制性...
浅谈JScript中使用构造函数创建树对象 在本文中,我们将讨论如何使用JScript中的构造函数来创建树对象。我们首先介绍了构造函数的概念,然后探讨了如何使用构造函数来创建用户自定义的树对象。 1. 构造函数的概念 ...
在C++编程语言中,构造函数是一种特殊的方法,它在创建对象时自动调用,用于初始化类的成员变量。本文将深入探讨C++中构造函数的分类及其调用规则。 首先,我们来看构造函数的分类: 1. **无参数构造函数**:这种...
在Java编程语言中,类与对象是核心概念,它们构成了面向对象编程的基础。这篇博文将深入探讨这两个概念,以及它们如何...通过阅读“浅谈Java的类与对象”这篇文档,你将能更深入地了解这些核心概念,提升你的编程技能。
"JAVA小论文(浅谈String类)" Java的小论文浅谈String类,讨论了Java中字符串的存储和处理。Java提供了String类、StringBuffer类和StringTokenizer类来存储和处理字符串。在大多数情况下,可以使用String类来创建...
然而,如果把方法定义在构造函数内部,每当通过构造函数创建新对象时,这些方法都会被重新创建并添加到新对象上。这种方式在处理大量对象时会带来较高的内存开销,因为每个对象实例都会拥有自己的方法副本。为了减少...
Java反射技术浅谈 Java反射技术是一种可以访问、检测和修改程序本身状态或行为的能力。通过反射,Java程序可以加载一个运行时才知道名称的类,得到其完整内部信息,并创建其对象,或对其属性设值,或调用其方法。...
如果某类里没有__init__方法函数,通过类名字创建的实例对象为空,切没有初始化;如果有此方法函数,通常作为类的第一个方法函数,有点像C++等语言里的构造函数。...以上这篇浅谈Python类里的__init__方法函数,P
浅谈JAVA语言的多线程技术 一、多线程技术的概述 JAVA语言作为一种面向对象的编程语言,它具有平台独立性、安全性、网络化、多线程、面向对象等特点。其线程机制在实践中广泛应用而受到编程者的极大关心。本文就...
浅谈 Spring 原理 透析,IOC 和 AOP Spring 框架是一个从实际项目开发经验中抽取的,可高度重用的应用框架。它是一个轻量级容器,带有包装器,使许多不同的服务和框架更易于使用。轻量级容器接受任何 JavaBean,而...
函数有两种调用方式:带有`new`的构造函数调用和普通函数调用。构造函数调用会创建一个新的对象实例,而普通函数调用则不创建新的对象,只是执行函数体内的代码。 关于对象继承,JavaScript采用的是原型链机制。每...
该类通过构造函数来建立数据库连接,并提供了一系列的公共方法来执行数据表字段查询、条件筛选、结果集查询等操作。 首先,文中介绍了Mysqls类的构造函数`__construct`,它负责接收数据库的连接参数,如主机地址、...
### 浅谈JavaScript面向对象编程 #### 一、概述 面向对象编程(OOP)是一种编程范式,它使用“对象”来设计软件。在JavaScript中,尽管语言本身并不支持传统的类(class)概念,但开发者可以通过原型继承和其他技术来...
"浅谈PHP中RAR压缩文件的处理" php是当前web开发中最流行的编程语言之一,而RAR压缩文件是常见的一种压缩格式。在web应用中,为了提高效率,上传的文件大多数都是以压缩包的形式存在的,因此如何在php中实现RAR...
首先,PathMeasure有两个构造方法: 1. 无参构造函数`PathMeasure()`,它创建一个空的PathMeasure实例,但需要通过`setPath()`方法将Path对象与其关联。关联后,如果Path的内容发生更改,需再次调用`setPath()`以...
Java反射技术浅谈 Java作为一种广泛使用的编程语言,它的设计目标之一是提供一种灵活的编程方式,使程序能够在运行时识别和操作对象。为了实现这一目标,Java语言引入了反射机制,使得开发者能够动态地探索和操作...
例如,给定数组`[1, 2, 3]`,我们调用`filter`方法并传入一个测试函数`function(value, index, self){ return value > 0; }`,结果是返回一个新数组`[1, 2, 3]`,因为数组中所有的元素都满足测试条件。 总结来说,...