类种的构造器也称为构造方法,是在进行创建对象的时候必须调用的,并且构造器有以下两个特点

  1. 必须和类的名字相同
  2. 必须没有返回值类型,但是变量返回值类型不能写void

如下方法在类中定义,且没有返回值也与类名一致

class test2{public test2(){  //与类名一致}
}

创建类,该类中无任何属性和方法

public class Demo001 {//无属性//无方法
}

但是这个类在main()方法中依然能够调用

 public static void main(String[] args) {new Demo001();      //在main()方法中调用Demo001方法}

但是Demo001下没有定义方法但是也能进行调用

new Demo001();  //等同于  Demo001 D=new Demo001();
//使用new关键字实例化对象

查看源码的class文件

源文件与编译后的文件对比

源文件:

package Application;public class Demo001 {}

编译后的class文件:

//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//package Application;public class Demo001 {public Demo001() {}
}

从上可以看出编译后系统定义了一个与类名相同名字的方法。且这个方法没有返回值类型,这其实就是构造器也叫构造方法

得出结论:

  1. 一个类即使什么也不写包括属性和方法都没有定义,也会有一个构造方法

显示的定义构造方法,与类名相同且没有返回值的public方法的无参构造器

class Demo{public Demo(){//方法体}
}

构造器可以实例化对象的初始值

在构造器类中定义属性

class Demo{String name;public Demo(){}
}

在main()方法中调用类下的属性

public static void main(String[] args) {Demo D = new Demo();System.out.println(D.name);
}

执行输出结果为:null

使用this关键字初始化属性值

class Demo{String name;public Demo(){this.name="许志滨";}
}

执行结果输出:许志滨

使用new关键字的时候必须要有构造器,使用new关键字的时候本质是在调用构造器

如下分别在Demo003和Demo004定义实例变量,在方法中赋予实例变量的值

package Application;
public class Demo002 {public static void main(String[] args) {System.out.println(new Demo003());System.out.println(new Demo004());}
}
class Demo003{String name;public Demo003(){this.name="许志滨1";System.out.println(this.name);}
}
class Demo004{String name;public void demo004(){this.name="许志滨2";System.out.println(this.name);}
}

只有构造方法才能对属性进行初始化赋值

执行结果:

许志滨1
Application.Demo003@1b6d3586
Application.Demo004@4554617c

有参构造

一旦定义了有参构造,无参就必须显示定义

package Application;
public class Demo006 {public static void main(String[] args) {Demo007 D =new Demo007("许志滨");}
}
class Demo007{//public Demo007(){//}public Demo007(String name){System.out.println(name);}
}

使用快捷键Alt+insert快速生成构造方法

定义有参构造和无参构造

class Demo008{String name;public Demo008(String name) {this.name = name;}public Demo008() {}
}

java全栈系列之JavaSE-面向对象(构造器)033相关推荐

  1. java全栈系列之JavaSE--冒泡排序028

    冒泡排序是在一组数组中将相邻的两个元素进行比较,可以按由大到小或者由小到大的循序排列, 冒泡排序示意图: 每循环一次相邻的两个数进行大小比较,若由小到大的循序则大的数据在小的数据右侧 冒泡排序流程图 ...

  2. Java全栈系列笔记

    Java全栈系列笔记 全部文档.项目.源码: github:https://github.com/name365/Blog-Java 码云:https://gitee.com/yang365/Blog ...

  3. Java全栈学习day05(面向对象02)

    1.继承 继承的概念 实现代码的重用,子类继承父类的一切属性和方法(除了构造方法),父类的私有属性.方法不能直接使用,需要get和set. package com.test;public class ...

  4. java全栈系列之JavaSE-面向对象(方法的定义与调用)030

    java面向对象编程 面向对象&面向过程 前言: 之前的代码大多数都是属于面向过程的,在程序中有main()方法也叫主方法,程序会由上至下执行main()里面的内容.程序里的方法:例如编写一个 ...

  5. java全栈系列之JavaSE--数组的三种初始化方法及内存分析024

    java内存分析 堆中存放new出来的对象和数组,存放具体的值的变量存放在栈里面 在定义和创建数组的时候内存发生了什么? 当用户定义了一个数组,例如:int [ ] Array;只是定义了一个数组没有 ...

  6. java全栈系列之JavaSE-面向对象(方法重写)037

    子类在调用父类的私有方法中不能直接调用,但是可以通过get方法进行调用,修改属性的值可以通过set方法进行修改.而子类想要修改父类中的方法可以使用方法重写进行操作. 方法重写与之前的方法重载不同 回顾 ...

  7. java全栈系列之JavaSE-面向对象(super详解)036

    super和this之间的关系 super代表父类的属性,this代表当前类的属性 子类调用父类时this和super的区别 package Test_Demo4; import Test_Demo1 ...

  8. java全栈系列之JavaSE-面向对象(继承详解)035

    类的继承 java三大特性之一的继承,指的是子类继承父类的属性和方法,java类中只有单继承没有多继承,比如说:一个父亲(父类)可以有多个儿子(子类),但是一个儿子(子类)只能有一个父亲(父类) 在类 ...

  9. java全栈系列之JavaSE-面向对象(封装详解)034

    封装数据的隐藏 通常,应禁止直接访问一个对象中的数据的实际表示,而应通过操作接口来访问,这种称为信息隐藏 封装的意义: 提高数据的安全性,保护数据 隐藏代码的实现细节 统一接口 系统的可维护性增加了 ...

最新文章

  1. ABAP几种内表的操作
  2. springboot 按钮权限验证_SpringBoot中实现Shiro控制ThymeLeaf界面按钮级权限控制
  3. mysql数据库语法_MySQL数据库语法(一)
  4. 昨夜洪峰抵达主城,重庆人是这么过的......
  5. 《Python编程从入门到实践》记录之列表切片
  6. android bu,Android请求权限之不再询问或禁止不再提示
  7. zookeeper 学习笔记1(转)
  8. 简述div标签和span标签的不同_div与span的区别是什么?
  9. 软件测试人员必看的十本经典书籍
  10. 奔图 Pantum P2206NW 打印机驱动
  11. 米思齐 超声波传感器控制小灯泡
  12. 我们的爱恨情仇:人性-关系-危机-和谐的科学研究
  13. Python将数字转换成大写字母
  14. 白浩然计算机学院,信息数理学院2015年上半年团员推优汇总表.doc-附件:.doc
  15. python 将List中元素两两组合
  16. C语言中函数的一些基本内容
  17. 布谷鸟哈希函数的参数_Cuckoo Hash 布谷鸟哈希
  18. 常用计算机系统包括,常用的保护计算机系统的方法有()。
  19. SAP BDC数据批量导入功能
  20. operator++()实现:前置++和后置++

热门文章

  1. ADXL335 GY-61 三轴加速计
  2. 学校图书管理系统 终结篇
  3. 基矢量的协变导数、矢量的协变导数
  4. 每月分享之兰迪·波许教授的最后一课
  5. 安装51统计代码到html,51La 统计代码放到哪里??
  6. CentOS赋予普通用户root权限
  7. matlab看图像分度值,也制作开源 STC15W408AS 白光T12控制器 数码管版本 洞洞板搭建...
  8. Channel L 自然拼读法 Teacher:Lamb
  9. 小兵围大炮||大兵小将【C++】
  10. Java经典好资源-[http://blog.csdn.net/miaogang]