一、 构造器(构造方法|构造函数)

在创建对象时(new),必会调用一个特殊的方法,这个方法是初始化对象信息的为new服务的。这个方法称为“构造器”

使用 new + 构造方法创建一个新的对象。

构造函数是定义在 Java类中的一个用来初始化对象的函数。

构造函数与类同名且没有返回值。

例如: Person类的构造函数:

  1. public class Person {
  2. int id;
  3. int age;
  4. Person(int n, int i){
  5. id = n;
  6. age = i;
  7. }
  8. }

创建对象时,使用构造函数初始化对象的成员变量

  1. public class Test {
  2. public static void main(String[] args) {
  3. Person tom = new Person(1, 18);
  4. Person jeck = new Person(2, 20);
  5. }
  6. }

二、构造方法的特点:

1) 名称必须和类名一致,与类名相同

2) 没有返回类型|void

3) 构造器可以存在return,return有选择的跳出构造器

4) 不能随便调用,和new在一起使用,其他时候不能调用

5) 修饰符不能为 final abstract static

作用:

初始化对象信息,不是用于创建对象的

空构造:

没有参数的构造器、无参构造

1) 一个类中,如果没有显示|手动 加入 任意构造器 javac编译后 自动加入空构造

2) 一旦加入构造器, javac 不会加入空构造器

三、方法的重载

方法的重载是指一个类中可以定义有相同的方法名,但参数不同的多个方法。调用时,会根据不同的参数列表选择对应的方法。

四、构造方法的重载

与普通方法一样,构造方法也可以重载

例子如下:

五、 引用与内存分析

A:一个对象的内存图

B:二个对象的内存图

C:三个对象的内存图

内存分析

划分

引用的特点:

1) 同一时刻一个一引用只能指向一个对象

2) 一个对象可以被多个引用所指向,其中一个对其进行更改,该对象的其他引用也可见该变化

3) Java一切为值传递,引用拷贝地址

约定俗成的命名规则

类名的首字母大写

变量名和方法名的首字母小写

运用驼峰标识

例子:

  1. public class Cat {
  2. String color; // 毛的颜色
  3. String name; // 名称
  4. public void chase(Mice mice){
  5. mice.type = "jerry"; // 改变
  6. System.out.println(name + " 逮 " + mice.type);
  7. }
  8. public static void main(String[] args) {
  9. // 引用 与内存分析(运行期为--》数据的流向)
  10. Cat cat = new Cat();
  11. cat = new Cat();
  12. // 引用发生变化,同一个时刻一个引用只能指向一个对象
  13. cat.color = "黑色";
  14. cat.name = "tom";
  15. Mice mice = new Mice();
  16. mice.type = "米奇";
  17. // 将二者联系起来 --》 依赖
  18. cat.chase(mice);
  19. // 传递时,值拷贝,拷贝地址,拷贝完成后 一个对象被多个引用所指向
  20. System.out.println(mice.type);
  21. // jerry 其中一个对其发生变化,该对象的其他引用也可减该变化
  22. }
  23. }
  24. class Mice{
  25. String type;
  26. }

定义如下类

  1. public class BirthDate {
  2. int day;
  3. int month;
  4. int year;
  5. public BirthDate(int d, int m, int y){
  6. day = d;
  7. month = m;
  8. year = y;
  9. }
  10. void setDay(int d){
  11. day = d;
  12. }
  13. void setMonth(int m){
  14. month = m;
  15. }
  16. void setYear(int y){
  17. year = y;
  18. }
  19. int getDay(){
  20. return day;
  21. }
  22. int getMonth(){
  23. return month;
  24. }
  25. int getYear(){
  26. return year;
  27. }
  28. void display(){
  29. System.out.println(day + "-" + month + "-" + year);
  30. }
  31. }

测试类:

  1. public class Test {
  2. public static void main(String[] args) {
  3. Test test = new Test();
  4. int date = 9;
  5. BirthDate d1 = new BirthDate(7,7,1970);
  6. BirthDate d2 = new BirthDate(1,1,2000);
  7. test.change1(date);
  8. test.change2(d1);
  9. test.change3(d2);
  10. System.out.println(date);
  11. System.out.println(d1);
  12. System.out.println(d2);
  13. }
  14. void change1(int i){
  15. i = 1234;
  16. }
  17. void change2(BirthDate b){
  18. b = new BirthDate(22,2,2004);
  19. }
  20. void change3(BirthDate b){
  21. b.setDay(22);
  22. }
  23. }

总结:

对象的创建和使用,必须使用new 关键字创建对象,使用对象引用.成员变量来引用对象的成员变量,使用对象引用.方法(参数列表)来调用对象的方法。

同一类的每个对象有不同的成员变量存储空间,同一类的每个对象共享该类的方法,

非静态方法是针对每个对象进行调用 。

乐字节原创,转载请注明出处。请继续关注乐字节

