JAVA中同目录下定义类,以及对象的创建与使用(听课笔记)

  • JAVA中对象的创建与使用(听课笔记)
  • 示例一
    • 同文件目录下,创建了三个类OOTest01,User,Address类,之间的调用
  • 示例二
    • 同目录下,创建了三个类OOTest04,Husband,Wife,以及类之间的相互调用
  • 示例三
    • 同目录下,创建了两个类OOTest05,Customer,调用,空指针引发的异常理**java.lang.NullPointerException空指针异常**
  • 示例四
    • 同目录下,创建了三个类Test,Human,Bieshu,类之间的调用关系,这个尝试一下不画内存图分析

JAVA中对象的创建与使用(听课笔记)

  1. JVM(java虚拟机)主要包括三块内存空间。分别是:栈内存,堆内存,方法区内存。
  2. 堆内存和方法区内存各有一个。一个线程一个栈内存。
  3. 方法调用的时候,该方法所需要的内存空间在栈内存中分配,成为压栈。方法执行结束之后,该方法所属的内存空间释放,称为弹栈。
  4. 栈中主要存储的是方法体当中的局部变量
  5. 方法的代码段以及整个类的代码段都被存储到方法区内存当中,在类加载的时候这些代码片会载入
  6. 再程序执行过程中使用new预算福创建的java对象,存储在堆内存当中,对象内部的实例变量,所以实例变量存储在堆内存中。
  7. 变量分类:
    (1)局部变量【方法体中声明】
    (2)成员变量【方法体外声明】
    实例变量【前面修饰符没有static】
    静态标量 【前名修饰符有static】
  8. 静态变量存储在方法区当中
  9. 三块内存当中变化最频繁的时是栈内存,最先有数据的是方法区内存,垃圾回收器主要针对的是堆内存
  10. 垃圾回收器【垃圾自动回收机制、GC机制】什么时候会考虑将某个Java对象的内存回收呢?
    (1)当堆内存中的java对象变为垃圾数据的时候,会被垃圾回收器回收
    (2)什么时候堆内存当中的java对象会变成垃圾呢?
    1.没有更多的引用指向它的时候如下图:此时堆内存中的java对象变为垃圾数据
    2.这个对象无法被访问,因为访问对象只能通过引用的方式访问。

说明一点:数据类型有两种:基本数据类型和引用数据类型
基本数据类型包括:byte short int long float double boolean char
因引用数据类型包括: String ,还有那些自定义的类,也算是引用数据类型,
下图中Address类是我们自定义的,String是SUN公司定义的

示例一

同文件目录下,创建了三个类OOTest01,User,Address类,之间的调用

1.测试类

public class OOTest01
{public static void main(String[] args){User u = new User();    //引用可以是局部变量System.out.println(u.no);System.out.println(u.name);System.out.println(u.addr);//修改User对象内部实例变量的值u.no = 110;    //基本数据类型u.name = "jack";       //"jack"是一个java对象,属于String对象//引用数据类型String,这种引用数据类型特殊不用加newu.addr =  new Address();  //引用数据类型,addr是Address的引用System.out.println( u.name +"居住在哪个城市:" + u.addr.city);System.out.println(u.name + "居住在哪个街道:"+ u.addr.street);System.out.println(u.name + "邮编"   +  u.addr.zipcode);//把其具体数值改变u.addr.city = "北京";u.addr.street = "朝阳";u.addr.zipcode = "00000";System.out.println(u.name +"居住在哪个城市:" + u.addr.city);System.out.println(u.name + "居住在哪个街道:"+ u.addr.street);System.out.println(u.name + "邮编"   +  u.addr.zipcode);}
}

2.定义用户User类,含基本信息 no,name,调用了引用数据类型Address

public class User
{   int no;         //0   //基本数据类型String name;    //null  //引用数据类型Address addr;     // null  //引用数据类型
}

3.定义地址 Address

public class Address
{String city;  //null,成员变量会赋默认值String street;   //nullString zipcode;   //null
}

执行结果如下:

内存分析如下:

示例二

同目录下,创建了三个类OOTest04,Husband,Wife,以及类之间的相互调用

1测试类
类之间的调用

public class OOTest04
{public static void main(String[] args){Husband huangXiaoMing = new Husband();huangXiaoMing.name = "黄晓明";Wife baby = new Wife();baby.name = "baby";huangXiaoMing.w = baby;baby.h = huangXiaoMing;System.out.println(huangXiaoMing.name + "的妻子名字叫" + baby.name);//上下两行等价System.out.println(baby.h.name + "的妻子名字叫" + huangXiaoMing.w.name);}
}

2.丈夫Husband类
里面调用了妻子Wife类

public class Husband
{String name;Wife w;
}

3.妻子Wife类
里面调用了丈夫Husband类

public class Wife
{String name;      Husband h;
}

执行结果如下:

内存分析过程如下:
1.

2.

3.

示例三

同目录下,创建了两个类OOTest05,Customer,调用,空指针引发的异常理java.lang.NullPointerException空指针异常

public class OOTest05
{public static void main(String[] args){Customer c = new Customer();System.out.println(c.id);//空引用访问“实例”相关的数据一定会出现空指针异常c=null;     //java.lang.NullPointerException空指针异常System.out.println(c.id);}
}
public class Customer
{int id;
}

执行结果如下:空指针异常java.lang.NullPointerException空指针异常**

内存分析如下:

示例四

同目录下,创建了三个类Test,Human,Bieshu,类之间的调用关系,这个尝试一下不画内存图分析

public class Test
{public static void main(String[] args){//先创造人对象Human zhangsan = new Human();//不采用系统默认值//手动赋值zhangsan.id = "130582200007133";zhangsan.name = "张三";zhangsan.age = 30;//再创造别墅对象Bieshu fangzi = new Bieshu();//不采用系统默认值//手动赋值fangzi.area = 2200;fangzi.hoster =zhangsan;System.out.println(fangzi.hoster.name);//房子换主人//创建一个新的主人对象Human lisi = new Human();lisi.name = "李四";//换主人fangzi.hoster = lisi;//想知道房子主人的名字是什么?System.out.println(fangzi.hoster.name);   //凡是类中的属性名都可以用点引用}
}

运行结果如下:

JAVA中同目录下定义类,以及对象的创建与使用,内存图的原理相关推荐

