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 ...
随机推荐
- JAVA基础-----Maven项目的搭建
Maven项目的搭建 一.前言 maven官网:http://maven.apache.org/, 文章简介:本文章从三个模块来了解Maven,分别是 Maven的基本概念~, Maven项目的安装和 ...
- YII进行数据增删改查分析
关于模型部分參考http://blog.csdn.net/buyingfei8888/article/details/40208729 控制器部分: <?php class GoodsContr ...
- HDU 1013.Digital Roots【模拟或数论】【8月16】
Digital Roots Problem Description The digital root of a positive integer is found by summing the dig ...
- git忽略文件
.gitignore文件配置 ###################### # Project Specific ###################### /src/main/webapp/dis ...
- Python学习日记day3:数据类型
1.数据类型int :如1.2.4等, 用于计算 bool: True , False ,用户判断 str: 储存少量数据,进行操作.如:'fdasklfjfladfl','而而噩噩','1234' ...
- Android 再按一次退出程序三种办法
在Xamarin android中双击返回键退出程序的第一种做法 思路就是当用户按下返回键的时间超过两秒就退出,根据Keycode.Back判断用户按下的是返回键,重写这个OnKeyDown Date ...
- bzoj 3192: [JLOI2013]删除物品
Description 箱子再分配问题需要解决如下问题: (1)一共有N个物品,堆成M堆. (2)所有物品都是一样的,但是它们有不同的优先级. (3)你只能够移动某堆中位于顶端的物品. ( ...
- RabbitMQ 1-入门学习
环境: 软件环境MacOS ,Homebrew包管理工具 IDE: Eclipse 项目:Maven项目 1.安装RabbitMQ Server: 方式一:通过homebrew :终端执行:brew ...
- pwd 命令详解
pwd 作用: 以绝对路径的方式显示用户当前工作目录,命令将当前目录的全路径名称(从根目录)写入标准输出, 全部目录使用/分隔,第一个/表示根目录, 最后一个/ 表示当前目录. 执行pwd 命令可以立 ...
- 第三节 - centos 内核启动、救援模式、 ls 、目录结构
Linux 第三节一.CentOS 启动: 1.内核引导: 1.win/linux 通电,2.BISO自检(CPU,内存,硬盘等 | U盘.光驱.网卡.硬盘启动 通过MBR知道内核内存硬件驱动位置并加 ...