Java学习笔记12(面向对象五:构造方法、this再探)
在开发中,经常需要在创建对象的同时明确对象对的属性值,
比如一个Person对象创建时候就应该有age和name等属性
那么如何做到在创建对象的同时给对象的属性初始化值呢?
这里介绍构造方法:
1.构造方法没有返回值类型,更没有返回值,因为它是构建对象的,对象创建完,方法就执行结束
2.构造方法名必须和类型保持一致
3.构造方法什么时候运行呢?答:在创建对象的时候自动执行,而且只运行一次
定义示例:
public class Person {
public Person(){
System.out.println("我是一个空参数的构造方法");
}
}
运行:
public class Test {
public static void main(String[] args) {
Person p = new Person();
}
}
//输出:我是一个空参数的构造方法
构造方法是每个类的必须内容,写或者不写都存在
编译器(javac)在编译的时候会检测是否有构造方法,如果有,执行,如果没有,自动创建一个空参数空内容的构造方法
构造方法的赋值:
public class Person {
private String name;
private int age;
public Person(String name,int age){
this.name = name;
this.age = age;
}
}
public class Test {
public static void main(String[] args) {
Person p = new Person("张三",18);
}
}
构造方法内存分析:
1.main方法进栈运行,内容只有一行:创建对象
2.堆中开空间存入对象,并带有两个参数
3.两个私有变量跟随进入堆内存,并赋默认值(null,0)
4.对象把自己的地址传给this关键字
5.对象调用自己的构造方法,构造方法进栈运行,并且对象把两个参数传入
6.构造方法用this.的方式访问堆内存的对象并给成员变量赋值
7.构造方法运行结束,对象建立完成,地址传给p
构造方法是可以重载的
示例:
public class Person {
private String name;
private int age; public Person() {
} public Person(String name, int age) {
this.name = name;
this.age = age;
}
}
public class Test {
public static void main(String[] args) {
Person p = new Person("张三", 18);
Person p1 = new Person();
}
}
this在构造方法之间的调用:
public class Person {
private String name;
private int age; public Person() {
//this()是调用其他的构造方法
//this()必须写在构造方法第一行
this("张三", 20);
} public Person(String name, int age) {
this.name = name;
this.age = age;
}
}
public class Test {
public static void main(String[] args) {
Person p1 = new Person("张三", 18);
Person p2 = new Person();
}
}
内存原理:
1.main方法进栈运行,在堆中开空间创建对象,成员变量跟随并赋默认值
2.对象调用自己的构造方法,调用空参数构造,进栈运行,实参传递
3.调用了有参数构造方法,有参构造方法进栈运行
4.赋值完成有参构造方法结束,空参构造方法结束,然后对象创建完成
5.对象地址传给p1(p2)
Java学习笔记12(面向对象五:构造方法、this再探)的更多相关文章
- 疯狂java学习笔记之面向对象(五) - 封装、继承、多态
一.封装: 封装的概念: - 合理的隐藏:隐藏不想被外界操作的Field.方法.构造器 - 合理的暴露:一般就是希望给别人调用的方法 e.g:显示器(按键暴露出来操作,但实际的东西/细节方法被隐藏起来 ...
- Java学习笔记之---面向对象
Java学习笔记之---面向对象 (一)封装 (1)封装的优点 良好的封装能够减少耦合. 类内部的结构可以自由修改. 可以对成员变量进行更精确的控制. 隐藏信息,实现细节. (2)实现封装的步骤 1. ...
- Java学习笔记之面向对象、static关键字
一周Java学习总结 今天就总结理清一下关于面向对象和面向过程的程序设计的一些不同特点,以及讲下static关键字. 面向对象 现在接触的Java是面向对象的,现在的程序开发几乎都是以面向对象为基础的 ...
- Java 学习笔记(4)——面向对象
现在一般的语言都支持面向对象,而java更是将其做到很过分的地步,java是强制使用面向对象的写法,简单的写一个Hello Word都必须使用面向对象,这也是当初我很反感它的一点,当然现在也是很不喜欢 ...
- Java学习笔记二十五:Java面向对象的三大特性之多态
Java面向对象的三大特性之多态 一:什么是多态: 多态是同一个行为具有多个不同表现形式或形态的能力. 多态就是同一个接口,使用不同的实例而执行不同操作. 多态性是对象多种表现形式的体现. 现实中,比 ...
- Java学习笔记(十五)——javadoc学习笔记和可能的注意细节
[前面的话] 这次开发项目使用jenkins做持续集成,PMD检查代码,Junit做单元测试,还会自动发邮件通知编译情况,会将javadoc生成的文档自动发到一个专门的服务器上面,每个人都可以看,所以 ...
- Java学习笔记--关于面向对象的思考
1.不可改变的类生成对象以及变量的范围 2. 关键词this的使用 3.用类抽象的思想制作软件 4.通过关系模型建立类 5.使用面向对象的范例来设计程序,遵循类设计指导. 已经学习了:怎么定义类已经创 ...
- 疯狂java学习笔记之面向对象(一) - 定义类、方法、构造器
Java面向对象 1.定义类 2.创建对象.调用方法 类和对象: 某一类对象的概念定义. 比如:人类 - 抽象出来的概念(不特指某个人) 对象 - 在类的概念下产生的一个实例,它就是一个对象了. ja ...
- 201521123103 《Java学习笔记》 第五次学习总结
一.本周学习总结 1.1 尝试使用思维导图总结有关多态与接口的知识点. 1.2 可选:使用常规方法总结其他上课内容. (1).接口更灵活.更方便,可以方便的为现有的系统添加新的功能. (2).is-a ...
随机推荐
- 基于winpcap的以太网流量分析器(java)
开发工具 IDE:eclipse -neon JDK:1.8 OS:Win10-64bit 主要功能 1.要求完成一个基于Winpcap的网络流量统计分析系统,具有易用.美观的界面. 2.完成局域网( ...
- JAVA基础-----Maven项目的搭建
Maven项目的搭建 一.前言 maven官网:http://maven.apache.org/, 文章简介:本文章从三个模块来了解Maven,分别是 Maven的基本概念~, Maven项目的安装和 ...
- 【百度之星2014~初赛(第二轮)解题报告】JZP Set
声明 笔者近期意外的发现 笔者的个人站点http://tiankonguse.com/ 的非常多文章被其他站点转载,可是转载时未声明文章来源或參考自 http://tiankonguse.com/ 站 ...
- Scheme -- Hierarchical Structures
Question: produce a deep-reverse procedure that takes a list as argument and returns as its value t ...
- ajax接收json
l 什么是json? l Json和xml比较 l Ajax如何使用JSON l Ajax接收json响应案例 什么是json? JSON (JavaScript Object Notation) 是 ...
- 原生JS与jQuery操作DOM对比
一.创建元素节点 1.1 原生JS创建元素节点 document.createElement("p"); 1.2 jQuery创建元素节点 $('<p></p&g ...
- Array的基本操作
准备饿补基础技术,先来个数组的总结. 1 .合并操作 concat : var C = A.concat(B); 用A数组合并B数组,生成新的C数组. 循环插入 ...
- ABP 教程文档 1-1 手把手引进门之 ASP.NET Core & Entity Framework Core(官方教程翻译版 版本3.2.5)
本文是ABP官方文档翻译版,翻译基于 3.2.5 版本 官方文档分四部分 一. 教程文档 二.ABP 框架 三.zero 模块 四.其他(中文翻译资源) 本篇是第一部分的第一篇. 第一部分分三篇 1- ...
- 自学Zabbix3.5-监控项item
itemItems是从主机里面获取的所有数据.通常情况下item为监控项,一般网络设备.服务器加入了zabbix监控,就需要监控它的cpu负载,那么实现这个方法的东西就叫item. 1. item构成 ...
- 深入理解计算机系统_3e 第四章家庭作业(部分) CS:APP3e chapter 4 homework
4.52以后的题目中的代码大多是书上的,如需使用请联系 randy.bryant@cs.cmu.edu 更新:关于编译Y86-64中遇到的问题,可以参考一下CS:APP3e 深入理解计算机系统_3e ...