java全栈系列之JavaSE-面向对象(构造器)033
类种的构造器也称为构造方法,是在进行创建对象的时候必须调用的,并且构造器有以下两个特点
- 必须和类的名字相同
- 必须没有返回值类型,但是变量返回值类型不能写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() {}
}
从上可以看出编译后系统定义了一个与类名相同名字的方法。且这个方法没有返回值类型,这其实就是构造器也叫构造方法
得出结论:
- 一个类即使什么也不写包括属性和方法都没有定义,也会有一个构造方法
显示的定义构造方法,与类名相同且没有返回值的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相关推荐
- java全栈系列之JavaSE--冒泡排序028
冒泡排序是在一组数组中将相邻的两个元素进行比较,可以按由大到小或者由小到大的循序排列, 冒泡排序示意图: 每循环一次相邻的两个数进行大小比较,若由小到大的循序则大的数据在小的数据右侧 冒泡排序流程图 ...
- Java全栈系列笔记
Java全栈系列笔记 全部文档.项目.源码: github:https://github.com/name365/Blog-Java 码云:https://gitee.com/yang365/Blog ...
- Java全栈学习day05(面向对象02)
1.继承 继承的概念 实现代码的重用,子类继承父类的一切属性和方法(除了构造方法),父类的私有属性.方法不能直接使用,需要get和set. package com.test;public class ...
- java全栈系列之JavaSE-面向对象(方法的定义与调用)030
java面向对象编程 面向对象&面向过程 前言: 之前的代码大多数都是属于面向过程的,在程序中有main()方法也叫主方法,程序会由上至下执行main()里面的内容.程序里的方法:例如编写一个 ...
- java全栈系列之JavaSE--数组的三种初始化方法及内存分析024
java内存分析 堆中存放new出来的对象和数组,存放具体的值的变量存放在栈里面 在定义和创建数组的时候内存发生了什么? 当用户定义了一个数组,例如:int [ ] Array;只是定义了一个数组没有 ...
- java全栈系列之JavaSE-面向对象(方法重写)037
子类在调用父类的私有方法中不能直接调用,但是可以通过get方法进行调用,修改属性的值可以通过set方法进行修改.而子类想要修改父类中的方法可以使用方法重写进行操作. 方法重写与之前的方法重载不同 回顾 ...
- java全栈系列之JavaSE-面向对象(super详解)036
super和this之间的关系 super代表父类的属性,this代表当前类的属性 子类调用父类时this和super的区别 package Test_Demo4; import Test_Demo1 ...
- java全栈系列之JavaSE-面向对象(继承详解)035
类的继承 java三大特性之一的继承,指的是子类继承父类的属性和方法,java类中只有单继承没有多继承,比如说:一个父亲(父类)可以有多个儿子(子类),但是一个儿子(子类)只能有一个父亲(父类) 在类 ...
- java全栈系列之JavaSE-面向对象(封装详解)034
封装数据的隐藏 通常,应禁止直接访问一个对象中的数据的实际表示,而应通过操作接口来访问,这种称为信息隐藏 封装的意义: 提高数据的安全性,保护数据 隐藏代码的实现细节 统一接口 系统的可维护性增加了 ...
最新文章
- ABAP几种内表的操作
- springboot 按钮权限验证_SpringBoot中实现Shiro控制ThymeLeaf界面按钮级权限控制
- mysql数据库语法_MySQL数据库语法(一)
- 昨夜洪峰抵达主城,重庆人是这么过的......
- 《Python编程从入门到实践》记录之列表切片
- android bu,Android请求权限之不再询问或禁止不再提示
- zookeeper 学习笔记1(转)
- 简述div标签和span标签的不同_div与span的区别是什么?
- 软件测试人员必看的十本经典书籍
- 奔图 Pantum P2206NW 打印机驱动
- 米思齐 超声波传感器控制小灯泡
- 我们的爱恨情仇:人性-关系-危机-和谐的科学研究
- Python将数字转换成大写字母
- 白浩然计算机学院,信息数理学院2015年上半年团员推优汇总表.doc-附件:.doc
- python 将List中元素两两组合
- C语言中函数的一些基本内容
- 布谷鸟哈希函数的参数_Cuckoo Hash 布谷鸟哈希
- 常用计算机系统包括,常用的保护计算机系统的方法有()。
- SAP BDC数据批量导入功能
- operator++()实现:前置++和后置++
热门文章
- ADXL335 GY-61 三轴加速计
- 学校图书管理系统 终结篇
- 基矢量的协变导数、矢量的协变导数
- 每月分享之兰迪·波许教授的最后一课
- 安装51统计代码到html,51La 统计代码放到哪里??
- CentOS赋予普通用户root权限
- matlab看图像分度值,也制作开源 STC15W408AS 白光T12控制器 数码管版本 洞洞板搭建...
- Channel L 自然拼读法 Teacher:Lamb
- 小兵围大炮||大兵小将【C++】
- Java经典好资源-[http://blog.csdn.net/miaogang]