乐字节Java构造器(构造方法|构造函数)、方法与内存分析的更多相关文章

  1. 乐字节Java反射之三:方法、数组、类加载器和类的生命周期

    本文承接上一篇:乐字节Java发射之二:实例化对象.接口与父类.修饰符和属性 继续讲述Java反射之三:方法.数组.类加载器 一.方法 获取所有方法(包括父类或接口),使用Method即可. publ ...

  2. Java构造器(构造方法)与方法区别

    构造器,又称为构造方法.构造器用于构造该类的实例,也就是对象. 格式如下:[修饰符]  类名 (形参列表){//n条语句} 构造方法是一种特殊的方法,与一般的方法区别:  1.构造方法的名字必须与定义 ...

  3. 乐字节Java反射之四:反射相关操作

    大家好,乐字节小乐继续为Java初学者讲述Java基础知识.上次说到乐字节Java反射之三:方法.数组.类加载器,这次是Java反射之四:反射相关操作 1.操作属性 //1.获取Class对象 Cla ...

  4. 乐字节Java继承|方法重写、super和final关键字

    大家好,乐字节的小乐又来了,上一篇是:乐字节Java|JavaBean.继承与权限修饰,也是属于Java继承的,今天继续Java继承. 一. 方法的重写 父类不满足子类的要求,按需改写.注意 方法签名 ...

  5. 乐字节Java编程语言发展,面向对象和类

    大家好,上次我们讲过了乐字节Java编程之方法.调用.重载.递归,接下来我们将会进入到Java封装的内容.Java编程语言发展,面向对象和类. 一.编程语言的发展 机器语言——直接由计算机的指令组成, ...

  6. java中构造方法和方法super/this超类与子类中初始化顺序

    java中构造方法和方法全面解析 我相信大多说人都对构造方法.方法不陌生,而且很了解,但我也相信有很多像我这样的没有一个很好很清晰很全面的认识,今天就把它整理如下,希望能给大家带来点方便与帮助,也希望 ...

  7. 乐字节Java|封装JavaBean、继承与权限修饰

    本文继续讲Java封装.上一篇:乐字节Java|GC垃圾回收机制.package和import语句 这次讲述JavaBean.继承与权限修饰 一. 封装javaBean 封装(Encapsulatio ...

  8. 乐字节Java反射之二:实例化对象、接口与父类、修饰符和属性

    大家好,小乐继续接着上集:乐字节Java反射之一:反射概念与获取反射源头Class 这次是之二:实例化对象.接口与父类.修饰符和属性 一:实例化对象 之前我们讲解过创建对象的方式,有new .克隆.反 ...

  9. 乐字节Java|GC垃圾回收机制、package和import

    本文接上一篇:乐字节Java|this关键字.static关键字.block块.本文是接着讲述JavaGC垃圾回收机制.package 和 import语句. 一.GC垃圾回收机制 GC全名:Garb ...

随机推荐

  1. linux系列(一):ls命令

    ls命令是linux下最常用的命令.ls命令就是list的缩写,默认下ls用来打印出当前目录的清单,如果ls指定其他目录,那么就会显示指定目录里的文件及文件夹清单. 通过ls 命令不仅可以查看linu ...

  2. 【原创】go语言学习(十二)struct介绍1

    目录: struct声明和定义 struct的内存布局以及构造函数 匿名字段和struct嵌套 struct与tag应用 struct声明和定义 1.Go中面向对象是通过struct来实现的, str ...

  3. jmeter+ant+jenkins构建自动化测试

    背景目的: 持续更新.... 参考文档:https://blog.csdn.net/cherish0123/article/details/79339732

  4. ICEMCFD中,face裂缝修复的小窍门【转载】

    转载自:http://blog.sina.com.cn/s/blog_4a21884b010005ng.html 采用ICEMCFD画网格的初学者,都对由cad(proe/ug/solidworks) ...

  5. 解决Mac系统IDEA debug卡顿问题

    查询资料发现,跟JDK8以及hosts设置有关. vim /private/etc/hosts 在127.0.0.1 localhost后面加上主机名即可,如<your hostname> ...

  6. uboot移植spi驱动

    记录一下在uboot内移植spi驱动的过程 芯片:freescale Mpc8308 uboot版本:u-boot-2009.11-rc1.2 需求:我们需要在uboot下通过spi配置一个时钟芯片( ...

  7. OpenJudge计算概论-买房子

    /*================================================================= 买房子 总时间限制: 1000ms 内存限制: 65536kB ...

  8. PEP 442 -- Safe object finalization

    https://www.python.org/dev/peps/pep-0442/ PEP 442 -- Safe object finalization PEP: 442 Title: Safe o ...

  9. git 初次提交

    前提:已经关联了ssh到本地,不用再输入用户名和密码 知道仓库地址:https://xxx.xxx.com/aiotcloud/yihao01-node-js.git 第一步:进入本地文件夹执行 gi ...

  10. 阿里云RDS与ECS服务器数据库做主从

    阿里云RDS与ECS服务器数据库做主从 [精] 里云RDS(数据库)基于飞天大规模分布式计算和存储能力,提供超高性价比的单机版实例,同时利用读写分离横向扩展读能力,满足网站类的业务需求.提供稳定.高性 ...