03_2_JAVA中的面向对象与内存解析

1. 成员变量

成员变量可以是Java语言中任何一种数据类型(包括基本数据类型和引用数据类型)

在定义成员变量时可以对其初始化,如果不对其初始化,Java使用默认的初始值。

如下列表:

成员变量类型

取值

byte

0

short

0

int

0

long

0L

char

‘\u0000’

float

0.0F

double

0.0D

boolean

false

所有引用类型

null

成员变量的作用范围为整个类体。

2. 引用

Java语言中除基本类型之外的变量类型都称之为引用类型。

Java中的对象是通过引用个对其操作的。

3. 如何在内存中区分类和对象

类是静态的概念,代码区

对象是new出来的,位于堆内存,类的每个成员变量在不同的对象中都有不同的值(除了静态变量)而方法只有一份,执行的时候才占用内存。

4. 对象的创建和使用

必须使用new关键字创建对象。

使用对象(引用).成员变量或来引用对象的成员变量。

使用对象(引用).方法(参数列表)来调用对象的方法。

同一类的每个对象有不同的成员变量存储空间。

同一类的每个对象共享该类的方法。

5. 构造方法(构造函数)

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

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

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

例如:

public class Person {

int id;

int age;

Person(int n, int i) {

id = n;

age = i;

}

}

当没有指定构造函数时,编译器为类自动添加形如

类名() {} 的构造函数。

6. 约定俗成的命名规则

类名的首字母大写

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

运用驼峰标识

7. 调用过程演示

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);

......

public void change1(int i) {

i = 1234;

}

public void change2(BirthDate b) {

b = new BirthDate(22, 2, 2004);

}

public void change3(BirthDate b) {

b.setDay(22);

}

图1

图2 date将9传给形参i ,i = 9

图3 i 被设置为 1234

图4 方法change1调用完毕之后,i值消失

图5 调用change2 将d1的值 传给 b

图6 b 跟 d1 指向同一对象

图7 b 并赋予新值 重新指向另一对象

图8 方法change2调用完毕之后, b消失,以及对象也消失 (堆里面的对象,有可能不是马上消失,而是在垃圾回收的时候,消失。)

图9 调用change3 b被传递为d2的值,而和d2指向同一对象

图10 day被改成22了

图11 change3调用完毕 b消失

03_2_JAVA中的面向对象与内存解析的更多相关文章

  1. JAVA中的面向对象与内存解析_2

    构造方法(构造函数)   • 使用new +构造方法创建一个新的对象. • 构造函数是定义在Java类中的一个用来初始化对象的函数. • 构造函数与类同名且没有返回值. • 例如:Person类的构造 ...

  2. JAVA中的面向对象与内存解析_1

    对象的创建和引用   必须使用new关键字创建对象. 使用对象(引用成员变量或来引用对象的成员变量. 使用对象(引用)方法(参数列表)来调用对象的方法. 同一类的每个对象有不同的成员变量存储空间. 同 ...

  3. 解析Java的JNI编程中的对象引用与内存泄漏问题

    JNI,Java Native Interface,是 native code 的编程接口.JNI 使 Java 代码程序可以与 native code 交互——在 Java 程序中调用 native ...

  4. 【C++】C++中的动态内存解析

    目录结构: contents structure [-] 动态内存和智能指针 使用shared_ptr管理内存 使用new直接管理内存 shared_ptr和new结合使用 unique_ptr we ...

  5. 2019-04-15 Python中的面向对象学习总结

    一.面向对象总结: (1)三要素:封装,继承,多态                                       详细介绍链接:https://www.jianshu.com/p/68a ...

  6. python 全栈开发,Day52(关于DOM操作的相关案例,JS中的面向对象,定时器,BOM,client、offset、scroll系列)

    昨日作业讲解: 京东购物车 京东购物车效果: 实现原理: 用2个盒子,就可以完整效果. 先让上面的小盒子向下移动1px,此时就出现了压盖效果.小盒子设置z-index压盖大盒子,将小盒子的下边框去掉, ...

  7. iOS中WebKit框架应用与解析

    WebKit是iOS8之后引入的专门负责处理网页视图的框架,其比UIWebView更加强大,性能也更优. 引言 在iOS8之前,在应用中嵌入网页通常需要使用UIWebView这样一个类,这个类通过UR ...

  8. 前端JavaScript(3)-关于DOM操作的相关案例,JS中的面向对象、定时器、BOM、位置信息

    小例子: 京东购物车 京东购物车效果: 实现原理: 用2个盒子,就可以完整效果. 先让上面的小盒子向下移动1px,此时就出现了压盖效果.小盒子设置z-index压盖大盒子,将小盒子的下边框去掉,就可以 ...

  9. 面向对象相关概念与在python中的面向对象知识(魔法方法+反射+元类+鸭子类型)

    面向对象知识 封装 封装的原理是,其成员变量代表对象的属性,方法代表这个对象的动作真正的封装是,经过深入的思考,做出良好的抽象(设计属性时用到),给出“完整且最小”的接口,并使得内部细节可以对外透明( ...

随机推荐

  1. 洛谷P1013 进制位

    P1013 进制位 题目描述 著名科学家卢斯为了检查学生对进位制的理解,他给出了如下的一张加法表,表中的字母代表数字. 例如: + L K V E L L K V E K K V E KL V V E ...

  2. iOS 根据文字字数动态确定Label宽高

    iOS7中用以下方法 - (CGSize)sizeWithAttributes:(NSDictionary *)attrs; 替代过时的iOS6中的- (CGSize)sizeWithFont:(UI ...

  3. C语言实现折半插入算法

    #include <stdio.h> int BInsertSort(int array[],int left,int right){ //接收主函数调用语句中的实参传到这里的形参里 in ...

  4. 安卓下点击a标签不跳转;点击a标签在手机真机上会调出手机键盘的解决办法

    安卓下点击a标签不跳转的解决办法,是不用href做跳转的链接,改为用JS控制跳转 <a href="javascript:;" ontouchstart="wind ...

  5. Js 实现全屏

    <input id="Button1" type="button" value="开始全屏" onclick="kaishi ...

  6. jQuery背景插件backstretch使用指南

    http://www.bkjia.com/Javascript/987917.html

  7. net Core 2.0应用程序发布到IIS

    .net Core 2.0应用程序发布到IIS上注意事项   .net Core2.0应用程序发布window服务器报错容易错过的配置. 1.应用程序发布. 2.IIS上新建网站. 3.应用程序池选择 ...

  8. NET Everywhere

    NET Everywhere 8月份已经发布了.NET Core 2.0, 大会Keynote 一开始花了大量的篇幅回顾.NET Core 2.0的发布,社区的参与度已经非常高.大会的主题是.NET ...

  9. Ubuntu同时忘记用户密码和root密码

    在设置密码的时候,用到了小键盘,重启后再次用小键盘输入密码时,发现输入的并不是数字,而是其他符号.所以在设置关键信息的时候,小键盘还是得慎用啊. 解决方案: 在引导界面也就是开机倒计时的时候,按下 e ...

  10. C# 连接oracle,用32位client和64位Client,可能导致结果不同

    在调用过程[pro_regentinitauth]时,有参数3-6为number类型,当我们用这样调用时,在32位client下,能正确得到输出参数3-6的结果为:1023, 但是,当我们把程序部署到 ...