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

在创建对象时(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 关键字创建对象,使用对象引用.成员变量来引用对象的成员变量,使用对象引用.方法(参数列表)来调用对象的方法。

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

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

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

最新文章

  1. phpcms v9 标签含义整理
  2. 《Linux内核设计与实现》CHAPTER18阅读梳理
  3. 谈谈final、finally和finalize
  4. sharepoint 2010 在aspx 写lambda 时错误
  5. nginx 反向代理 odoo, 速度提升
  6. Android 布局之DrawLayout
  7. Linux学习笔记6——映射虚拟内存
  8. Android中的主题Theme
  9. 解密-神秘的 RunLoop
  10. 快速构建Windows 8风格应用3-打包发布应用
  11. Mac 下格式化U盘
  12. [code segments] OpenCV3.0 SVM with C++ interface
  13. HDU - 4614 Vases and Flowers(二分+区间修改)
  14. Codeforces 1092E Minimal Diameter Forest
  15. Spring Boot 整合mybatis 使用多数据源
  16. C# 密封类使用sealed修饰
  17. sql存储过程算法
  18. 无法卸载Sql Server 的解决办法
  19. 用IntelliJ的IDEA来创建SpringBoot框架
  20. ORACLE数据库的关闭与重启

热门文章

  1. java上传文件夹文件
  2. [APIO2012]派遣 左偏树
  3. 题解 CF375D 【Tree and Queries】
  4. 对拍——>bat
  5. 1059 Prime Factors(25 分)
  6. Js 之常见手势操作插件 Hammer.js
  7. android通用的UUID唯一标示符
  8. Redis学习(一) —— 基本使用与原理
  9. HashMap 在高并发下引起的死循环
  10. pl/sql test Window 参数为date