构造方法

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. SpringBoot2.0.3 + SpringSecurity5.0.6 + vue 前后端分离认证授权

    新项目引入安全控制 项目中新近添加了Spring Security安全组件,前期没怎么用过,加之新版本少有参考,踩坑四天,终完成初步解决方案.其实很简单,Spring Security5相比之前版本少 ...

  2. 洛谷P3690 Link Cut Tree (模板)

    Link Cut Tree 刚开始写了个指针版..调了一天然后放弃了.. 最后还是学了黄学长的板子!! #include <bits/stdc++.h> #define INF 0x3f3 ...

  3. centos6.8下安装破解quartus prime16.0以及modelsim ae安装

    前言 装逼使用 流程 安装modelsim: 1.modelsim ae在linux下是32位的,对于64位系统需要安装32位库:yum install xulrunner.i686 2.给予权限: ...

  4. 【XSY2714】大佬的难题 数学 树状数组

    题目描述 给你三个排列\(A,B,C\),求 \[ \sum_{1\leq x,y\leq n}[a_x<a_y][b_x<b_y][c_x<c_y] \] \(n\leq 2\ti ...

  5. 【HDU5950】Recursive sequence(矩阵快速幂)

    BUPT2017 wintertraining(15) #6F 题意 \(f(1)=a,f(2)=b,f(i)=2*(f(i-2)+f(i-1)+i^4)\) 给定n,a,b ,\(N,a,b < ...

  6. Configure new Nagios clients

    安装rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpmrpm -Uvh http:// ...

  7. centos install redmine (项目管理工具)

    安装环境:Centos.mysql.Ruby.Apache.Redmineyum updateyum -y groupinstall "Development Tools"yum ...

  8. 自学Python之路-Python基础+模块+面向对象+函数

    自学Python之路-Python基础+模块+面向对象+函数 自学Python之路[第一回]:初识Python    1.1 自学Python1.1-简介    1.2 自学Python1.2-环境的 ...

  9. 【BZOJ3601】一个人的数论(数论)

    [BZOJ3601]一个人的数论(数论) 题面 BZOJ 怎么这图片这么大啊... 题解 要求的是\(\displaystyle \sum_{i=1}^n [gcd(i,n)=1]i^d\) 然后把\ ...

  10. 【转】STM32擦除内部FLASH时间过长导致IWDG复位分析

    @20119-01-29 [小记] STM32擦除内部FLASH时间过长导致IWDG复位分析