7-方法,构造方法P a1=new P(X);,变量和常量分类,堆区、栈区等等

本文深入讲解了Java中的方法与构造方法的区别与联系,包括方法的定义、调用、重载与重写,构造方法的作用及初始化过程,以及成员变量与局部变量的区别等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.方法

I.返回数据类型

无返回值方法

有返回值方法

II.参数

无参方法

有参方法--参数类型,个数,顺序

方法名相同即可,参数类型,个数,顺序至少一个不同为重载(参数重载)

可变参数(个数)

可变参数用类型...定义,可变参数相当于数组类型

III调用类型

传值调用方法(传值,基本数据类型)

传引用调用方法(传地址(指向地址),引用数据类型)

IV.格式

I,II,III中各选一个构成方法

* 带参/有参方法
 *      定义方法的语法格式:
 *      访问权限修饰符   返回值类型  方法名称(形式参数列表(调用类型)||无){
 *          方法体
 *      }

(方法)重写参数类型,个数,顺序均相同+返回值类型相同...,除方法体外均相同(方法体相同就冗余了)。

V.区别重载与重写

重载在于参数,与返回值类型无关

重写在于方法体

 2.构造方法-无void或其他

作用:对象初始化。

有参构造方法创建后,系统默认创建的无参构造方法自动失效。

1.空白对照组

 2.创建了有参的构造方法的实验组

区分构造方法和方法(包括set/get方法)

构造方法

1.new

2.不需要定义返回值类型的关键字修饰

初始化分为系统初始化和自定义初始化----都需要new出来

系统初始化---无参构造(我们没有写构造方法时或我们单独写了无参构造)

自定义初始化--有参构造(我们可以根据自己传入的值完成初始化)

方法

1.必须需要定义返回值类型的关键字修饰

2.提供可以间接修改私有属性的方法接口

3.变量与常量

1.局部变量

临时变量常常作为局部变量

2.全局变量(在main方法里,自定义方法里不提供初始化)

报错 

计数器偶尔作为全局变量

成员变量---特指类当中的属性变量,是对整个是全局的,new对象之后由构造器提供初始化。

3.局部常量

自己定义的如临时计算用的量

4.全局常量

1.JAVA的API提供的常量

2.自己导入的依赖包提供的常量

3.自己定义的

以上的局部和全局都是相对而言,全局是相对一个大的语句块M都起作用,而局部相对M内嵌套的某一层某一块内起作用;前提都是放在语句块内的第一行。

M{全局{    

{局部    

}} }

5.形式参数(也是局部变量)

类中定义的方法、构造方法中的参数

this可以解决全局变量(成员变量)名与形式参数名相同的情形,进行区分增加可读性

6.实际参数

传入方法、构造方法的数据类型值

7.成员变量(全局变量的一种)与局部变量的区别

1.定义的位置不同:

  • 成员变量:定义在类体以内,方法体以外

  • 局部变量:定义在方法体内,以及方法的声明上

2.作用域不同:

  • 成员变量:整个类中

  • 局部变量:只在方法体中

3.初始化不同:

  • 成员变量:系统会分配默认值,因为分配在堆区中

  • byte short int long 0

  • float double 0.0

  • char \u0000

  • boolean false

  • 引用类型 null

  • 局部变量:系统不会分配默认值,需要自己先赋值才能够使用

4.生命周期不同:

  • 生命周期:从创建到销毁,从出生到结束的过程。

  • 成员变量:随着对象的创建而创建,随着对象的销毁而销毁

  • 局部变量:使用完立马释放

5.分配的内存不同:

  • 成员变量:分配在堆区中

  • 局部变量:分配在栈区中*当成员变量和局部变量同名的时候,采用就近原则,访问局部变量,

  • 如果想要访问成员变量,就需要使用this解决同名的使用,用this来访问成员变量。

4.构造方法与方法关系

先有对象才能调用方法,所以先(写)用构造方法才能调用到方法。

5.堆区,栈区等等

方法区/永久区

1、什么是方法区

在Java虚拟机中,方法区是可供各线程共享的运行时内存区域。

在不同的JDK版本中,方法区中存储的数据是不一样的。

Java方法区和堆一样,方法区是一块所有线程共享的内存区域,他保存系统的类信息。   比如类的字段、方法、常量池等。方法区的大小决定系统可以保存多少个类。如果系统   定义太多的类,导致方法区溢出。虚拟机同样会抛出内存溢出的错误。方法区可以理解   为永久区。

1. JVM栈 (Java Virtual Machine Stacks) 
2. 堆内存 (Heap Memory) 
3. 方法区 (Method Area) 
4. 本地方法栈 (Native Method Stacks) 
5. 程序计数器 (Program Counter (PC) Register)

Java中的内存分配区域主要由:堆、栈、常量池、静态域、代码区(方法区/永久区包含前面的除堆、栈)

1.堆(Heap):对象、成员变量

堆主要存放Java在运行过程中new出来的对象,凡是通过new生成的对象都存放在堆中,对于堆中的对象生命周期的管理由Java虚拟机的垃圾回收机制GC进行回收和统一管理。

  • 成员变量:系统会分配默认值,因为分配在堆区中

  • byte short int long 0

  • float double 0.0

  • char \u0000

  • boolean false

  • 引用类型 null

记忆:dui堆dui对象,堆区的会自动完成初始化

2.栈(Stack): 普通、局部变量

栈主要存放在运行期间用到的一些局部变量(基本数据类型的变量)或者是指向其他对象的一些引用,当一段代码或者一个方法调用完毕后,栈中为这段代码所提供的基本数据类型或者对象的引用立即被释放;另外需注意的是栈中存放变量的值是可以共享的,优先在栈中寻找是否有相同变量的值,如果有直接指向这个值,如果没有则另外分配。

局部变量:系统不会分配默认值,需要自己先赋值才能够使用

3.常量池(ConstantPool):final

常量池在编译期间就将一部分数据存放于该区域,包含基本数据类型如int、long等和对象类型String、数组等并以final声明的常量值。特别注意的是对于运行期位于栈中的String常量的值可以通过 String.intern()方法将该值置入到常量池中。

4.静态域(StaticSegment):static

存放类中以static声明的静态成员变量

5.代码区(CodeSegment):

主要存放一些代码段以供类调用的时候所共用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值