一、构造器:

1、定义:构造器是类的特殊方法,它的主要作用是完成对象的初始化。

           即在创建对象时初始化对象。

      本质是方法。

2、特点:

  a、方法名和类名一致。

  b、无返回值。

  c、构造器的调用由系统完成。

  d、构造器修饰符可以默认也可以指定。

3、基本语法:

public class Overload {
public static void main(String[] args) {
Person person = new Person("张三", 20);
System.out.println(person.name);
System.out.println(person.age);
}
} class Person {
String name;
int age;
/*
1、构造器无返回值,也不能写void。
2、构造器名称和类名一样。
3、(String pName, int pAge)形参列表。
* */
public Person(String pName, int pAge) {
name = pName;
age = pAge;
}

}

  

4、注意事项:

  a、一个类可以定义多个不同构造器,即构造器重载。构造器本质是方法,可以进行重载。

public class Overload {
public static void main(String[] args) {
Person person = new Person("张三", 20);
Person person2= new Person("张三"); }
} class Person {
String name;
int age;
public Person(String pName, int pAge) {
name = pName;
age = pAge;
}
public Person(String pName) {
name = pName;
}
}

  b、构造器是完成对象的初始化,而不是创建对象。

  c、如果没有定义构造器,系统默认生成一个无参构造器。

public class Overload {
public static void main(String[] args) {
Person person = new Person();
}
} class Person {
String name;
int age;
}

  

  d、一旦定义了构造器,默认构造器就被覆盖了,就不能再使用了,除非自己显示的定义一下。

  如何显示定义:

  修饰符 类名() {};

对象创建流程内存图:

具体实现步骤:

1、加载person类信息(Person.class),只会加载一次。

2、在堆中分配空间(地址)。

3、完成对象的初始化:

  a、默认初始化:age=0 name=null

  b、显示初始化:age = 90 name = null

  c、构造器初始化:age=20 name=小倩

4、把对象在堆中的地址返回给栈中的 p (p是对象名,也可以理解为对象的应用)。真正的对象实在堆中new出来的那个。

二、this:

1、定义:

每一个对象创建后,Java虚拟机(JVM)就会给这个对象分配一个引用自身的指针,这个指针的名字就是 this,

this代表的就是当前对象。

简单的说:哪个对象调用,this就代表哪个对象。

2、注意细节:

  a、this关键字可以用来访问本类的属性、方法、构造器。

  b、this用于区分当前类的属性和局部变量。

  c、在本类方法中访问另外方法:this.方法名(参数列表)。this写在第一行。

class Person {
public int sum(int n1, int n2) {
this.cla(12,22);
return n1 + n2;
} public int cla(int a1, int a2) {
this.sum(12, 22);
return a1 - a2;
}
}

  

  d、在构造器中访问另一个构造器:this(参数列表)。this要放在第一条语句,只能在构造器中访问另一个构造器。

class Person {
String name;
int age;
public Person(String pName, int pAge) {
this("jack");
name = pName;
age = pAge;
}
public Person(String pName) {
name = pName;
}
}

  e、this不能在类定义的外部使用,只能在类定义的方法中使用。

   f、this只能在类中的非静态方法中使用,静态方法和静态的代码块中绝对不能出现this,并且this只和特定的对象关          联,而不和类关联,同一个类的不同对象有不同的this。

