基础第一阶段day06——局部变量(基本类型/引用类型)、成员变量(基本类型,引用类型)总结重点

C#基础知识--Day06 当类型确定个数不确定的情形使用参数数组。params 参数数组对于方法内部而言:就是个普通数组对于方法外部(调用者)而言:可以传递数组,传递一组数据类型相同的变量集合,可以不传递参数。作用 :简化调用者调用方法的代码、return sum;one = two;two = temp; 阅读详情

变量分为成员变量和局部变量,根据数据类型的不同分为:

:

1:成员变量基本类型:

整型,浮点型,字符型,布尔型这些基本类型的成员变量有默认值,成员变量根据方法区中的成员变量信息创建在堆内存中;

2:成员变量引用类型:

任何类型都可以作为成员变量类型;
字符串,数组,类,接口这些引用类型的成员变量有默认值为null,直接打印就是null;
但是当你通过数组 类型的成员变量去访问类中的内容必须对它进行赋数组操作;否则会出现空指针异常。

当你通过类 类型的成员变量名去访问类中的成员必须先对它进行赋对象操作;否则会出现空指针异常。
当你通过接口 类型的成员变量去访问接口中的抽象方法先对它进行赋实现类对象操作;否则会出现空指针异常。

成员变量类型举例——数组/类/接口作为成员变量类型:

public class Class01 {
    private  int[] arr;//数组 类型成员变量
    
    private  Person person;//类Person类型成员变量
    //Person类中有	private int age ;和private String name;

    private  InterfacePersonMethod interfacePersonMethod;
    //InterfacePersonMethod接口中有抽象方法void eat();和void sleep();
    
    //代码过多,省略GetterSetter方法,省略空参全参构造

测试代码

public class Test01 {
public static void main(String[] args) {
    Class01 class01 = new Class01();

    System.out.println(class01.getArr());                    //输出结果是null
    // System.out.println(class01.getArr().toString());//没赋值访问数组内容报空指针异常
    // Exception in thread "main" java.lang.NullPointerException
    class01.setArr(new int[5]);//数组类型成员变量使用需要赋值
    System.out.println(class01.getArr());                   //输出结果是[I@75412c2f
    System.out.println(class01.getArr()[2]);                //输出结果是0


    System.out.println(class01.getPerson());                //输出结果是null
    // System.out.println(class01.getPerson().getAge());//没赋值访问类内容报空指针异常
    //Exception in thread "main"java.lang.NullPointerException
    class01.setPerson(new Person("张嘉译", 22));//类类型成员变量使用需要赋值
    System.out.println(class01.getPerson());                //输出结果是cn.itcast.day06.Person@13b6d03
    System.out.println(class01.getPerson().getName());        //输出结果是张嘉译


    System.out.println(class01.getInterfacePersonMethod());//输出结果是null
    //        class01.getInterfacePersonMethod().eat();//没赋值访问接口内容报空指针异常
    // Exception in thread "main" java.lang.NullPointerException
    class01.setInterfacePersonMethod(new InterfacePersonMethod() {
        @Override
        public void eat() {
            System.out.println("人吃饭");
        }

        @Override
        public void sleep() {
            System.out.println("人睡觉");
        }
    });//接口类型成员变量使用需要赋值
    System.out.println(class01.getInterfacePersonMethod());//输出结果是cn.itcast.day06.Test01$1@64c64813
    class01.getInterfacePersonMethod().eat();				//输出结果是人吃饭
}

}

========================================================================================================================================================

3: 局部变量基本类型:

整型,浮点型,字符型,布尔型这些基本类型的局部变量作为方法的参数传入的是一个具体的值;
方法内部修改的具体值只在当前方法中有效,出了当前方法就消失了。

4:局部变量引用类型:

字符串,数组,类,接口这些引用类型的局部变量作为方法的参数传入的实际上是它在堆内存中的地址值;
方法内部修改的具体内容已经修改好存储到堆里了,出了当前方法再次访问该地址里的内容是修改过的信息。

局部变量类型举例——数组,int类型变量作方法参数类型:

