构造方法

8.1构造方法介绍

构造方法的格式:

修饰符 构造方法名(参数列表)

{

}

l  构造方法的体现:

n  构造方法没有返回值类型。也不需要写返回值。因为它是为构建对象的,对象创建完,方法就执行结束。

n  构造方法名称必须和类名保持一致。

n  构造方法没有具体的返回值。

构造方法的代码体现

class Person {

// Person的成员属性age和name

private int age;

private String name;

// Person的构造方法,拥有参数列表

Person(int a, String nm) {

// 接受到创建对象时传递进来的值,将值赋给成员属性

age = a;

name = nm;

}

}

8.2构造方法调用和内存图解

构造方法是专门用来创建对象的,也就是在new对象时要调用构造方法

class Person {

// Person的成员属性age和name

private int age;

private String name;

// Person的构造方法,拥有参数列表

Person(int a, String nm) {

// 接受到创建对象时传递进来的值,将值赋给成员属性

age = a;

name = nm;

}

public void speak() {

System.out.println("name=" + name + ",age=" + age);

}

}

class PersonDemo {

public static void main(String[] args) {

// 创建Person对象,并明确对象的年龄和姓名

Person p2 = new Person(23, "张三");

p2.speak();

}

}

1、首先会将main方法压入栈中,执行main方法中的 new Person(23,"张三");

2、

3、在堆内存中分配一片区域,用来存放创建的Person对象,这片内存区域会有属于自己的内存地址(0x88)。然后给成员变量进行默认初始化(name=null,age=0)。

4、执行构造方法中的代码(age = a ; name = nm;),将变量a对应的23赋值给age,将变量nm对应的”张三赋值给name,这段代码执行结束后,成员变量age和name的值已经改变。执行结束之后构造方法弹栈,Person对象创建完成。将Person对象的内存地址0x88赋值给p2。

8.3默认构造方法和细节

在之前学习的过程中,描述事物时,并没有显示指定构造方法,当在编译Java文件时,编译器会自动给class文件中添加默认的构造方法。如果在描述类时,我们显示指定了构造方法,那么,当在编译Java源文件时,编译器就不会再给class文件中添加默认构造方法。

l  构造方法的细节:

1、一个类中可以有多个构造方法,多个构造方法是以重载的形式存在的

2、构造方法是可以被private修饰的,作用:其他程序无法创建该类的对象。

class Person {

private int age;

private String name;

// 私有无参数的构造方法,即外界不能通过new Person();语句创建本类对象

private Person() {

}

// 多个构造方法是以重载的形式存在

Person(int a) {

age = a;

}

Person(String nm, int a) {

name = nm;

age = a;

}

}

8.4构造方法和一般方法区别

构造方法在对象创建时就执行了,而且只执行一次。

一般方法是在对象创建后,需要使用时才被对象调用,并可以被多次调用

this关键字

9.1this调用构造方法

构造方法之间的调用,可以通过this关键字来完成。

class Person {

// Person的成员属性

private int age;

private String name;

// 无参数的构造方法

Person() {

}

// 给姓名初始化的构造方法

Person(String nm) {

name = nm;

}

// 给姓名和年龄初始化的构造方法

Person(String nm, int a) {

// 由于已经存在给姓名进行初始化的构造方法 name = nm;因此只需要调用即可

// 调用其他构造方法,需要通过this关键字来调用

this(nm);

// 给年龄初始化

age = a;

}

}

9.2this的原理图解

package com.oracle.demo11;

public class Person {

private String name;

private int age;

public Person(String name, int age) {

this.name=name;

this.age=age;

}

public void speak(){

System.out.println("我叫"+this.name+",今年"+this.age+"岁了");

}

}

package com.oracle.demo11;

public class Test {

public static void main(String[] args) {

Person p=new Person("欣欣",16);

p.speak();

}

}

运行结果:

流程图:

9.3成员变量和局部变量同名问题

当在方法中出现了局部变量和成员变量同名的时候,那么在方法中怎么区别局部变量成员变量呢?可以在成员变量名前面加上this.来区别成员变量和局部变量

package com.oracle.demo12;

public class Person {

private String name;

private int age;

private String gender;

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

public String getGender() {

return gender;

}

public void setGender(String gender) {

this.gender = gender;

}

public Person(){

}

public Person(String n,int a,String g){

name=n;

age=a;

gender=g;

}

public void study(){

System.out.println("正在学习");

}

public void sleep(){

System.out.println("正在睡觉");

}

public void speak(){

System.out.println("我叫:"+name+",年龄为:"+age+",性别"+gender);

}

}

package com.oracle.demo12;

public class Test02 {

public static void main(String[] args) {

Person p=new Person("萌萌",23,"女");

p.speak();

p.study();

p.sleep();

Person p1=new Person();

p1.speak();

p1.study();

p1.sleep();

}

}

运行结果:

