我的编程空间,编程开发者的网络收藏夹
学习永远不晚

详解JAVA中的内存结构与重载

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

详解JAVA中的内存结构与重载

详解JAVA中的内存结构与重载?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

一.对象在JVM的内存结构

JAVA内存管理由JVM来管理。
1)堆,所有new出来的对象(包括成员变量)
2)栈,所有局部变量(包括方法的参数)
3)方法区,class字节码文件(包括方法,静态数据)

引用变量指向null时,会发生空指针异常

public class student {int age;String name;public student(int age,String name){this.age=age;this.name=name;}public static void main(String[] args) {//(类)引用类型 引用变量创建对象(new出来的类中的构造方法)student s= new student(18,"刘永超");s=null;System.out.println(s);System.out.println(s.age);//发生异常,因为引用变量指向null}}

结果:java.lang.NullPointerException 2.引用类型划等号和基本类型划等号的区别: 一.引用类型划等号:

1…指向同一个对象

通过一个引用的修改对象中的数据会影响另一个对象中的数据

二.基本类型划等号:

赋值。

对一个变量的修改不会影响到另一个变量(例如int类型)

引用变量画“”和基本类型画”“区别:

引用类型画”==“:

判断两个引用变量(引用地址)是否指向同一对象

基本类型画等号:判断两边的值是否相等

代码演示:

public class student2 {int age;String name;public student2(int a,String s){age=a;name=s;}public static void main(String[] args) {student2 s=new student2(17,"liu");student2 ss=s;s.age=20;ss.age=28;System.out.println(s.age);//s=ss 判断两个引用对象(引用变量)是否指指向同一对象System.out.println(s==ss);}}

结果为 s.age=28 true;

成员变量与局部变量的生命周期:

  • 成员变量:创建对象开始到被GC垃圾回收器处理掉为止。

  • 局部变量从调用方法到方法就结束。