Java基础学习:8、构造器(构造方法)和this的更多相关文章

  1. 尚学堂JAVA基础学习笔记

    目录 尚学堂JAVA基础学习笔记 写在前面 第1章 JAVA入门 第2章 数据类型和运算符 第3章 控制语句 第4章 Java面向对象基础 1. 面向对象基础 2. 面向对象的内存分析 3. 构造方法 ...

  2. Java基础学习-- 继承 的简单总结

    代码参考:Java基础学习小记--多态 为什么要引入继承? 还是做一个媒体库,里面可以放CD,可以放DVD.如果把CD和DVD做成两个没有联系的类的话,那么在管理这个媒体库的时候,要单独做一个添加CD ...

  3. [转帖]java基础学习总结——多态(动态绑定)

    https://www.cnblogs.com/xdp-gacl/p/3644035.html 多态的概念 java基础学习总结——多态(动态绑定) 一.面向对象最核心的机制——动态绑定,也叫多态

  4. Java基础学习(2)

    Java基础学习(二) 面向对象 对象:客观存在的事物 面向对象:人具体关注的事物的某些信息 类:是模子,确定对象会拥有的特征(属性)和行为(方法) 对象的属性:对象具有的各种特征 对象的方法:对象能 ...

  5. java基础学习笔记五(抽象类)

    java基础学习总结——抽象类 抽象类介绍

  6. java基础篇 之 构造器内部的多态行为

    java基础篇 之 构造器内部的多态行为 ​ 我们来看下下面这段代码: public class Main { public static void main(String[] args) { new ...

  7. Java基础学习中一些词语和语句的使用

    在Java基础学习中,我们刚接触Java会遇到一些词和语句的使用不清的情况,不能很清楚的理解它的运行效果会是怎么样的,如:break,continue在程序中运行效果及跳转位置, 1.先来看看brea ...

  8. Java基础学习笔记总结

    Java基础学习笔记一 Java介绍 Java基础学习笔记二 Java基础语法之变量.数据类型 Java基础学习笔记三 Java基础语法之流程控制语句.循环 Java基础学习笔记四 Java基础语法之 ...

  9. 转载-java基础学习汇总

    共2页: 1 2 下一页  Java制作证书的工具keytool用法总结 孤傲苍狼 2014-06-24 11:03 阅读:25751 评论:3     Java基础学习总结——Java对象的序列化和 ...

  10. java基础学习总结——开篇

    java是我学习的第一门编程语言,当初学习java基础的时候下了不少功夫,趁着这段时间找工作之际,好好整理一下以前学习java基础时记录的笔记,当作是对java基础学习的一个总结吧,将每一个java的 ...

随机推荐

  1. 计算机网络基础08 Socket网络通信

    部分内容来自:https://www.jianshu.com/p/066d99da7cbd 1  七层网络架构 在解释socket之前,先了解下七层网络架构 https://www.cnblogs.c ...

  2. 教你用手机的NFC功能模拟门禁卡,实现出门不带卡

    此教程教您将门禁卡.考勤卡.会员卡.停车卡.电梯卡等等各种卡片模拟进NFC手机里,从而用手机代替门禁卡 一.软硬件准备 NFC Tool 手机上的IC卡读写编辑软件,搭配蓝牙读卡器或者OTG读卡器,可 ...

  3. LOJ 数列分块入门 8

    \(\text{Solution}\) 一看有区间赋值直接上 \(ODT\) \(\text{Code}\) #include <cstdio> #include <iostream ...

  4. JZOJ 4270.【NOIP2015模拟10.27】魔道研究

    魔道研究 题面 思路 简单的想,就是在 \(T\) 个可重集合每个中选出 \(k\) 个最大的数组成新的可重集合,其中 \(k\) 为其编号 然后在新的集合中选前 \(n\) 大的数,求其和 考虑开 ...

  5. Postgres14.4(Docker安装)

    Postgres14.4(Docker安装) 一,Docker拉取镜像 docker pull postgres:14.4 #检查镜像是否拉取成功 docker images | grep postg ...

  6. VueRouter 报错:inject() can only be used inside setup() or functional components

    单独创建的一个文件,封装了登录函数的业务逻辑,出现了一个警告,紧接着就是报错:说不能读取到路由的 push 函数.路由必须在组件里面使用,不能在 ts 或 js 文件中使用. 还要注意的点是,在使用路 ...

  7. Word 设置页眉、页脚、页码

    页眉:在 Word 文档中,每个页面的顶部区域为页眉.常用于显示文档的附加信息,可以插入时间.图形.公司微标.文档标题.文件名或作者姓名等. 页脚:页脚与页眉的作用相同,都可以作为显示文档的附加信息, ...

  8. C# WCF实现聊天室功能

    1.WCF是什么 Windows Communication Foundation(WCF)是由微软开发的一系列支持数据通信的应用程序框架 看这篇文章之前,可以先看我的另一篇文章,初步了解一下WCF: ...

  9. XView 架构升级之路

    作者:京东零售 胡本奎 一 背景 1 是什么 XView是一个透明的塑料袋(容器),基于通用的webview框架改造而来,通常用于大促弹窗等营销场景,展现形式如下图: 2 痛点 在实际的开发使用中XV ...

  10. rfid串口dma_delay()引发的问题

    接rfid读卡器的串口,有dma_delay()时,会有问题 现象是: 规律性的错误 解决办法:去掉dma_delay()即可