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

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

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

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

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

例如: Person类的构造函数:

public class Person {
int id;
int age;
Person(int n, int i){
id = n;
age = i;
}
}

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

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

二、构造方法的特点:

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

2) 没有返回类型|void

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

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

5) 修饰符不能为 final abstract static

作用:

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

空构造:

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

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

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

三、方法的重载

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

四、构造方法的重载

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

例子如下:

五、 引用与内存分析

A:一个对象的内存图

B:二个对象的内存图

C:三个对象的内存图

内存分析

划分

引用的特点:

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

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

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

约定俗成的命名规则

类名的首字母大写

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

运用驼峰标识

例子:

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

定义如下类

public class BirthDate {
int day;
int month;
int year;
public BirthDate(int d, int m, int y){
day = d;
month = m;
year = y;
}
void setDay(int d){
day = d;
}
void setMonth(int m){
month = m;
}
void setYear(int y){
year = y;
}
int getDay(){
return day;
}
int getMonth(){
return month;
}
int getYear(){
return year;
}
void display(){
System.out.println(day + "-" + month + "-" + year);
}
}

测试类:

public class Test {
public static void main(String[] args) {
Test test = new Test();
int date = 9;
BirthDate d1 = new BirthDate(7,7,1970);
BirthDate d2 = new BirthDate(1,1,2000);
test.change1(date);
test.change2(d1);
test.change3(d2);
System.out.println(date);
System.out.println(d1);
System.out.println(d2);
}
void change1(int i){
i = 1234;
}
void change2(BirthDate b){
b = new BirthDate(22,2,2004);
}
void change3(BirthDate b){
b.setDay(22);
}
}

总结:

对象的创建和使用,必须使用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. yii2.0场景的简单使用

    一.规则中使用场景规则场景的使用模型层public function rules(){ return [ [['name','product_id'],'required','on'=>'add ...

  2. python ros 警报上报

    #!/usr/bin/env python2. # -*- coding: utf- -*- import rospy import time from common_msgs.msg import ...

  3. avalon里面倒计时功能2

    // 转格式 timeStamp: function (second_time) { var time = parseInt(second_time) + "秒"; ) { ; ) ...

  4. Sollin算法的C++实现 BY gremount

    Sollin算法可以看作是Kruskal算法和Prim算法的综合 基本思想是: 1. 从所有节点都孤立的森林开始,通过合并树来得到最小生成树 2. 每次合并树的边都是用最小权重的割边 程序具体实现思路 ...

  5. python matplotlib(数据可视化)

    吐槽 网上搜了不少matplotlib安装方法(不信,你可以试试.) 我只能说,除了太繁琐,就是没什么用! 如果你是python3.6.5版本 我给你最最最正确的建议: 直接打开cmd,找到pip用命 ...

  6. OpenJudge计算概论-成绩判断

    /*========================================================= 成绩判断 总时间限制: 1000ms 内存限制: 6000kB 描述 输入一个0 ...

  7. ISO/IEC 9899:2011 条款6.2.5——类型

    6.2.5 类型 1.存储在一个对象中的值或由一个函数所返回的值的意义由用于访问该对象的表达式的类型来确定.(声明为一个对象的一个标识符是最简单的这种表达式:其类型在标识符的声明中指定.)类型被划分为 ...

  8. Unix/Linux系统下获得时间戳函数

    在Unix/Linux系统下,使用gettimeofday函数来获得当前系统的时间戳,精度可达到微秒(microsecond,即μs)级别. 通过结构体timeval来存放当前时间戳的信息: #ifn ...

  9. 机器学习 - 算法 - Xgboost 数学原理推导

    工作原理 基于集成算法的多个树累加, 可以理解为是弱分类器的提升模型 公式表达 基本公式 目标函数 目标函数这里加入了损失函数计算 这里的公式是用的均方误差方式来计算 最优函数解 要对所有的样本的损失 ...

  10. struct2json -- C结构体与 JSON 快速互转库V1.0发布

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/zhutianlong/article/d ...