构造方法

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. Nginx split_client模块

    一般用户AB测试根据比例调用指定的接口  默认编译进nginx Syntax: split_clients string $variable { ... } Default: — Context: h ...

  2. HTML5-SVG-基础篇

    什么是SVG? SVG 指可伸缩矢量图形 (Scalable Vector Graphics) SVG 用于定义用于网络的基于矢量的图形 SVG 使用 XML 格式定义图形 SVG 图像在放大或改变尺 ...

  3. 在一台服务器上配置多个Tomcat的方法

    原文来自:http://blog.csdn.net/lmb55/article/details/49561669 这段时间在开发智能导航的热部署功能,需要从一台服务器去访问其它的24台服务器去进行相关 ...

  4. #186 path(容斥原理+状压dp+NTT)

    首先只有一份图时显然可以状压dp,即f[S][i]表示S子集的哈密顿路以i为终点的方案数,枚举下个点转移. 考虑容斥,我们枚举至少有多少条原图中存在的边(即不合法边)被选进了哈密顿路,统计出这个情况下 ...

  5. 为什么Elasticsearch查询变得这么慢了?

    参考内容:https://mp.weixin.qq.com/s/RTpBaFpNELQCO6VE0KMfsw

  6. I - Tunnel Warfare HDU - 1540 线段树最大连续区间

    题意  :一段区间  操作1 切断点 操作2 恢复最近切断的一个点 操作3 单点查询该点所在最大连续区间 思路:  主要是push_up :  设区间x 为母区间  x<<1 ,x< ...

  7. jquery-Ajax请求用例码

    $.ajax({                    type:"post",                    url: 'domain’,                 ...

  8. 爬虫_中国天气网_文字天气预报(xpath)

    import requests from lxml import etree headers = 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/5 ...

  9. MT【273】2014新课标压轴题之$\ln2$的估计

    已知函数$f(x)=e^x-e^{-x}-2x$(1)讨论$f(x)$的单调性;(2)设$g(x)=f(2x)-4bf(x),$当$x>0$时,$g(x)>0,$求$b$的最大值;(3)已 ...

  10. 【POJ1083】 Moving Tables (并行的搬运)

    BUPT2017 wintertraining(15) #6E 题意 房间1和2,3和4,...,399和400共用一节走廊,有q次从房间li到ri的搬运桌子,一次搬运10分钟.两个搬运如果走廊有重叠 ...