`
929118967
  • 浏览: 21942 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
博客专栏
Fcebf22e-9505-38db-b3f2-65fdcc3fd6a5
java开发的深入浅出
浏览量:7144
文章分类
社区版块
存档分类
最新评论

java笔记之局部变量、成员变量和构造器

 
阅读更多

前言

因为谈构造器,可定涉及到super关键字和this关键字。
其中This指的是当前对象的引用,super是当前对象里面的父类对象的引用。
所以在写正文之前,先来谈谈Super关键字。

Supper

1. 在java中使用super来引用基类的成分:

1)super关键字是用来实现子类访问父类的
因为子类在隐藏了父类的成员变量或者重写了父类的方法后,有时还有可能要用父类的成员变量和方法,
这时访问父类的成员变量或者调用父类的方法就要用到super关键字来实现.
2)super具体使用场景如下:
a.当子类要调用父类的构造函数时用到。
b.当子类要调用父类被重写的方法时用到。
c.当子类要访问父类被隐藏的成员变量时用到

2.示例分析

<script src="https://code.csdn.net/snippets/270635.js" type="text/javascript"></script>
1)代码解释
1))大家知道,如果一个类从另一个类继承时,我们new一个子类对象时,该对象会包含了父类对象,
哪我们改如何引用里面父类对象呢?,答案是使用super.
2))当你new一个对象出来时,它会有一个this引用,这个引用指向对象自身。Super 指向当前对象的父类对象
3))具体的内存中的栈和堆结构如下图:


正文

局部变量与成员变量

1.java 的局部变量和方法参数在栈区中分配,分配的大小是按照变量类型确定

2.成员变量在堆区中分配空间,而且自动赋初值

注:

1)成员变量被包含在对象中

对象是在堆区中被分配,按照类中声明属性来分配空间

属性的访问方式 :引用.属性名 可以取值也可以赋值(静态访问)

2)方法的调用:

类的外部调用: 引用。方法名(参数)

类的内部调用:方法名(参数)

2.构造器(不能被继承)

用来描述对象创建过程的一个特殊方法

构造器

模型(类)————>对象

参数

1)构造方法的语法:

修饰符 类名(数据类型 变量名){

}

注:

1))java中的构造器声明在类的内部

2))方法名与类名相同的方法叫构造器

3))构造器不能声明返回值类型

4))构造器可以包含参数,参数一般都是创建对象所依赖的条件

5))一个创建对象的简单的分析图

2)构造器重载

1))什么叫overLoad:

相同的动作产生的结果却不同(方法表达的语义相同,但实现的过程却不同)

2))构造器的重载:

构造器的名称相同,构造器的参数列表不同

注:

方法的重载是方法名相同,方法签名不同的方法

3))构造器重载的作用:

为了方便用户使用构造器产生不同的对象,适应用户需求,实现 构造器的重用

3)默认构造器:

javac过程中,系统会自动加上一个无参构造器(前提是,类中没定义构造器)

4)this关键字:

this是当前对象的引用,是运行期当前对象的本身

可使用this明确当前对象的方法和属性

注:

在类的内部,访问属性,this。属性名,其中this在没有局部变量和属性同名可以省略。

1)))this(参数列表)

使用它可以调用本类的其他构造器,可以使代码重用;

必须写在构造器的第一行(对象在没有完成创建,其他的代码执行,都不符合常理).

注:对方法的补充解释

方法:用来表示对象的功能,它依赖于对象而存在。方法是动作,一般使用动词来声明

6)代码分析示例:(重点)

代码:

Cal c=new Cal(2,3);

int result=c.add(XXX,XXX);

system.out.println(result);

1))

Cal c=new Cal(2,3);的分析

1)))在堆区开辟一片空间,然后空间包含属性和方法的引用,为属性赋予零值

2)))调用对应构造器,构造器的调用也是一一映射,执行构造器的代码。将实参给构造器中的形参,将形参压入栈中

3)))在栈区中开辟一片引用空间(this)用来记录当前堆区中对象的首地址

4)))使用this.属性找到堆区中属性的位置,并对其赋予对应的值

5)))当构造器执行完,弹出构造器中局部变量

6)))方法执行到main方法中,在栈区中开辟引用空间c,然后赋值null

7)))将堆区中的对象的首地址赋值到栈中的引用

int result=c.add();的分析

1))使用c的空间存储的地址,找到堆区中的add()方法的引用

2)))再通过通过堆区中方法的引用,找到方法区中的方法以及方法体

3)))开始执行add()方法,将方法调用中的实参按照位置赋值给方法定义中的形参

4)))在栈区开辟空间,存储add方法的参数的值

5)))执行Cal的add方法,通过this.属性查找堆区中的值进行运算

6)))将运算的结果存储在栈区,在栈区开辟一个空间result(局部变量),将中间结果赋值给result

7)))将result的值作为放回值返回,这是add方法执行完毕

8)))将add中的局部变量弹栈,回到mian方法中,add将其放回值带回,在栈区开辟空间,用来存储方法的放回值

9)))在栈区中开辟空间result,并将方法的返回值赋值给result

system.out.println(result);的分析

1)))找到栈区中result的值,输出

2)))当main方法执行完毕,将栈区清空,垃圾回收器gc回收堆区中的空间,类装载器卸载方法区中的代码

总结

多对代码进行详细的分析,进一步加深对内存的存储分配,有益于将来的代码的编写和调优。
多画画内存图的每一步,并写上注释。尤其对于初学者这是个关键的学习环节。



分享到:
评论

相关推荐

    尚硅谷JAVA基础笔记吐血整理

    “尚硅谷JAVA基础笔记”涵盖了Java语言的基础知识,包括语言概述、基本语法、面向对象概念、封装、继承和多态,以及一些关键概念如形参与实参、属性与局部变量、构造器、this关键字、包和MVC设计模式的使用。...

    java读书笔记笔记笔记笔记笔记笔记

    "this"关键字在Java中用于引用当前对象,常用于构造器链、避免成员变量和局部变量的混淆,以及在匿名内部类中引用外部类的成员。这个PPT文件可能详细解释了this关键字的用法和应用场景。 3. **Execution_files** - ...

    java笔记 java笔记

    `this`关键字代表当前对象的引用,常用于区分成员变量和局部变量。 ##### 6.6 访问控制符 Java提供了四种访问修饰符:`public`、`private`、`protected`和`default`,用于控制类、方法和变量的可见性。 ##### 6.7...

    Java变量笔记

    - **局部变量**:在方法、构造器或块中定义的变量。 - **实例变量**:在类体中声明但位于任何方法之外的变量。 - **类变量(静态变量)**:用 `static` 关键字修饰的变量。 - **参数**:传递给方法或构造器的值。 #...

    java笔记整理(超详细).pdf

    但是成员变量和局部变量都能被final所修饰。 2. 从变量在内存中的存储方式来看,成员变量是对象的一部分,而对象存在于堆内存,局部变量存在于栈内存。 3. 从变量在内存中的生命周期来看,成员变量是对象的一部分,...

    小码哥-任小龙Java笔记-面向对象的全部笔记

    - **作用域**:成员变量在整个类中都有效,而局部变量(定义在方法内的变量)仅在其所在的方法或代码块内有效。 **2. 静态与非静态成员的区别** - **静态成员**(`static`修饰):由类的所有实例共享,可以通过...

    Java变量(学习笔记).pdf

    - 局部变量:存在于方法、构造器或块中,生命周期仅限于该方法、构造器或块的执行期间。局部变量必须在使用前初始化。 7. Java的命名规范: - 包名:所有字母小写,如`xxxyyyzzz`。 - 类名和接口名:每个单词首...

    Java变量(学习笔记).docx

    3. 局部变量(Local Variables):这些变量只在方法、构造器或块中有效,它们的生命周期仅限于声明它们的代码块。局部变量必须在使用前初始化。 Java的命名规范不仅适用于变量,还包括包名、类名、接口名、方法名和...

    学习笔记CoreJava_day04

    根据给定的学习笔记文档,我们可以将Java中的变量大致分为两大类:成员变量与局部变量。 - **成员变量**: - 成员变量又可以进一步划分为实例变量与类变量。 - **实例变量**:在类中定义但未被`static`修饰的变量...

    java基础总结大全(笔记).pdf

    - 栈内存存储局部变量,自动释放。 - 堆内存用于存储数组和对象,由new创建的实例存放于此。 - 方法区存储静态成员、构造函数等。 - 本地方法区是操作系统级别的,如Windows的寄存器。 15. 面向对象: - 面向...

    面向对象程序设计Java听课笔记

    - this关键字:指代当前对象,用于区分成员变量和局部变量,调用本类的其他构造器。 - static关键字:静态成员属于类,不依赖于类的实例,常用于创建单例、静态变量和静态方法。 - final关键字:用于声明不可变的...

    Java基础知识笔记.rar

    2. **Java语法基础**:包括数据类型(如整型、浮点型、字符型、布尔型和引用类型)、变量(局部变量、成员变量、常量)以及运算符(算术、关系、逻辑、位、赋值等)的使用。 3. **控制结构**:学习如何使用条件语句...

    java笔记整理(超详细) java笔记整理(超详细)

    局部变量存在于栈内存,随着方法调用结束而销毁。 10. **异常处理**: - 异常是程序运行时的非正常状态,分为`Exception`和`Error`。 - `Exception`是可以被程序捕获和处理的,`Error`通常是严重问题,如JVM内部...

    java学习笔记

    2. **成员变量与局部变量**:成员变量是类的一部分,定义在类的主体中,而局部变量则声明在方法、构造器或者块中。成员变量属于类的实例,局部变量只在声明它的作用域内有效。成员变量有默认初始化值,而局部变量...

    学习笔记 java\CoreJava笔记\CoreJava_day10

    可以访问外部类的成员变量,但不能访问局部变量,除非这些局部变量是final的。 4. 匿名内部类(anonymous inner class):没有名称的内部类,通常用于实现接口或继承抽象类,并且只在定义的地方使用。在编写简洁的...

    java script 学习笔记

    JavaScript 学习笔记 JavaScript 基础知识 ...* JavaScript 类可以使用 `function` 关键字声明,类可以有构造方法和成员变量。 * JavaScript 类可以使用 `prototype` 属性来继承其他类的成员变量。

    java面向对象和第一章整理笔记

    - **局部变量**:在方法、构造器或者块内声明,作用域仅限于声明它的代码块,生命周期从声明时开始,到该代码块执行结束时结束。 - **成员变量**:也称为实例变量,属于类,不属于任何方法,作用域在整个类中,...

    Java的学习笔记

    - 局部变量在方法、构造器或者块中声明,它们存储在栈中,生命周期仅限于它们所在的代码块。 - 成员变量(包括实例变量和静态变量)属于类,实例变量存储在堆中,静态变量存储在方法区(常量池)。 6. **面向对象...

    Java学习笔记(必看经典)

    局部变量则是在方法内部定义的,它们的作用域仅限于该方法。类方法中的特殊方法是构造方法,用于初始化新创建的对象。构造方法的名称与类名相同,且没有返回值。创建对象时,通过`new`关键字调用构造方法: ```java...

    JAVA培训笔记.doc

    - **求100以内奇数之和**: ```java public static void parity() { int result = 0; for (int i = 1; i ; i++) { if ((i & 1) == 1) { // 使用位运算判断奇偶性 result += i; } } System.out.println(...

Global site tag (gtag.js) - Google Analytics