 二.方法的重载

1).发生在同一类,方法名相同,参数列表类型和数量不同
2).方法的重载,和返回值没有关系
3).编译器在在编译时根据方法的签名自动绑定调用的方法

注:方法的签名:方法名+参数列表

代码的实现:

public class overloadDemo {public void test(){System.out.println("lala");}public void test(int a){System.out.println("heihei");}public void test(String s){System.out.println("xixi");}public void test(int a,String s){System.out.println("caocao");}//public int test(){不是方法的重载,和返回值没有关系//return 1;//}//构造方法public overloadDemo (){System.out.println("无参构造");}public overloadDemo(int a){System.out.println("有参构造");}public static void main(String[] args) {overloadDemo load=new overloadDemo();load.test(5);load.test(8, "liu");}}

如上代码,load.test(5)将调用public void test(int a){};

load.test(8,“liu”)将调用public void test(int a,String s){}。

三.this的使用:

this关键字在方法中,用于指向调用该方法的当前对象,简单的说,那个对象调用方法,this指的就是那个对象,严格来讲,在方法中需要通过this关键字指明当前对象。
2.在构造方法中,用来初始化成员变量的参数一般和成员变量取相同的名字,这样有利于代码的可读性,但次数必须通过this关键字来区别成员变量和参数(在这里不能省略this)
3.this就是指当前对象。

this的用法:

this.成员变量—访问当前对象成员变量
2.this.方法名—访问当前对象的方法(一般不用)
3.this()---------调用构造方法(必须写在此构造方法中的第一行)

代码演示:

public class thisDemo {int age;public void test(){System.out.println(this.age);//此处可以省略this关键字}public void test(int age){System.out.println("这是带有int类的test方法重载");this.test();//此处也可以省略this,编译器会自己默认}public thisDemo(){//this(20);this(19,"liuyongcaho");//调用当前对象时int ,string类型的构造方法this.age=18;System.out.println("这是一个无参构造方法");}public thisDemo(int age){this();System.out.println(age);}public thisDemo(int age,String name){System.out.println(age+"   "+name);}public static void main(String[] args) {thisDemo pdd=new thisDemo();pdd.test(9);}}

运行结果:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QA8e4G5v-1615567706657)(C:\Users\Thinkpad\AppData\Roaming\Typora\typora-user-images\image-20210312160858936.png)]

可以看出,在new对象时,会自行执行它的无参构造方法,执行完后再执行test(int a){}这个方法。

四:类的继承

作用:代码复用,减少代码重复
2.通过extends来继承
3.超类(父类),派生类(子类)共有的属性和行为
4.派生类继承超类后,派生类具有派生类+超类的共有属性。
5.一个超累可以拥有多个派生类,一个派生类只能有一个超类。
6.继承具有传递性
7.java中规定,在派生类的构造方法中必须先构造超类的构造方法(必须在派生类的第一行),在派生类中若没有调用超类的方法,则编译器默认提供super()来调用超类的无参构造方法,若超类自己写了构造方法,在派生类中不在默认提供super();

super的含义及使用:

super指代当前对象的超类对象
2.super必须放在构造方法中的第一行
3.super.成员变量-----访问超类成员变量
4.super()—调用的时超类构造方法。

代码演示如下: 父类:

public class Person {int age;String name;String gender;public Person(int age,String name){this.age=age;this.name=name;System.out.println(this.age+"  "+this.name);}public void testperson(){System.out.println("我是父类");}}

子类:

public class Teacher extends Person{String subject;public Teacher(){//super();这是父类的无参构造方法super(19,"刘德华");System.out.println(this.age+" "+this.name);}//方法的重写public void testperson(){System.out.println("这是子类teacher的testperson方法");}public static void main(String[] args) { Person y=new Teacher();//向上造型 y.testperson();}}

运行结果:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zydw2DJx-1615567706663)(C:\Users\Thinkpad\AppData\Roaming\Typora\typora-user-images\image-20210312165717602.png)]

结果分析:

子类在创建对象时会执行子类的无参构造方法,而子类的构造方法中有父类的有参构造方法再执行子类中的testperson方法。

on方法");
}

public static void main(String[] args) { Person y=new Teacher();//向上造型 y.testperson();}

}

##### 运行结果:[外链图片转存中...(img-zydw2DJx-1615567706663)]##### 结果分析:子类在创建对象时会执行子类的无参构造方法,而子类的构造方法中有父类的有参构造方法再执行子类中的testperson方法。####

关于详解JAVA中的内存结构与重载问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注编程网行业资讯频道了解更多相关知识。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

详解JAVA中的内存结构与重载

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

详解JAVA中的内存结构与重载

详解JAVA中的内存结构与重载?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。一.对象在JVM的内存结构JAVA内存管理由JVM来管理。1)堆,所有new出来的对象(包括成员
2023-06-14

详解Java中的树结构

这篇文章将为大家详细讲解有关详解Java中的树结构,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。常用的java框架有哪些1.SpringMVC,Spring Web MVC是一种基于Java
2023-06-14

Java 重载、重写、构造函数的实例详解

Java 重载、重写、构造函数的实例详解方法重写1、重写只能出现在继承关系之中。当一个类继承它的父类方法时,都有机会重写该父类的方法。一个特例是父类的方法被标识为final。重写的主要优点是能够定义某个子类型特有的行为。class Anim
2023-05-31

C语言程序中结构体的内存对齐详解

这篇文章主要为大家详细介绍了C语言程序中结构体的内存对齐的相关资料,文中的示例代码讲解详细,具有一定的参考价值,感兴趣的小伙伴可以了解一下
2022-11-13

JS数据结构与算法中的队列结构详解

队列指的是一种受限的线性表,先进先出,今天通过本文带领大家认识队列及队列的应用,对JS数据结构与算法-队列结构相关知识感兴趣的朋友一起看看吧
2022-11-13

关于java中堆内存与栈内存的详细分析

一、概述在Java中,内存分为两种,一种是栈内存,另一种就是堆内存。二、堆内存1、什么是堆内存?堆内存是Java内存中的一种,它的作用是用于存储Java中的对象和数组,当我们new一个对象或者创建一个数组的时候,就会在堆内存中开辟一段空间给它,用于存放。2、堆
关于java中堆内存与栈内存的详细分析
2017-04-01

Java虚拟机中JVM内存结构是怎么样的

这篇文章给大家分享的是有关Java虚拟机中JVM内存结构是怎么样的的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、JVM启动流程:JVM启动时,是由java命令/javaw命令来启动的。二、JVM基本结构:JV
2023-06-02

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录