[java学习笔记]java语言核心----面向对象之构造函数
1.构造函数概念
- 特点:
- 函数名与类名相同
- 不用定义返回值类型
- 没有具体的返回值
- 作用:
给对象进行初始化
- 注意:
- 默认构造函数
- 多个构造函数是以重载出现的
- 一个类中如果没有定义过构造函数,那么该类中会有一个默认的空参数的构造函数
- 如果在类中定义了构造函数,那么类中的默认构造函数就没有了
- 构造函数在创建对象时调用
- 构造函数也有默认的return语句(省略不写)
- 函数执行到return语句后,栈中该函数的方法区就会出栈
如:
class Person{
private int age;
Person(){
age = 10;
}
}
- 一般函数和构造函数的区别
构造函数:对象创建时,就会调用对应的构造函数,对对象进行初始化
一般函数:对象创建后,需要函数功能时才调用
一般函数不能调用构造函数,构造函数可以调用一般函数
class Person{
void Person(){
}
}此方法为一般方法
2.构造函数的重载
class Person{
private String name;
private int age;
Person(){
age = 1;
name = "xiaoming";
}
Person(int a, String n){
age = a;
name = n;
}public void speak(){System.out.println(name+”:”+age);}
}
在newPerson对象时,可以根据不同的构造函数,选择不同的创建方式。
Person p1 = new Person();//使用Person类的无参构造函数来创建对象 Person p2 = new Person(10,”zhangsan”);//使用Person类有两个参数的构造函数来创建对象p1.speak();p2.speak();运行结果为:
xiaoming:1
zhangsan:10
3.构造函数内存图解
Person p2 = new Person(10,”zhangsan”);
p2.speak();
这个代码在内存中的执行过程:
说明:
1.执行main方法,在栈内存中开辟一个main函数的方法区,创建一个Person类型变量p2
2.在堆内存中创建一个Person的实例,并初始化值,和分配地址值
3.在栈内存中开辟Person构造函数的方法区,并执行构造函数中的代码,即给堆内存中的Person实例的name和age属性赋值
4.Person方法区出栈
5.栈中创建speak的方法区,执行相应的代码
6.speak方法区出栈
4.构造函数的相互调用
构造函数可以调用构造函数,如:
class Person{
private String name;
private int age;
Person(String n){
name = n;
}
Person(String n, int a){
this(n);
age = a; } public void speak(){
System.out.println(name+”:”+age);
}
}
注意:
- 对this的调用必须是构造函数中的第一个语句
- 不允许两个构造函数互相调用,即不能Person(String n)中调用this(“zhangsan”,10),再在Person(String n, int a)调用this(“xiaoming”),会导致栈内存溢出,因为它们在不断的互相调用,不断进栈,却没有出栈
错误!!!栈内存溢出:
class Person{
private String name;
private int age;
Person(String n){
this("zhangsan",10)
name = n;
}
Person(String n, int a){
this("lisi");
age = a; } }
- this详解见 [java学习笔记]java语言核心----this关键字&super关键字
[java学习笔记]java语言核心----面向对象之构造函数的更多相关文章
- [java学习笔记]java语言核心----面向对象之this关键字
一.this关键字 体现:当成员变量和函数的局部变量重名时,可以使用this关键字来区别:在构造函数中调用其它构造函数 原理: 代表的是当前对象. this就是所在函数 ...
- Java学习笔记:语言基础
Java学习笔记:语言基础 2014-1-31 最近开始学习Java,目的倒不在于想深入的掌握Java开发,而是想了解Java的基本语法,可以阅读Java源代码,从而拓展一些知识面.同时为学习An ...
- 【疯狂Java学习笔记】【理解面向对象】
[学习笔记]1.Java语言是纯粹的面向对象语言,这体现在Java完全支持面向对象的三大基本特征:封装.继承.多态.抽象也是面向对象的重要组成部分,不过它不是面向对象的特征之一,因为所有的编程语言都需 ...
- 我的Java学习笔记-Java面向对象
今天来学习Java的面向对象特性,由于与C#的面向对象类似,不需详细学习 一.Java继承 继承可以使用 extends 和 implements 这两个关键字来实现继承. extends:类的继承是 ...
- Java学习笔记-Java概述和环境配置
基础常识 软件:一系列按照特定顺序组织的计算机数据 和指令的集合 常见的软件: 系统软件:如:DOS,windows,Linux等 应用软件:如:扫雷,迅雷,QQ等 软件的出现实现了人与计算机之间的更 ...
- java学习笔记----java入门
java基础 一.java语言跨平台原理 1.什么是跨平台? 跨平台就是一个软件可以在不同的操作系统中运行,但是不需要对其修改.换句话说,java语言编写的软件在不做修改的情况下就能在不同的系统平台上 ...
- Java学习笔记 -- Java定时调度工具Timer类
1 关于 (时间宝贵的小姐姐请跳过) 本教程是基于Java定时任务调度工具详解之Timer篇的学习笔记. 什么是定时任务调度 基于给定的时间点,给定的时间间隔或者给定的执行次数自动执行的任务. 在Ja ...
- [Java学习笔记] Java异常机制(也许是全网最独特视角)
Java 异常机制(也许是全网最独特视角) 一.Java中的"异常"指什么 什么是异常 一句话简单理解:异常是程序运行中的一些异常或者错误. (纯字面意思) Error类 和 Ex ...
- Java学习笔记-Java中的常用类
Java中有很多类是很常用的,此处列举System,Runtime,Date,Calendar,Math System System:类中的方法和属性都是静态的 字段摘要 static PrintSt ...
随机推荐
- 检测Insert、Capslock、NumLock、ScrollLock状态键的状态
unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, ...
- android 自定义按钮实现 home键 和返回键
由于在自己做的东西中用到了就总结一下,自己做了测试 在一个程序运行中如果按 返回键 分别执行了 : onpause() onStop() onDestory()方法 如果点击 home键 ...
- cocos2dx jsoncpp
jsoncpp下载 http://sourceforge.net/projects/jsoncpp/ 下载解压后用到的是include\json下面的头文件跟src\lib_json下的文件. 导入头 ...
- ASP.NET MVC 4 让数据库自动迁移
今天实际测试了下这个方法,可以保持数据库与实体类同步,同时不会出现数据库迁移的提示.但是只能更改实体类来改变数据库,而不能改数据库来改变实体类.所以这才是Code frist,如果通过改数据库表来改动 ...
- 标签切换JS代码
//标签切换 var nav = $('.index-nav'); var content = $('.index-nav-content li'); function hoverNav ($eleA ...
- fancybox的使用
fancybox,个人没有深入了解,只是为了工作需要,做的一些界面,主要是用的AJAX功能. 首先,需要下载fancybox的js文件以及CSS文件(可能用不到) 其次,在页面中引入 <scri ...
- win10 IIS10 HTTP 错误 404.2 - Not Found
环境win10系统IIS10里边发布web应用程序的时候,出现 HTTP 错误 404.2 - Not Found 由于 Web 服务器上的“ISAPI 和 CGI 限制”列表设置,无法提供您请求的页 ...
- hdu 2665 划分树
思路:裸的划分树 #include<iostream> #include<algorithm> #include<cstring> #include<cstd ...
- poj 1523 求割点
思路:对于所有节点,每次找的子树,key[root]++;输出时,对于根节点就输出key[root],对于其它节点i,输出key[i]+1; #include<iostream> #inc ...
- crontab执行java命令失效
一.我们常常碰到在shell下执行某个命令能够成功,比如执行一个java程序: java -jar /home/opscoder/topo-audit.jar,但是在crontab下执行会失败. co ...