  1. java猫抓老鼠_用猫抓老鼠的实例理解java中面向对象的编程与类和对象以及方法的概念...

    今天看到马士兵讲的关于面向对象编程的思路,用了一个猫抓老鼠的例子,我觉得这个例子非常形象,于是写在这里,方便学习理解和以后查看 class cat{ //声明一个类–"猫" int ...

  2. java 使用不同目录下的类_如何运行在不同目录下的java类文件? - Break易站

    Java 基础语法 在本文中,我们将学习如何使用其他项目的实用程序,类和成员.在继续之前,让我们了解一些关键字. 类路径 类路径是jvm开始执行程序的位置.与传统的动态加载行为类似,当执行Java程序 ...

  3. java中具有继承关系的类及其对象初始化顺序

    先说结论 对于具有继承关系的类,它们的类和对象构造顺序为:父类的类构造器() -> 子类的类构造器() -> 父类成员变量的赋值和实例代码块 -> 父类的构造函数 -> 子类成 ...

  4. java 中遍历目录下所有文件

    package test; import java.io.File; public class Demo { static int i; public static void main(String[ ...

  5. java中io流如何创建一个文件_,Java中Io流操作-File类的常用操作-创建文件,创建文件夹...

    package com.hxzy.IOSer; import java.io.File; import java.io.IOException; public class Demo03 { publi ...

  6. 面向对象在python中的实践---如何定义类、对象?

    一.如何定义一个类 1.1基本语法 class Money:pass 类可以分为经典类和新式类 注意点: 类名Money中的首字母必须要大写 二.怎样通过类,创建一个对象 2.1根据类创建一个对象 # ...

  7. java web 默认页面配置文件_Tomcat中配置全局的错误页面(如404)+删除Tomcat中webapps目录下的自带项目,防止Tomcat默认文件泄露...

    进入tomcat目录中conf文件编辑web.xml,将下面代码复制到文件末尾,如下 400 /error.html 404 /404/404.html 500 /404/500.html 2.添加4 ...

  8. Java中,我自己定义的某个类,去实现某个接口,是否必须实现该接口的全部抽象方法呢?

    不一定,关键要看子类是否是抽象类. 如果子类是非抽象类,则必须实现接口中的所有方法:如果子类是抽象类,则可以不实现接口中的所有方法,因为抽象类中允许有抽象方法的存在! 一.抽象类定义 抽象类往往用来表 ...

  9. 【Java工具类】(1)—Java中驼峰与下划线相互转换

    Java工具类(1)-Java中驼峰与下划线相互转换 1.驼峰命名法 /** * 驼峰式命名法 */ public static String toCamelCase(String s) {if (s ...

最新文章

  1. android post请求添加公共参数_XHttp2 一个功能强悍的网络请求库
  2. Android内存泄漏就这样产生了
  3. opencv-python的格式转换 RGB与BGR互转
  4. 【TypeScript】parseInt 函数将字符串转换为整数
  5. JSP中动态添加 “添加附件选择框”
  6. 跨浏览器开发:CSS代码的金科玉律
  7. TensorFlow 2学习和工业CV领域应用 心得分享
  8. SGU[222] Little Rooks
  9. 二阶带阻有源滤波器设计与仿真测试
  10. 史上最强窃密软件来袭,手机或成泄密工具
  11. Java项目:医院挂号预约管理系统(java+SSM+HTML+JavaScript+jsp+mysql)
  12. 如何在公众号添加网站链接
  13. SpringBoot2.x 集成 FreeMarker
  14. 什么是数字孪生?【深度解析】
  15. Editplus文件在linux下乱码,EditPlus中文乱码怎么办-解决EditPlus中文出现乱码的方法 - 河东软件园...
  16. 文件IO编程之学习总结
  17. 《 线性代数及其应用 (原书第4版)》—— 2.6 列昂惕夫投入产出模型
  18. 蒙牛六期的高度自动化物流系统
  19. 不可不看 真正专业显卡技术分析评测
  20. AcWing 有向图的拓补排序 题解 (拓补排序 模板)

热门文章

  1. 定制XP的启动界面更换背景图和windows字样
  2. php显示文件内容,php读取文件内容_PHP读取文件内容并输出显示
  3. 一文搞定JVM的内存结构
  4. yolov5使用教程
  5. 疏基修饰银铟硒量子点AgInSe2 Qds-SH|生物素修饰硫化银量子点Ag2S Qds-Biotin|近红外量子点的偶联修饰定制服务
  6. 【OpenStack】在OpenStack上搭建OpenStack UT环境
  7. spring的ioc和di
  8. Silverlight开发MMORPG游戏研讨(4):用一个定时器实现多个不同帧频的动画
  9. 浩辰CAD看图王手机版中添加的图片批注在电脑端如何查看?
  10. 联想 ThinkPad x260无法通过U盘安装Windows 7问题解决办法