类与方法
一、对象在内存中的存在形式
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不能在类定义的外部使用,只能在类定义的方法中使用。