Java基础学习:8、构造器(构造方法)和this
一、构造器:
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的更多相关文章
- 尚学堂JAVA基础学习笔记
目录 尚学堂JAVA基础学习笔记 写在前面 第1章 JAVA入门 第2章 数据类型和运算符 第3章 控制语句 第4章 Java面向对象基础 1. 面向对象基础 2. 面向对象的内存分析 3. 构造方法 ...
- Java基础学习-- 继承 的简单总结
代码参考:Java基础学习小记--多态 为什么要引入继承? 还是做一个媒体库,里面可以放CD,可以放DVD.如果把CD和DVD做成两个没有联系的类的话,那么在管理这个媒体库的时候,要单独做一个添加CD ...
- [转帖]java基础学习总结——多态(动态绑定)
https://www.cnblogs.com/xdp-gacl/p/3644035.html 多态的概念 java基础学习总结——多态(动态绑定) 一.面向对象最核心的机制——动态绑定,也叫多态
- Java基础学习(2)
Java基础学习(二) 面向对象 对象:客观存在的事物 面向对象:人具体关注的事物的某些信息 类:是模子,确定对象会拥有的特征(属性)和行为(方法) 对象的属性:对象具有的各种特征 对象的方法:对象能 ...
- java基础学习笔记五(抽象类)
java基础学习总结——抽象类 抽象类介绍
- java基础篇 之 构造器内部的多态行为
java基础篇 之 构造器内部的多态行为 我们来看下下面这段代码: public class Main { public static void main(String[] args) { new ...
- Java基础学习中一些词语和语句的使用
在Java基础学习中,我们刚接触Java会遇到一些词和语句的使用不清的情况,不能很清楚的理解它的运行效果会是怎么样的,如:break,continue在程序中运行效果及跳转位置, 1.先来看看brea ...
- Java基础学习笔记总结
Java基础学习笔记一 Java介绍 Java基础学习笔记二 Java基础语法之变量.数据类型 Java基础学习笔记三 Java基础语法之流程控制语句.循环 Java基础学习笔记四 Java基础语法之 ...
- 转载-java基础学习汇总
共2页: 1 2 下一页 Java制作证书的工具keytool用法总结 孤傲苍狼 2014-06-24 11:03 阅读:25751 评论:3 Java基础学习总结——Java对象的序列化和 ...
- java基础学习总结——开篇
java是我学习的第一门编程语言,当初学习java基础的时候下了不少功夫,趁着这段时间找工作之际,好好整理一下以前学习java基础时记录的笔记,当作是对java基础学习的一个总结吧,将每一个java的 ...
随机推荐
- 学习Java Day12
今天学习了多维数组
- ES6的新特性有哪些
1.let.const 2.模板字符串 3.箭头函数 4.解构赋值 5.promise 6.数组的新方法 7.对象的新方法 8.class类 9.新增Set.Map两种数据结构 10.proxy
- 题解 [SCOI2007]压缩
好题. 显然区间 dp,令 \(f_{l, r}\) 为 \([l, r]\) 之间的最短的长度.如果我们要压缩,那么就要考虑 M 与 R 的位置.由于我们大体是从左往右来转移的,所以显然我们只需要记 ...
- 自己从零写操作系统GrapeOS系列教程——4.GrapeOS开发环境介绍
1. 开发环境简介 为了减少开发过程中不必要的麻烦,希望大家的开发环境尽量与我的保持一致. 我的开发环境如下: Windows10电脑一台 Visual Studio Code(最好是最新版) Vir ...
- swiper列数 slidesPerView属性决定
swiper轮播一行有几列如下决定 slidesPerView为3是三列,不写一列 // 初始化文章swiper var newsSwiper = new Swiper('#news-swiper', ...
- vue还可以这样写
1.这两种写法都可以: var vm = new Vue({ data(){ return { scaleFlag:'big', } }, //data:{}, created: function ( ...
- 结合ChatGPT体验新必应new bing 的惊喜:这是我第一次使用的感受
前言 最近相信大家都被 ChatGPT 刷屏了,它的爆火大家是有目共睹的,微软的新必应(New Bing) 是结合了比 ChatGPT 更强大的新一代 OpenAI 语言模式,接下来我们一起来&quo ...
- go并发实战(读书笔记1)
go并发实战,第一天 大部分本书第一章节是来介绍go语言基础的,其实如果你不是大师,只是一个才起飞的菜鸟,建议不要跳过喔! 为什么不要跳过?因为每个人对语言的认知是不一样的,看看别人是怎么理解一个新事 ...
- LeetCode-838 推多米诺
来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/push-dominoes 题目描述 n 张多米诺骨牌排成一行,将每张多米诺骨牌垂直竖立.在开始时 ...
- kotlin学习-Coroutines(协程)
协程(又名纤程),轻量级线程(建立在线程基础上,属于用户态调用),非阻塞式编程(像同步编写一样),在用户态内进行任务调度,避免与内核态过多交互问题,提高程序快速响应.协程使用挂起当前上下文替代阻塞,被 ...