   public class Test01 {
        public static void main(String[] args) {
            int arr[]={1,3,5,};
            int num=999;
             System.out.println("=======");
            show(arr,num);
            System.out.println(num);//999
            System.out.println(arr[2]);//50
            System.out.println(Arrays.toString(arr)); //[1,3,50]
        }
        private static void show(int arr[],int num){
            arr[2]=50;
            num+=1;
            int[] arr2={2,4,6};
            arr=arr2;		
            System.out.println("局部变量是"+num);//局部变量是1
            System.out.println(Arrays.toString(arr)); //[2, 4, 6]
        }
    }

输出结果:

局部变量是1000
[2, 4, 6]
======
999
50
[1,3,50]

解析:
局部变量是1000 , [2, 4, 6]的解析: 他们是方法中的局部变量,前者是基本类型,后者是引用类型,作用在当前所属的大括号;

999的解析: 定义的方法中更改局部变量为1000,但他有作用域(直接所属大括号),局部变量只在当前方法有效,一旦超出作用域(比如方法执行完弹栈后),局部变量立刻从栈内存里消失,所以仍是999;

50,[1,3,50]的解析: 数组(引用数据类型)作为参数传递时,传递的是地址值;因此,方法执行结束出栈以后,引用类型的地址值不会发生改变,就可以解释方法内部明明把arr2的地址赋给arr(修改它的地址值只在定义的方法中有效),出栈后arr存储的地址值却是原来的;同时引用类型的原有地址中的内容如果改变了是可以的,和出栈没有影响;

总结一下:当在方法中对原有地址值里的数据进行修改后,在回到main方法(方法调用处)之后,再去查看数据时,就是被更改后的最新的数据

局部变量类型举例——类,接口作方法参数类型:

public class Test02 {
    public static void main(String[] args) {

        //传递的是他的创建的对象的地址值
        Person person = new Person("张嘉译", 20);
        methodClass(person);

        //传递的是他的实现类类对象的地址值
        List<Integer> list = new ArrayList<>();//List是接口,Arraylist是List接口的实现类
        methodInterface(list);
    }

    //Person类作为方法参数类型
    public static void methodClass(Person person) {
        System.out.println("我叫" + person.getName() + ",今年" + person.getAge() + "岁了");
    }