Java基础构造方法和this关键字整理的更多相关文章

  1. JavaSE复习日记 : 实例化对象/构造方法和this关键字

    /* * 实例化对象/对象的构造方法/this关键字 */ /* * 实例化对象 * * 就是实例化某一个类; * 从不同角度去理解的话就是: * 1. 从人的认知角度: * 就是具体化某个东西; * ...

  2. Java基础笔记(十四)——面向对象(续)【构造方法和this关键字】

    一.构造函数的规则 1.构造方法是用来在对象实例化时初始化对象的成员变量的,以完成对象的初始化工作. 2.构造方法与类名相同且没有返回值(返回值也不能为void型).如:public 构造方法名( ) ...

  3. java中构造方法和this,static关键字

    构造方法: 构造方法是一种特殊的方法,用于创建该类的对象,对对象的数据进行初始化 格式如下: [修饰符] 类名(形参列表){ 方法体 } 特点 A:方法名和类名相同  B:没有返回值类型,连void都 ...

  4. 3-自定义构造方法和description方法

    http://www.cnblogs.com/mjios/archive/2013/04/19/3031412.html -自定义构造方法和description方法 1 默认的构造方法是什么?有什么 ...

  5. 二、OC的构造方法和descriprtion方法

    二.构造方法和description方法 1.构造方法的定义 - (id)initWithAge:(int)newAge andNo:(int)newNo; 2.实现构造方法 - (id)initWi ...

  6. Java基础语法(11)-面向对象之关键字

    title: Java基础语法(11)-面向对象之关键字 blog: CSDN data: Java学习路线及视频 1.this this是什么 它在方法内部使用,即这个方法所属对象的引用: clas ...

  7. Java 基础 面向对象之构造方法和关键字

    构造方法 构造方法简介 在开发中经常需要在创建对象的同时明确对象的属性值,比如员工入职公司就要明确他的姓名.年龄等属性信息. 那么,创建对象就要明确属性值,那怎么解决呢?也就是在创建对象的时候就要做的 ...

  8. Java基础之instanceof和transient关键字用法

    instanceof 用于检测指定对象是否是某个类(本类.父类.子类.接口)的实例.Java中的instanceof也称为类型比较运算符,因为它将类型与实例进行比较. 返回true或false. 如果 ...

  9. Java基础语法面试题50题整理(带答案)

    嗯,之前某些原因整理了这份面试题,加油生活 (:   0,嗯,先做简单的,那个不对() 1,int [] sy = {0,9,2,3}; 2,int [] sy1 = new int[4]; 3,in ...

随机推荐

  1. 免费开源的会计软件 GnuCash 3.4 发布

    导读 GnuCash 3.4已经发布,GnuCash是免费和开源的会计软件.GnuCash开发团队宣布推出GnuCash 3.4,这是3.x稳定版系列的第五版. 变化 在3.3和3.4之间,完成了以下 ...

  2. 小程序——Tab切换

    <view class="body"> <view class="nav bc_white"> <view class=" ...

  3. 18mysql3

    一.内外连接全连接,左右连接   █▓        通过两张表查找其对应的记录. 隐式 内连接 select * from a,b where a.列名 = b.列名   █▓        左连接 ...

  4. 第五十六 css选择器和盒模型

    1.组合选择器 群组选择器 #每个选择为可以位三种基础选择器任意一个,用逗号隔开,控制多个. div,#div,.div{ color:red } 后代(子代)选择器 .sup .sub{ 后代 } ...

  5. Android学习第6天

    创建一个新的activity 四大组件需要在清单文件中配置 可在清单文件中配置多个启动图标过单个启动图标 Activity下的lable和icon属性可以和Application节点的属性不一样,默认 ...

  6. 「Splay」区间翻转

    传送门:>Here< 解法分析 用splay来维护这个序列. 一直没有搞明白的是,这里的splay的节点究竟维护的是什么?是权值吗?肯定不是,因为区间是会翻转的,如果维护权值的话很快平衡树 ...

  7. topcoder SRM642 div1 hard WheelofFortune

    题目链接:vjudge 大意:有两个人参加一场游戏,这个游戏在一个编号为\(0\text~n-1\)的轮盘上进行,一开始轮盘上的数字均为0:一共有\(m\)轮,每一轮都有一个操作参数\(s_i\),主 ...

  8. 【XSY2732】Decalcomania 可持久化线段树 分治

    题目描述 有一个陶瓷瓶周围有\(n\)个可以印花的位置.第\(i\)个与第\(i+1\)个位置之间的距离为\(d_i\),在第\(i\)个位置印图案要\(t_i\)秒. 机器刚开始在\(0\)号位置, ...

  9. 【XSY2472】string KMP 期望DP

    题目大意 给定一个由且仅由字符'H','T'构成的字符串\(S\). ​ 给定一个最初为空的字符串\(T\) ,每次随机地在\(T\)的末尾添加'H'或者'T'. 问当\(S\)为\(T\)的后缀时, ...

  10. Distinct Values(2018hdu多校第一场)

    给你一段长度为n的区间,然后在给你m个小区间,要求这m个小区间里的每个人都不能重复,请你输出字典序最小的方案. 我们可以开一个suf数组,表示我到我后面的不出现重复数字的区间至少需要到达的位置.所以对 ...