类与方法

一、对象在内存中的存在形式

1、成员变量用来表示属性的

成员变量=属性=field(字段)

2、访问修饰符(四种)

public、 private、 默认 ,protected

3、生成新对象:

 

 

(流程简单分析) 

(1、先加载Person类信息:属性和方法信息,只会加载一次)

(2、在堆中分配空间,进行默认初始化:具有规则)

(3、把地址赋给P,P就指向对象)

(4、进行指定初始化,比如p.name = "hello")

Cat   cat = new Cat();

new Cat():表示新生成的对象

cat:表示变量引用

4、类和对象的内存分配机制:

a、栈:一般存放基本数据类型(局部变量)

b、堆:存放对象(Cat cat,数组等)

c、方法区:常量池(常量,字符串),类加载信息

d、示意图【Cat(name,age,price)】

二、方法的调用机制分析

 

 

方法调用小结:

1、当程序执行到方法时,就会开辟一个独立的空间(栈空间)

2、当方法执行完毕,或者执行到return语句时,就会返回

3、返回到调用方法的地方

4、返回后继续执行方法后代码

5、当main方法(栈)执行完毕,整个程序退出

三、方法调用

1、同一个类中的static方法,可以直接调用。

2、跨类中的方法A类调用B类方法:需要创建对象名调用。

3、方法中不能再定义方法,方法定义不能嵌套。

4、在类中新建一个类,需要在另一个类之外,可以直接创建对象调用,

 如果在一个类中创建一个类,那么需要类为static类。

四、成员方法传参机制:

1、基本数据类型传值,只是进行拷贝数据,引用的方法会重新分配一个栈,

栈中进行形参的计算处理,形参的改变不会改变实参的值;

2、方法中传递的参数不是基础数据类型,而是对象,那么引用类型传递不是数据拷贝,

而是(拷贝地址)传递地址,那么形参的变化会影响形参的值。即实参会跟随实参的改变而改变。

3、若将传入对象赋值为null将不会改变实参的值。

五、递归与递归机制

 递归重要规则:

 

 

1、执行一个方法时,就创建一个新的受保护的独立空间(栈空间)

2、方法的局部变量是独立的,不会相互影响

3、如果方法中使用的是引用类型变量(如数组)就会共享该引用类型数据

4、递归必须向退出递归的条件逼近,否则就是无限递归,出现

StackOverflowError,死龟了:)

5、当一个方法执行完毕,或者遇到return,就会返回,遵守谁调用,就将结果返回给谁,同时当方法执行完毕或者返回时,该方法也就执行完毕。

 六、重载overload(java中允许同一个类中,多个同名方法的存在,但要求形参列表不一致!)

细节:

1、方法名:必须相同

2、参数列表:参数必须不同(参数类型和个数至少有一个不同,参数名无要求)

3、返回类型:无要求

七、可变参数(java允许将同一个类中多个同名同功能但参数个数不同的方法,封装成一个方法。)

●基本语法

访问修饰符返回类型方法名(数据类型...形参名){}

void  sum(int  i,double... num):其中double就表示可变参数,num可以看作是一个数组

使用细节和注意事项:

1)可变参数的实参可以为0个或任意多个。

2)可变参数的实参可以为数组。
3)可变参数的本质就是数组.
4)可变参数可以和普通类型的参数一起放在形参列表,但必须保证可变参数在最后

5)一个形参列表中只能出现一个可变参数

八、作用域

在java编程中,主要的变量就是属性(成员变量)和局部变量

1、局部变量一般是指在成员方法中定义的变量,作用域为定义它的方法中

2、全局变量:也就是属性(在定义时,可以直接赋值),作用域为整个类体

3、全局变量有默认值,局部变量没有默认值;

注意事项和细节:

1):属性和局部变量可以重名,访问时遵循就近原则。

2):同一个作用域中,变量不能重名;

3):属性生命周期较长,伴随着对象的创建而创建,伴随着对象的销毁而销毁。局部变量,生命周期较短,伴随着它的代码块的执行而创建,伴随着代码块的结束而销毁。即在一次方法调用过程中。

 

区别:

4)作用域范围不同:

全局变量/属性:可以被本类使用,或其他类使用(通过对象调用)

局部变量:只能在本类中对应的方法中使用

5)修饰符不同:

全局变量/属性可以加修饰符

局部变量不可以加修饰符

九、构造器(是类的一种特殊方法,主要作用是完成对新对象的初始化。)

 基本语法

[修饰符]方法名(形参列表){
方法体;
}
说明:
1)构造器的修饰符可以默认,也可以是public protected private

2)构造器没有返回值
3)方法名和类名字必须一样
4)参数列表和成员方法一样的规则

5)构造器的调用,由系统完成对对象的初始化,没有返回值。

注意:

6):只是对对象初始化,并不是创建一个新对象;

没有写构造器时,系统会自动给类生成一个无参构造器

7):如果自己定义了构造器就会覆盖掉默认构造器,不会再调用无参构造器了。

 十:this关键字(Java虚拟机会给每一个对象分配this,代表当前对象)

那个对象调用,this就表示那个调用的对象。一个指向自己的对象

注意事项和使用细节:(访问构造器语法:this(参数列表);必须放置第一条语句)

1. this关键字可以用来访问本类的属性、方法、构造器

2. this用于区分当前类的属性和局部变量
3.访问成员方法的语法:this.方法名(参数列表);
4.访问构造器语法:this(参数列表);注意只能在构造器中使用(只能在构造器中调用)

5. this不能在类定义的外部使用,只能在类定义的方法中使用。

 

posted @ 2021-06-13 21:07  代码红了一大片  阅读(176)  评论(0编辑  收藏  举报