[java学习笔记]java语言核心----面向对象之构造函数

时间:2022-05-01 02:01:38

1.构造函数概念

  • 特点:
  1. 函数名与类名相同
  2. 不用定义返回值类型
  3. 没有具体的返回值
  • 作用:

               给对象进行初始化

  • 注意:
  1. 默认构造函数
  2. 多个构造函数是以重载出现的
  3. 一个类中如果没有定义过构造函数,那么该类中会有一个默认的空参数的构造函数
  4. 如果在类中定义了构造函数,那么类中的默认构造函数就没有了
  5. 构造函数在创建对象时调用
  6. 构造函数也有默认的return语句(省略不写)
  7. 函数执行到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();

 

这个代码在内存中的执行过程:

[java学习笔记]java语言核心----面向对象之构造函数

说明:

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);
}
}

 

注意:

  1. 对this的调用必须是构造函数中的第一个语句
  2. 不允许两个构造函数互相调用,即不能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语言核心----面向对象之构造函数的更多相关文章

  1. [java学习笔记]java语言核心----面向对象之this关键字

    一.this关键字 体现:当成员变量和函数的局部变量重名时,可以使用this关键字来区别:在构造函数中调用其它构造函数 原理:         代表的是当前对象.         this就是所在函数 ...

  2. Java学习笔记:语言基础

    Java学习笔记:语言基础 2014-1-31   最近开始学习Java,目的倒不在于想深入的掌握Java开发,而是想了解Java的基本语法,可以阅读Java源代码,从而拓展一些知识面.同时为学习An ...

  3. 【疯狂Java学习笔记】【理解面向对象】

    [学习笔记]1.Java语言是纯粹的面向对象语言,这体现在Java完全支持面向对象的三大基本特征:封装.继承.多态.抽象也是面向对象的重要组成部分,不过它不是面向对象的特征之一,因为所有的编程语言都需 ...

  4. 我的Java学习笔记-Java面向对象

    今天来学习Java的面向对象特性,由于与C#的面向对象类似,不需详细学习 一.Java继承 继承可以使用 extends 和 implements 这两个关键字来实现继承. extends:类的继承是 ...

  5. Java学习笔记-Java概述和环境配置

    基础常识 软件:一系列按照特定顺序组织的计算机数据 和指令的集合 常见的软件: 系统软件:如:DOS,windows,Linux等 应用软件:如:扫雷,迅雷,QQ等 软件的出现实现了人与计算机之间的更 ...

  6. java学习笔记----java入门

    java基础 一.java语言跨平台原理 1.什么是跨平台? 跨平台就是一个软件可以在不同的操作系统中运行,但是不需要对其修改.换句话说,java语言编写的软件在不做修改的情况下就能在不同的系统平台上 ...

  7. Java学习笔记 -- Java定时调度工具Timer类

    1 关于 (时间宝贵的小姐姐请跳过) 本教程是基于Java定时任务调度工具详解之Timer篇的学习笔记. 什么是定时任务调度 基于给定的时间点,给定的时间间隔或者给定的执行次数自动执行的任务. 在Ja ...

  8. Java学习笔记-Java中的常用类

    Java中有很多类是很常用的,此处列举System,Runtime,Date,Calendar,Math System System:类中的方法和属性都是静态的 字段摘要 static PrintSt ...

  9. [java学习笔记]java语言核心----面向对象基础

    1.面向对象概述 面向对象是java语言的核心.是对应于面向过程而言的. 面向过程:强调的是过程,即动作.在java中动作就是函数.C语言就是面向过程的. 如:把大象装进冰箱需要几步? 答:需要三步: ...

随机推荐

  1. web 安全杂谈

    以前写过一篇关于session.cookie的博文,都是简单的介绍.不过session和cookie和网络安全可有着密切的关系. 今天主要从这几个方面总结下最近学到的东西: 1. session 两种 ...

  2. multi-catch和try-catch异常处理

    multi-catch属于JDK1.7之后出现的,举例如下: class FactoryTest { public static Fruits getInstance(String className ...

  3. Java中的编码

    package coreJava; import javax.swing.plaf.synth.SynthSpinnerUI; public class EncodeDemo { public sta ...

  4. javaweb常用工具类及配置文件备份

    Javaweb常用工具类及配置文件备份   做一个代码备份,以后常用到的. hibernate工具类备份 package com.dly.service; /*  * hibernate获取sessi ...

  5. Activity具体解释(生命周期、以各种方式启动Activity、状态保存,全然退出等)

    一.什么是Activity? 简单的说:Activity就是布满整个窗体或者悬浮于其它窗体上的交互界面.在一个应用程序中通常由多个Activity构成,都会在Manifest.xml中指定一个主的Ac ...

  6. Java的构造器

    初始化和清理是涉及安全的两个问题.C++和Java都引入了构造器(constructor)的概念,这是一个在创建对象时被自动调用的特殊方法. 可以假想为编写的每个类都定义一个initialize()方 ...

  7. 纯CSS实现箭头、气泡让提示功能具有三角形图标(简单实例)

    <style type="text/css"> /*向上箭头,类似A,只有三个边,不能指定上边框*/ .arrow-up { width: 0px; height: 0 ...

  8. 小程序官网CMS开源项目出炉,Weixin-App-CMS 1&period;0 版本正式发布

    Weixin-App-CMS 是捷微团队开发的微信小程序CMS开源项目,涵盖了微网站的基本功能,能够快速发布简单易用的小程序网站.采用工具“微信web开发”上传小程序,即可快速体验发布体验小程序网站. ...

  9. Java 容器 &amp&semi; 泛型:三、HashSet,TreeSet 和 LinkedHashSet比较

    Writer:BYSocket(泥沙砖瓦浆木匠) 微博:BYSocket 豆瓣:BYSocket 上一篇总结了下ArrayList .LinkedList和Vector比较,今天泥瓦匠总结下Hash ...

  10. cerr与cout的区别

    1.cout经过缓冲后输出,默认情况下是显示器.可以重定向. 2.cerr不经过缓冲而直接输出,一般用于迅速输出出错信息,不可以被重定向.