学习笔记--Java构造方法
Java构造方法
关于构造方法
构造方法又被称作:构造函数/构造器/Constructor
语法结构:
[修饰符列表] 构造方法名(形式参数列表){
构造方法体;
}
对比普通方法语法结构
[修饰符列表] 返回值类型 构造方法名(形式参数列表){
构造方法体;
}
对于构造方法来说,
返回值类型不需要指定,也没有void写了
void就是普通方法
对于构造方法的方法名必须与类名保持一致
构造方法的作用:
- 存在意义,通过构造方法的调用,可以创建对象
- 创建对象的同时,初始化实例变量的内存空间
构造方法如何调用?
普通方法调用:
- 有
static是:类名.方法名(实参列表) - 无
static是:引用.方法名(实参列表)
构造方法调用:
new 构造方法名(实参列表)
- 有
构造方法有返回值
但不需要写
return 返回值;,构造方法结束后Java程序自动返回由于返回值类型是构造方法所在类的类型,所以返回值类型不用写
如果类中没有人为写构造方法,其中还存在一个默认无参数构造方法:
new 构造方法名(){
// 其中有代码,初始化实例变量的内存空间
// 不然实例变量哪里来的默认值呢
}
【回忆】实例变量默认值:
- byte,short,int,long 默认值
0 - float,double 默认值
0.0 - boolean 默认值
false - 引用数据类型 默认值
null
- byte,short,int,long 默认值
构造方法支持支持重载机制
public class ConstructorTest {
public static void main(String[] args) {
User u1 = new User();
User u2 = new User("jock");
User u3 = new User(10);
}
}
public class User{
// 用户编号
private int id;
// 用户名称
private String name;
// 下列三个构造方法,
// this 可以暂时看作类引用后的对象或实例的一个代称
public User(){
}
public User(String n){
this.name = n;
System.out.println("String");
}
public User(int num){
this.id = num;
System.out.println("int");
}
}
参数传递
【回顾】对象和引用梳理:
对象【实例】:目前在使用
new运算符在堆内存中开辟的内存空间称为对象引用:是一个变量,不一定是局部变量也可能是成员变量。
引用保存了内存地址,指向了堆内存中的对象
参数传递中变量的变化
- 不变
public class Test01 {
public static void main(String[] args) {
int a = 10; // 10 a 是main方法的局部变量
add(i); // 11 其中main方法 a 的值传入add方法 i
// 使用 add(i); 中的 i++ 不会影响到 main方法 a
System.out.println(a); // 10 没有变化
}
public static void add(int i){
// i 是add方法局部变量
i++;
System.out.println("add --> " + i);
}
}
- 改变
public class Test02 {
public static void main(String[] args) {
User u = new User(10); // u.age 10
add(u); // 11
// u中的是内存地址,指向对象
// u 传入后 ,user 也会保存一个与 u 中相同的内存地址
System.out.println("main --> " + u.age); // 11
// 虽然是两个地址,但指向同一个对象
}
public static void add(User user){
user.age++;
System.out.println("add --> " + user.age);
}
}
class User{
// 实例变量
int age;
// 构造方法
public User(int i){
age = i;
}
}
比喻:
两个人,都有10元现金虽然钱一样多,但各是个的。有而是20元,各用各的
两个人,都知道一串密码【银行卡共用10元】,可以通过密码去银行取存钱。有而是10元,共有通过密码
- 密码 ------ 引用中保存的内存地址
- 银行卡 ---- 对象【实例】
- 去银行 ---- 方法
- 钱 -------- 实例变量
常规数据
int i = 10;
int j = i;
// i 传递给 j,实际只是将 i 变量中保存的 10 传递给 j,j 实际上是一块全新的内存空间
涉及引用数据
User u1 = 0x1234; // 0x1234内存地址,new运算符+调用构造方法
User u2 = u1;
// u1 传递给 u2,实际上是将0x1234这个值赋值给 u2,与上面是一样的,u1 和 u2各是两个不同的局部变量
// 不过在此之上 u1 和 u2 保存内存地址0x1234指向堆内存中的同一个对象【实例】
Java面向对象
- 初识Java面向对象
- 区分Java中类与对象
- 面向对象的封装性
- Java构造方法
- Java中this关键字
- Java中static关键字
- Java面向对象的继承
- Java中final关键字
- package和import
学习笔记--Java构造方法的更多相关文章
- Java学习笔记之---构造方法
Java学习笔记之---构造方法 (一)构造方法的特性 构造方法不能被对象单独调用 构造方法与类同名且没有返回值 构造方法只能在对象实例化的时候被调用 当没有指定构造方法时,系统会自动添加无参的构造方 ...
- [java学习笔记]java语言核心----面向对象之this关键字
一.this关键字 体现:当成员变量和函数的局部变量重名时,可以使用this关键字来区别:在构造函数中调用其它构造函数 原理: 代表的是当前对象. this就是所在函数 ...
- [java学习笔记]java语言核心----面向对象之构造函数
1.构造函数概念 特点: 函数名与类名相同 不用定义返回值类型 没有具体的返回值 作用: 给对象进行初始化 注意: 默认构造函数 多个构造函数是以重载出现的 一个类中如果 ...
- 大数据学习笔记——Java篇之网络编程基础
Java网络编程学习笔记 1. 网络编程基础知识 1.1 网络分层图 网络分层分为两种模型:OSI模型以及TCP/IP网络模型,前者模型分为7层,是一个理论的,参考的模型:后者为实际应用的模型,具体对 ...
- 大数据学习笔记——Java篇之集合框架(ArrayList)
Java集合框架学习笔记 1. Java集合框架中各接口或子类的继承以及实现关系图: 2. 数组和集合类的区别整理: 数组: 1. 长度是固定的 2. 既可以存放基本数据类型又可以存放引用数据类型 3 ...
- Java学习笔记 -- Java定时调度工具Timer类
1 关于 (时间宝贵的小姐姐请跳过) 本教程是基于Java定时任务调度工具详解之Timer篇的学习笔记. 什么是定时任务调度 基于给定的时间点,给定的时间间隔或者给定的执行次数自动执行的任务. 在Ja ...
- 大数据学习笔记——Java篇之IO
IO学习笔记整理 1. File类 1.1 File对象的三种创建方式: File对象是一个抽象的概念,只有被创建出来之后,文件或文件夹才会真正存在 注意:File对象想要创建成功,它的目录必须存在! ...
- [Java学习笔记] Java异常机制(也许是全网最独特视角)
Java 异常机制(也许是全网最独特视角) 一.Java中的"异常"指什么 什么是异常 一句话简单理解:异常是程序运行中的一些异常或者错误. (纯字面意思) Error类 和 Ex ...
- 学习笔记——Java类和对象
今天学习了Java的类和对象的相关知识,由于Java面向对象的编程的思想和C++几乎一样,所以需要更多的关注Java的一些不同之处. 1.类 1.1 在类这一块,除了基本的成员变量,成员方法,构造函数 ...
- 设计模式学习笔记——java中常用的设计模式
单例设计模式(Singleton Pattern) 观察者模式(Observer Pattern) 工厂模式(Factory Pattern) 策略模式(Strategy Pattern) 适配器模式 ...
随机推荐
- 行列式求值,从 $n!$ 优化到 $n^3$
前置知识 \(\sum\) 为累加符号,\(\prod\) 为累乘符号. 上三角矩阵指只有对角线及其右上方有数值其余都是 \(0\) 的矩阵. 如果一个矩阵的对角线全部为 \(1\) 那么这个矩阵为单 ...
- request to https://registry.npm.taobao.org/cnpm failed, reason: certificate has expired
换华为的,否则会出问题:cnpm confg set registry https://mirrors.huaweicloud.com/repository/npm/ npm ERR! code CE ...
- 009. gitlab备份和恢复
gitlab备份 #1. 创建添加配置文件 vim /etc/gitlab/gitlab.rb 文件尾添加: gitlab_reils['backup_path'] = '/data/backup/g ...
- 7.26考试总结(NOIP模拟24)[matrix·block·graph]
你那无聊的幻想,就由我来打破! 前言 补坑中.. 我都不知道自己这场模拟赛怎么打的了. 非常玄学,前三个小时一直在想正解,然后最后 20min 感觉 T1 不太稳,就又加上了一个暴力. 后来一看只有最 ...
- node child_process模块exec
child_process是Node.js自带的核心模块之一,无需额外安装即可使用. child_process模块提供了创建子进程的功能,可以在Node.js中执行外部命令.脚本文件等,并与其进行交 ...
- JS获取表单所有内容
var formData = {}; var t = $('#Form').serializeArray(); $.each(t, function() { formData[this.name] = ...
- H5弹窗底层滑动
H5弹窗底层滑动 背景 产品提出H5 弹出窗滑动时,底层页面也会跟随滑动,需要调整禁止底层滑动,增加用户体验. 问题产生原因 ios 滑动时有回弹效果 顶层元素滑动默认行为 解决办法 阻止元素的默认( ...
- 通俗理解GAN -- 基础认知
Smiling & Weeping ---- 你已春风摇曳,我仍一身旧雪 1.GAN的基本思想 GAN全称对抗生成网络,顾名思义是生成模型的一种,而他的训练则是一种对抗博弈状态中的.下面我们举 ...
- vue3实现模拟地图上,站点名称按需显示的功能
很久很久没有更新博客了,因为实在是太忙了,每天都有公司的事情忙不完....... 最近在做车辆模拟地图,在实现控制站点名称按需显示时,折腾了好一段时间,特此记录一下.最终界面如下图所示: 站点显示需求 ...
- Codeforces Round #243 (Div. 2) Problem B - Sereja and Mirroring 题解
http://codeforces.com/contest/426/problem/B 题意大概就是对称有关,要注意的是,当行数为奇数的时候,答案就是行数本身 #include<iostream ...