Java构造方法

关于构造方法

  • 构造方法又被称作:构造函数/构造器/Constructor

  • 语法结构:

      [修饰符列表] 构造方法名(形式参数列表){
    构造方法体;
    }

    对比普通方法语法结构

      [修饰符列表] 返回值类型 构造方法名(形式参数列表){
    构造方法体;
    }
    • 对于构造方法来说,返回值类型 不需要指定,也没有 void

    • 写了 void 就是普通方法

  • 对于构造方法的方法名必须与类名保持一致

  • 构造方法的作用:

    • 存在意义,通过构造方法的调用,可以创建对象
    • 创建对象的同时,初始化实例变量的内存空间
  • 构造方法如何调用?

    普通方法调用:

    • static 是:类名.方法名(实参列表)
    • static 是:引用.方法名(实参列表)

    构造方法调用:

    • new 构造方法名(实参列表)
  • 构造方法有返回值

    但不需要写 return 返回值;,构造方法结束后Java程序自动返回

    由于返回值类型是构造方法所在类的类型,所以返回值类型不用写

    如果类中没有人为写构造方法,其中还存在一个默认无参数构造方法

      new 构造方法名(){
    // 其中有代码,初始化实例变量的内存空间
    // 不然实例变量哪里来的默认值呢
    }

    【回忆】实例变量默认值:

    • byte,short,int,long 默认值 0
    • float,double 默认值 0.0
    • boolean 默认值 false
    • 引用数据类型 默认值 null
  • 构造方法支持支持重载机制

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构造方法的更多相关文章

  1. Java学习笔记之---构造方法

    Java学习笔记之---构造方法 (一)构造方法的特性 构造方法不能被对象单独调用 构造方法与类同名且没有返回值 构造方法只能在对象实例化的时候被调用 当没有指定构造方法时,系统会自动添加无参的构造方 ...

  2. [java学习笔记]java语言核心----面向对象之this关键字

    一.this关键字 体现:当成员变量和函数的局部变量重名时,可以使用this关键字来区别:在构造函数中调用其它构造函数 原理:         代表的是当前对象.         this就是所在函数 ...

  3. [java学习笔记]java语言核心----面向对象之构造函数

    1.构造函数概念 特点: 函数名与类名相同 不用定义返回值类型 没有具体的返回值 作用:                给对象进行初始化 注意: 默认构造函数 多个构造函数是以重载出现的 一个类中如果 ...

  4. 大数据学习笔记——Java篇之网络编程基础

    Java网络编程学习笔记 1. 网络编程基础知识 1.1 网络分层图 网络分层分为两种模型:OSI模型以及TCP/IP网络模型,前者模型分为7层,是一个理论的,参考的模型:后者为实际应用的模型,具体对 ...

  5. 大数据学习笔记——Java篇之集合框架(ArrayList)

    Java集合框架学习笔记 1. Java集合框架中各接口或子类的继承以及实现关系图: 2. 数组和集合类的区别整理: 数组: 1. 长度是固定的 2. 既可以存放基本数据类型又可以存放引用数据类型 3 ...

  6. Java学习笔记 -- Java定时调度工具Timer类

    1 关于 (时间宝贵的小姐姐请跳过) 本教程是基于Java定时任务调度工具详解之Timer篇的学习笔记. 什么是定时任务调度 基于给定的时间点,给定的时间间隔或者给定的执行次数自动执行的任务. 在Ja ...

  7. 大数据学习笔记——Java篇之IO

    IO学习笔记整理 1. File类 1.1 File对象的三种创建方式: File对象是一个抽象的概念,只有被创建出来之后,文件或文件夹才会真正存在 注意:File对象想要创建成功,它的目录必须存在! ...

  8. [Java学习笔记] Java异常机制(也许是全网最独特视角)

    Java 异常机制(也许是全网最独特视角) 一.Java中的"异常"指什么 什么是异常 一句话简单理解:异常是程序运行中的一些异常或者错误. (纯字面意思) Error类 和 Ex ...

  9. 学习笔记——Java类和对象

    今天学习了Java的类和对象的相关知识,由于Java面向对象的编程的思想和C++几乎一样,所以需要更多的关注Java的一些不同之处. 1.类 1.1 在类这一块,除了基本的成员变量,成员方法,构造函数 ...

  10. 设计模式学习笔记——java中常用的设计模式

    单例设计模式(Singleton Pattern) 观察者模式(Observer Pattern) 工厂模式(Factory Pattern) 策略模式(Strategy Pattern) 适配器模式 ...

随机推荐

  1. 鸿蒙极速入门(五)-路由管理(Router)

    页面路由指在应用程序中实现不同页面之间的跳转和数据传递.HarmonyOS提供了Router模块,通过不同的url地址,可以方便地进行页面路由,轻松地访问不同的页面. 一.基础使用 Router模块提 ...

  2. RTOS官方文档学习

    任务与协程 区别 一个程序可以只有任务.只有协程.二者都有,但不可以通过队列/信号量互相传递数据 任务特点 任务之间可以互相独立 每个任务分配自己的堆栈,提高了RAM使用率 操作简单.按优先级抢占式执 ...

  3. 使用Python实现深度学习模型:序列到序列模型(Seq2Seq)

    本文分享自华为云社区<使用Python实现深度学习模型:序列到序列模型(Seq2Seq)>,作者: Echo_Wish. 序列到序列(Seq2Seq)模型是一种深度学习模型,广泛应用于机器 ...

  4. 第一个java的应用程序

    编写java第一个程序 class HelloWorld { public static void main(String[] args){ System.out.print("Hello ...

  5. 2024-06-08:用go语言,给定三个正整数 n、x和y, 表示城市中的房屋数量以及编号为x和y的两个特殊房屋。 在这座城市中,房屋通过街道相连。对于每个编号i(1 <= i < n), 存在一条

    2024-06-08:用go语言,给定三个正整数 n.x和y, 表示城市中的房屋数量以及编号为x和y的两个特殊房屋. 在这座城市中,房屋通过街道相连.对于每个编号i(1 <= i < n) ...

  6. django通过celery定时任务

    settings.py   # Broker配置,使用Redis作为消息中间件 BROKER_URL = 'redis://127.0.0.1:6379/0' # BACKEND配置,这里使用redi ...

  7. 《Android开发卷——HTTP网络通信,HTTP网络连接》

    为了访问互联网,需要设置应用程序获取"androd.permission.INTERNET"权限的许可. 一.使用Apache接口(org.apache.http)并实现网络连接的 ...

  8. 打开ftp服务器上的文件夹时发生错误,请检查是否有权限访问该文件夹

    产生这种现象有很多方面的原因 如果你能用命令行的方式访问ftp服务器,但是不能用资源管理器访问,那么请看下去. 1.打开IE浏览器,点击设置 2.点击Internet选项,进入高级 3.取消勾选 大功 ...

  9. 算法金 | A - Z,115 个数据科学 机器学习 江湖黑话(全面)

    大侠幸会,在下全网同名「算法金」 0 基础转 AI 上岸,多个算法赛 Top 「日更万日,让更多人享受智能乐趣」 机器学习本质上和数据科学一样都是依赖概率统计,今天整整那些听起来让人头大的机器学习江湖 ...

  10. 多Github账号指定ssh-key提交代码

    问题 目前github中代码提交只能通过ssh方式. 每个github账号只能添加一个专用的ssh-key. 如果同时有多个Github账号在用的话就必须给每个账号绑定不同的ssh-key. 方法一: ...