首页 > 编程语言 >Java中的对象使用、局部变量与成员变量的区别

Java中的对象使用、局部变量与成员变量的区别

时间:2022-11-10 13:04:51浏览次数:33  
标签:Java 变量 对象 成员 局部变量 stu 内存 方法

对象的使用

对象的使用格式

创建对象:

类名 对象名 = new 类名();

使用对象访问类中的成员:

对象名.成员变量; 对象名.成员方法();

对象的使用格式举例:

    public static void main(String[] args) {
        // 1. 导包。
        // 我需要使用的Student类,和我自己Demo02Student位于同一个包下,所以省略导包语句不写

        // 2. 创建,格式:
        // 类名称 对象名 = new 类名称();
        // 根据Student类,创建了一个名为stu的对象
        Student stu = new Student();

        // 3. 使用其中的成员变量,格式:
        // 对象名.成员变量名
        System.out.println(stu.name); // null
        System.out.println(stu.age); // 0
        System.out.println("=============");

        // 改变对象当中的成员变量数值内容
        // 将右侧的字符串,赋值交给stu对象当中的name成员变量
        stu.name = "赵丽颖";
        stu.age = 18;
        System.out.println(stu.name); // 赵丽颖
        System.out.println(stu.age); // 18
        System.out.println("=============");

        // 4. 使用对象的成员方法,格式:
        // 对象名.成员方法名()
        stu.eat();
        stu.sleep();
        stu.study();
    }

成员变量的默认值

数据类型 默认值
基本类型 整数(byte,short,int,long)
浮点数(float,double) 0.0
字符(char) \u0000'
布尔(boolean) false
引用类型 数组,类,接口 null

对象内存图

一个对象,调用一个方法内存图

image.png

通过上图,我们可以理解,在栈内存中运行的方法,遵循"先进后出,后进先出"的原则。变量p指向堆内存中 的空间,寻找方法信息,去执行该方法。 但是,这里依然有问题存在。创建多个对象时,如果每个对象内部都保存一份方法信息,这就非常浪费内存 了,因为所有对象的方法信息都是一样的。那么如何解决这个问题呢?请看如下图解。

两个对象,调用同一方法内存图

image.png

对象调用方法时,根据对象中方法标记(地址值),去类中寻找方法信息。这样哪怕是多个对象,方法信息 只保存一份,节约内存空间。

一个引用,作为参数传递到方法中内存图

image.png

引用类型作为参数,传递的是地址值。

成员变量和局部变量区别

变量根据定义位置的不同,我们给变量起了不同的名字。如下图所示: image.png

  • 在类中的位置不同
    • 成员变量:类中,方法外
    • 局部变量:方法中或者方法声明上(形式参数)
  • 作用范围不一样
    • 成员变量:类中
    • 局部变量:方法中
  • 初始化值的不同
    • 成员变量:有默认值
    • 局部变量:没有默认值。必须先定义,赋值,最后使用
  • 在内存中的位置不同
    • 成员变量:堆内存
    • 局部变量:栈内存
  • 生命周期不同
    • 成员变量:随着对象的创建而存在,随着对象的消失而消失
    • 局部变量:随着方法的调用而存在,随着方法的调用完毕而消失

本文内容到此结束了, 如有收获欢迎点赞

标签:Java,变量,对象,成员,局部变量,stu,内存,方法
From: https://blog.51cto.com/zhanjq/5835261

相关文章

  • 一文带你入门 Java 函数式编程
    Java在最开始是不支持函数式编程的,想来也好理解,因为在Java中类Class才是第一等公民,这就导致在Java中实现编程不是件那么容易的事儿,不过虽然难,但是结果我们也已经知道......
  • Java使用lamda表达式简化代码
    代码,自然写的越简洁越好啦,写的人舒服,看的人也舒服,一切为了高效。要把有限的时间花到其它有意思的事情上去。目的学习简化代码的思路,使用jdk8新特性lamada表达式。推理......
  • java 单例设计模式 懒汉式
    packagecom.tedu.test;/***单例设计模式懒汉式设计*优点:不会造成资源的浪费*缺点:会造成线程安全问题*/publicclasssingleonDemo{publicstatic......
  • JAVA第一天学习
    MARKDOWN学习   标题:#加空格为一级标题。双##加空格为二级标题,以此类推,最多为六级标题   字体:字体两边加双**为加粗字体,加单*为斜体,加三***为字体加粗斜体,......
  • 【java技术总结】java-8新特性:日期时间 API
    Java8通过发布新的Date-TimeAPI(JSR310)来进一步加强对日期与时间的处理。在旧版的Java中,日期时间API存在诸多问题,其中有:非线程安全−java.util.Date是非线......
  • JavaScript WEB怎么实现大文件上传
    ​ 1 背景用户本地有一份txt或者csv文件,无论是从业务数据库导出、还是其他途径获取,当需要使用蚂蚁的大数据分析工具进行数据加工、挖掘和共创应用的时候,首先要将本地文......
  • java单例设计模式 饿汉式
    packagecom.tedu.test;/***单例设计模式的实现饿汉式*缺点:比较浪费资源*优点:饿汉式实现方式不会存在线程安全问题*单例设计模式的原则:实例唯一*/publi......
  • [JavaScript-06]面向对象
    1.面向对象//大括号就是对象p={a:1,b:2,c:3,}//系统对象全部基于window//console.log(window);//window.alert(1);//alert(2);//console......
  • java表达式语言mvel2/ognl/spring-expression
    <!--https://mvnrepository.com/artifact/org.mvel/mvel2--><dependency><groupId>org.mvel</groupId><artifactId>mvel2</artifactId><version>2.4.14.Fina......
  • Java强校验日期格式
    Java强校验日期格式SimpleDateFormat//lenient默认为true,即为宽松模式,如需严格校验,则需设置lenient为falseStringdate="2021/02/29";SimpleDateFormatsdf=newS......