    //接口作为方法参数类型
    public static void methodInterface(List<Integer> list) {
        list.add(1);
        list.add(2);
        System.out.println(list);
    }
}

解析:
方法里面可以写一个类作为方法参数类型,传递参数的时候给他传一个该类的子类对象即可;
这是多态的写法,父类类型作为方法形式参数,传递子类对象给方法。

方法里面可以写一个接口作为方法参数类型,传递参数的时候给他传一个该类的实现类对象即可;
这也运用了多态写法:接口类型作为方法形式参数,传递子类对象给方法。

引用做类中成员变量 引用是可以作为类的成员变量的。 引用类型成员变量的初始化: 1,不能直接在构造函数里初始化,必须用到初始化列表,且形参也必须是引用类型。 2,凡是有引用类型的成员变量的类,不能有缺省构造函数。原因是引用类型的成员变量必须在类构造时进行初始化。(每个构造函数都应该初始化引用类型变量,不能遗漏,哪怕是拷贝构造函数) 3,如果两个类要对第三个类的数据进行共享处理,可以考虑把第三个类作为这两个类的引用类型的成员变量。 ... 阅读详情

相关推荐

【论文阅读】AU检测|《Deep Adaptive Attention for Joint Facial Action Unit Detection and Face Alignment》

摘要 本文旨在从大量没有人工标注的视频中学习用于面部动作单元检测的区分表示。受面部动作是面部肌肉运动这一事实的启发,论文将这些运动描述为不同帧中两幅面部图像之间的转换,并将其用作学习表示的自我监控信号。但是,在不受控制的情况下,这种转换是由面部动作和头部运动引起的。为了消除头部运动的影响,我们提出了一个双圈自动编码器(TCAE),它可以解开面部动作相关运动和头部运动相关运动。具体而言,TCAE被训练成分别将源面部的面部动作和头部姿态改变为目标面部的面部动作和头部姿态。我们的实验验证了TCAE解耦运动的能力。

Celine的博客 4554

关于引用类型的成员变量

<br />1.引用类型的成员变量不能直接在构造函数里初始化,必须用到初始化列表,且形参也必须是引用类型。<br /> 2.凡是有引用类型的成员变量的类,不能有缺省构造函数。

1107

Chapter2、HDR流水线

HDR内容的获取(不同曝光时间的图片合成) 相机响应函数 HDR视频

qq_55621259的博客 2597

SVM-支持向量机学习(1):线性可分SVM的基本型

1. foreword先看的是李航老师的书第7章,比较传统按照以下三节展开: 线性可分SVM 线性SVM 非线性SVM SMO算法 李航老师讲东西向来不拖泥带水,但本节也几乎用了40页的篇幅,足见涉及内容之多。7月底硬着头皮啃了下来,边看边在笔记上摘抄标注,花了2天时间对SVM有了基本认识。一个月过去了,如今重新整理为博客,再看轻松许多,并不断对比西瓜书的内容,启望达到融会贯通。西瓜书此节明显节奏轻

鸟恋旧林的博客 8680

FFT中的精度博弈:定点数缩放、块浮点与溢出处理在Vivado IP核中的实践权衡

本文探讨了在Vivado FFT IP核中实现高精度快速傅里叶变换的关键技术,包括定点数缩放策略、块浮点模式及溢出处理机制。通过分析不同精度控制方案的资源开销与性能权衡,为工程师在医疗成像、雷达信号处理等高动态范围应用中优化FFT实现提供实践指导。

melon的博客 1097

java基础之七->局部变量成员变量、引用类型、this、static

局部变量和成员变量 局部变量 1、定义在方法中的变量称之为局部变量 2、作用域:从定义的文章开始到整个方法结束 3、注意:局部变量只能在当前方法中使用,其他地方无法使用 4、局部变量不包含默认值,如果没有使用变量的话,可以不赋值 成员变量 1、定义在方法外,类内的变量叫做成员变量 2、作用域:在整个类体内 3、成员变量包含默认值 package com.msbline.oop; public class VarDemo { //成员变量 int age = 20; public void

qq_22717543的博客 418

Reeds-Shepp曲线公式推导及代码实现-第二部分(共三部分)

文章目录2. Reeds-Shepp求解2.1 L+S+L+L^+S^+L^+L+S+L+2.2 L+S+R+L^+S^+R^+L+S+R+2.3 L+R−L+L^+R^-L^+L+R−L+2.4 L+R−L−L^+R^-L^-L+R−L−2.5 L+R+L−L^+R^+L^-L+R+L−2.6 L+Rβ+Lβ−R−L^+R_{\beta}^+L_{\beta}^-R^-L+Rβ+​Lβ−​R−2.7 L+Rβ−Lβ−R+L^+R_{\beta}^-L_{\beta}^-R^+L+Rβ−​Lβ−​R+2.8

jianmo的博客 1212

引用类型和类的引用类型成员变量

C++中,引用即别名,据说引用类型内部是指针实现的。 那么引用类型的变量占用内存的大小是不是和指针一样呢? 验证一下: std::cout << "size of pointer = " << sizeof(int*) << std::endl; std::cout << "size of int& = " << sizeof(i...

photon222的博客 936

PCL 三维重建 基于B样条曲线的曲面重建算法

本文将介绍如何使用B样条曲线进行三维点云数据的曲面重建。B样条曲线和曲面是一种强大的数学工具,在计算机图形学、CAD设计等领域中广泛应用。通过对点云数据进行曲面拟合和优化,最终得到精确的曲面模型。本示例展示了如何利用PCL中的B样条曲线拟合算法进行三维曲面重建,并对重建结果进行可视化。

纵马踏花向自由 658

PCL 三维重建 泊松曲面重建算法

本文介绍了基于泊松曲面重建算法的三维重建过程。泊松重建是一种利用点云数据生成三维表面的算法,它基于点云的法线估计和泊松方程的求解,能够生成光滑且连续的曲面模型。该方法适用于复杂形状和细节的表面重建。

纵马踏花向自由 1090

基础知识:Java 中的基本类型与引用类型详解

在 Java 编程语言中,理解基本类型(Primitive Types)和引用类型(Reference Types)的区别是至关重要的。这两种类型有着不同的内存存储方式、语法结构和行为特性。在这篇博客中,我们将详细介绍它们的区别,帮助开发者更好地理解和使用这两种类型。

upgrador的博客 1337

基于DynamicHead的YOLOv8四头版本改进:面向复杂场景的多目标检测优化【YOLOv8】

YOLOv8的检测头是通过不同尺度的特征层输出检测结果。这些检测头通常包括三个:用于大物体、中等物体和小物体的检测。然而,这种单一结构可能会在复杂场景下失去针对性和灵活性,特别是当多个目标之间差异较大时。为了进一步提升模型在特定目标上的检测性能,DynamicHead的引入为我们提供了一个多检测头的优化方案。本文提出了一种基于DynamicHead的四头版本YOLOv8改进方案,以解决复杂场景下多目标检测的挑战。通过引入四个独立检测头,分别针对不同目标特征进行优化,实现了更灵活的检测结构。

博客 1718

第二阶段 day06 final、 权限 、内部类 、引用类型

第二阶段 day06 final、 权限 、内部类 、引用类型 今日内容 final关键字 权限 内部类 引用类型 教学目标 描述final修饰的类的特点 描述final修饰的方法的特点 能够说出权限修饰符作用范围 说出内部类的概念 能够理解引用类型作为成员变量 能够理解引用类型作为方法参数 能够理解引用类型作为方法返回值类型 第一章 final关键字 1.1 概述 学习了继承后,我们知道,子类可以在父类的基础上改写父类内容,比如,方法重写。那么我们能不能随意的继承 API中提供的类,改写其内容呢?显然这是

witty-joker的分享站 242

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

学习笔记——day06(局部变量成员变量 面向对象和过程)

day06 变量三要素: 变量类型 变量名 作用范围/声明周期 局部变量 成员变量 变量所处的位置的不同,分为局部变量和成员变量(全局变量、实例变量) 局部变量: 声明在方法中或者是代码块中的变量称之为局部变量。 只在当前声明的方法中有效 出了方法之后啥也不是 ​ 变量要声明之后 初始化之后才能被使用 代码: public clas...

Katherine_c的博客 216

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

JavaSE基础Day06

JavaSE基础Day06 课程纲要 1. 类的定义和类的使用 ---> 上午核心案例: 学会基础格式(定义格式和使用格式) 2. 类的封装性 ---> 今日重点案例: 定义一个标准类 第一章 类的定义和类的使用 1、面向对象和面向过程 1. 两者的区别: A. 面向过程: 强调的是步骤,所有的事情都是自己去做 B. 面向对象: 强调的是对象,找人帮助你做事情(备注:对象具备有做...

大舒 360

Javase 重要知识点总结 day06

关键词: 带参方法 可变参数 #1、方法定义 this的作用: 调用本类的属性和方法(可以在自定义方法中,调用成员变量和成员方法) 一个文件中 定义多个类的写法:例如 注意: 1.只能有一个类是public修饰的; 2.public 修饰的类名 与 文件的名字 必须一致; 3.public修饰的类中 定义主方法 ##2、成员变量和局部变量的区别 变量分类: 1.成员变量:在类中定义的。 1).实例成员变量 2).静态成员变量 ##2.局部变量:在方法中定义的。 区别: 作用域。 成员:

weixin_44717768的博客 296

JAVA基础day06

JAVA基础day06 变量 三要素: 变量类型 变量名 作用范围或 声明周期 类型: 根据变量所处的位置不同,分为局部变量和成员变量(全局变量\实例变量) 局部变量: 声明在方法中或者是在代码块中的变量。 只在当前声明的方法中有效,出了方法啥也不是。 变量要在声明之后 初始化之后才能被使用。 tips 代码块 以一组大括号组成的一个代码段\ >>>>代码块...

weixin_41615926的博客 158

java学习day06——面向对象基础

面向对象 public class Demo01PrintArray { public static void main(String[] args) { int[] array = {10, 20, 30, 40, 50}; // 使用面向过程 System.out.print("[");//去掉ln,不换行 for (in...

DoubleYang的博客 1187

Java学习day06:面向对象基础,构造方法,成员/局部变量

Java学习day06:面向对象基础,构造方法,成员/局部变量

LF__plus的博客 355

day06Java-参数传递以及思考题(基本类型,引用类型)

参数传递(基本类型,引用类型) 看程序写结果,然后分析为什么是这个样子的。并画图讲解。最后总结Java中参数传递规律。 Java中的参数传递问题: 基本类型:形式参数的改变对实际参数没有影响。 引用类型:形式参数的改变直接影响实际参数。 代码演示 int a = 10; int b = 20; System.out.println("a:"+a+",b:"+b); //a:10,b:20...

ginger_mr的博客 229

Sethli的Java基础--局部变量与成员变量

package com.lsvictory.day06.demo03; /** * 局部变量和成员变量 * * 1.定义的位置不一样【重点】 * 局部变量:在方法的内部 * 成员变量:在方法的外部,直接写在类当中 * * 2.作用范围不一样【重点】 * 局部变量:只有方法当中可以使用,除了方法就不能再用 * 成员变量:整个类全都可以通用 * * 3.默认值不一样【重点】 * 局部变量:没有默认值,如果要想使用,必须手动进行赋值 * 成员变量:如果没有赋值,会有默认值,规则和数组一

qq_42577508的博客 175

java学习笔记day06-成员变量和局部变量的区别

局部变量和成员变量 1.定义的位置不同【重点】 局部变量:在方法的内部 成员变量:在方法的外部,直接写在类当中 2,。作用范围不一样【重点】 局部变量:只有方法当中才可以使用,出了方法就不能在使用。 成员变量:整个类都可以通用。 3.默认值不一样【重点】 局部变量:没有默认值,如果要想使用,必须手动进行赋值 成员变量:如果没有赋值,会有默认值,规则和数组一样。 4.内存的位置不一样(了解) 局部...

thanks2022的博客 237

DAY 06 面向对象基础

本文系统介绍了面向对象编程(OOP)的核心概念与Java实现。主要内容包括:1. OOP三大特性(封装、继承、多态)及其现实类比;2. 类与对象的设计步骤及Java语法实现;3. 成员变量与局部变量的区别;4. 封装原理与private关键字应用;5. 构造方法特点与内存机制;6. this关键字的作用原理;7. JavaBean标准写法与IDEA快捷操作。文章通过具体代码示例,详细讲解了从类定义、对象创建到方法调用的完整流程,并分析了堆栈内存中的对象存储机制,为Java面向对象编程提供了实用指导。

2501_92298658的博客 2118

【JavaWeb】Day06.JS基础语法

【JavaWeb】Day06.JS基础语法

m0_74197695的博客 914

Day03-06Java基本语法

【代码】Day03 Java基本语法。

weixin_67054830的博客 262
上一篇: 基础第一阶段day05——冒泡排序重点
下一篇: 基础第一阶段day06——对象在内存中的执行步骤
一只高产夏萤
博客等级 码龄8年 20粉丝 44原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值