Java中的构造方法总结
Java中的构造方法总结
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | publicclassSample {         privateintx;     publicSample() { // 不带参数的构造方法        this(1);    }         publicSample(intx) { //带参数的构造方法        this.x=x;    }         publicintSample(intx) { //不是构造方法        returnx++;    } } | 
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | publicclassMystery {    privateStrings;         publicvoidMystery() { //不是构造方法    s = "constructor";    }         voidgo() {    System.out.println(s);    }         publicstaticvoidmain(String[] args) {    Mystery m = newMystery();    m.go();    }} | 
| 1 2 3 4 5 6 7 8 9 | publicclassSample1{} publicclassSample2{    publicSample2(inta){System.out.println("My Constructor");}} publicclassSample3{    publicSample3(){System.out.println("My Default Constructor");}} | 
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | publicclassPlatypus {    Stringname;     Platypus(Stringinput) {        name = input;    }     Platypus() {        this("John/Mary Doe");    }     publicstaticvoidmain(Stringargs[]) {        Platypus p1 = newPlatypus("digger");        Platypus p2 = newPlatypus();        System.out.println(p1.name + "----"+ p2.name);    }} | 
需要注意的两个地方是:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | classgetBirthInfo {    voidgetBirthInfo() {        System.out.println("born alive.");    }} classPlatypus1 extendsgetBirthInfo{    voidgetBirthInfo() {           System.out.println("hatch from eggs");           System.out.println("a mammal normally is ");           super.getBirthInfo();      }} publicclasstest1 {    publicstaticvoidmain(String[] args) {        Platypus1 p1=newPlatypus1();        p1.getBirthInfo();    }} | 
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | classgetBirthInfo {    getBirthInfo(){        System.out.println("auto");    }    voidaa() {        System.out.println("born alive.");    }} classPlatypus1 extendsgetBirthInfo{      Platypus1() {        super();        System.out.println("hatch from eggs");        System.out.println("a mammal normally is ");      }} publicclasstest1 {    publicstaticvoidmain(String[] args) {        Platypus1 p1=newPlatypus1();    }} | 
类的继承机制使得子类可以调用父类的功能,下面介绍类在继承关系的初始化顺序问题
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | classSuperClass{    SuperClass()    {        System.out.println("SuperClass constructor");    }}publicclassSubClass extendsSuperClass {    SubClass()    {        System.out.println("SubClass constructor");    }    publicstaticvoidmain(String[] args) {        SubClass sub = newSubClass();    }} | 
SubClass constructor
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | classSuperClass{    SuperClass(Stringstr)    {    System.out.println("Super with a string.");    }}publicclassSubClass extendsSuperClass{    SubClass(Stringstr)    {    System.out.println("Sub with a string.");    }         publicstaticvoidmain(String[] args)    {    SubClass sub = newSubClass("sub");    }} | 
Sub with a string. 第二种方法即使父类中有显示的默认构造方法也不会被调用。
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | classOne{    One(Stringstr)    {    System.out.println(str);    }}classTwo{    One one_1 = newOne("one-1");    One one_2 = newOne("one-2");    One one_3 = newOne("one-3");    Two(Stringstr)    {    System.out.println(str);    }}publicclassTest{    publicstaticvoidmain(String[] args)    {    System.out.println("Test main() start");    Two two = newTwo("two");    }} | 
one-1
one-2
one-3
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | classOne    {    One(Stringstr)    {    System.out.println(str);    }}classTwo{    One one_1 = newOne("one-1");    One one_2 = newOne("one-2");    staticOne one_3 = newOne("one-3");    Two(Stringstr)    {    System.out.println(str);    }}publicclassTest{    publicstaticvoidmain(String[] args)    {    System.out.println("Test main() start");    Two two_1 = newTwo("two-1");    System.out.println("------------");    Two two_2 = newTwo("two-2");    }} | 
one-3
one-1
one-2
two-1
------------
one-1
one-2
two-2
结论:如果一个类中有静态对象,那么他会在非静态对象初始化前进行初始化,但只初始化一次。而非静态对象每次调用时都要初始化。
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | classOne{    One(Stringstr)    {    System.out.println(str);    }}classTwo{    One one_1 = newOne("one-1");    One one_2 = newOne("one-2");    staticOne one_3 = newOne("one-3");    Two(Stringstr)    {    System.out.println(str);    }}publicclassTest{    staticTwo two_3 = newTwo("two-3");    publicstaticvoidmain(String[] args)    {    System.out.println("Test main() start");    Two two_1 = newTwo("two-1");    System.out.println("------------");    Two two_2 = newTwo("two-2");    }} | 
one-1
one-2
two-3
Test main() start
one-1
one-2
two-1
------------
one-1
one-2
two-2
2.主类的父类的构造方法被调用。
3.主类的非静态对象(变量)初始化。
4.调用主类的构造方法。
Java中的构造方法总结的更多相关文章
- Java学习笔记十六:Java中的构造方法
		Java中的构造方法 1.使用new+构造方法 创建一个新的对象: 2.构造方法是定义在Java类中的一个用来初始化对象的方法: 3.构造方法与类同名且没有返回值: 4.语法格式: public 构造 ... 
- Java中的构造方法
		什么是构造方法:每一个类中至少有一个构造方法,它用于创建该类对象,这个和OC中的init有异曲同工之妙. 构造方法的格式:A:方法名与类名相同 B:没有返回值类型,没有void C:没有具体的返回值 ... 
- Java面试 -  在Java中, 既然构造方法是一个方法,那么为什么不使用void 定义呢?
		Java程序编译器是根据代码结构来进行编译处理的,执行的时候也是根据代码结构来处理的. 如果在构造方法上使用void,那么此结构就会与普通方法的结构相同,这样编译器会认为此方法是一个 普通方法,而普通 ... 
- java中的构造方法与其作用
		什么是构造方法呢? 方法名和类名相同 没有返回值类型,连void都不能写 没有具体的返回值 构造方法分为无参构造方法与有参构造方法. 先来看一下最简单的无参构造方法: Student.java pac ... 
- java中的构造方法(2013-05-05-bd 写的日志迁移
		特点: 1.方法名和类名相同 2.没有返回值 3.在创建一个类的新对象时,系统会自动的调用该类的构造方法完成对新对象的初始化 一个类中可以定义多个不同构造方法: 如果程序员没有定义构造方法,系统能够会 ... 
- 134、Java中的构造方法和构造块
		01.代码如下: package TIANPAN; class Book { public Book() { // 构造方法 System.out.println("[A]Book类的构造方 ... 
- Java 中的构造方法
		首先创建一个Transport类,定义好类的属性和方法,并且写好构造方法,先看下无参数的构造方法: public class Transport { //名字 public String name; ... 
- Java中的构造方法「注意事项」
		构造方法是专门用来创建对象的方法,当我们通过关键字new来创建对象时,其实就是调用构造方法. 语法: public 类名称(参数类型 参数名称){ 方法体 } 注意事项: 构造方法的名称必须和所在的类 ... 
- 关于Java中的构造方法
		关于构造方法: 1.构造方法又叫构造函数/构造器. 2.构造方法语法结构中"返回值类型"不需要指定,也不能写void,如若写void,则变成普通方法. 3.构造方法有返回值,和当前 ... 
随机推荐
- git rebase 的作用
			git rebase,顾名思义,就是重新定义(re)起点(base)的作用,即重新定义分支的版本库状态.要搞清楚这个东西,要先看看版本库状态切换的两种情况: 我们知道,在某个分支上,我们可以通过git ... 
- day5  io模型
			五种概览:http://www.cnblogs.com/xiehongfeng100/p/4763225.html http://sukai.me/linux-five-io-models/ 内有多 ... 
- 使用SDWebImage加载大量图片后造成内存泄露的解决办法
			SDWebImage的知名度就不用说了,github上近10k的star,国内外太多的App使用其进行图片加载. 但是最近在使用过程中发现,在UITableView中不断加载更多的内容,使用SDWeb ... 
- 每天一个linux命令:【转载】rm命令
			今天学习一下linux中删除文件和目录的命令: rm命令.rm是常用的命令,该命令的功能为删除一个目录中的一个或多个文件或目录,它也可以将某个目录及其下的所有文件及子目录均删除.对于链接文件,只是删除 ... 
- 神器如 dnSpy,无需源码也能修改 .NET 程序
			dnSpy 是 0xd4d 开发的 .NET 程序调试神器. 说它是神器真的毫不为过!它能在完全没有源码的情况下即时调试程序,甚至还能修改程序!本文讲向大家介绍如何使用 dnSpy 修改 .NET 程 ... 
- 应该抛出什么异常?不应该抛出什么异常?(.NET/C#)
			我在 .NET/C# 建议的异常处理原则 中描述了如何 catch 异常以及重新 throw.然而何时应该 throw 异常,以及应该 throw 什么异常呢? 究竟是谁错了? 代码中从上到下从里到外 ... 
- memsql 基本安装试用
			备注:使用docker 进行安装 1. 基本准备 a. 环境检查(必须,不然会有服务启动异常的问题) docker run --rm memsql/quickstart check-system b. ... 
- VMware harbor && minio 搭建企业docker私有镜像以及需要注意的问题
			1. docker harbor 配置 建议使用在线安装的模式(离线包太大了) 首先需要安装docker-compose .docker .mino (具体安装可以参考官网后者我的博 ... 
- Python 3 利用 Dlib 和 sklearn 人脸笑脸检测机器学习建模
			0. 引言 利用机器学习的方法训练微笑检测模型,输入一张人脸照片,判断是否微笑: 精度在 95% 左右( 使用的数据集中 69 张没笑脸,65 张有笑脸 ): 图1 测试图像与检测结果 项目实现的笑脸 ... 
- ECMALL转空间后出现空白问题解析
			今天客户网站做完的ECMall测试站,将数据库和代码分别传到了正式空间中.通过浏览器浏览,整个页面一片空白. 第一个反应是数据库配置有问题.打开网站根目录下data/config.ini.php,内容 ... 
